]> granicus.if.org Git - python/commitdiff
PyUnicode_FromFormatV(): Fix %A format
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 20:59:24 +0000 (20:59 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 20:59:24 +0000 (20:59 +0000)
It was not completly implemented. Add a test.

Lib/test/test_unicode.py
Objects/unicodeobject.c

index 5e96ba8b63b910159277d8ee337b04919218d707..94035ef597e405a92edbefd5cbb989125cb45fc5 100644 (file)
@@ -1380,20 +1380,23 @@ class UnicodeTest(string_tests.CommonTest,
         self.assertEqual("{}".format(s), '__str__ overridden')
 
     def test_from_format(self):
-        # Ensure that PyUnicode_FromFormat() raises an error for a non-ascii
-        # format string.
         from _testcapi import format_unicode
 
         # ascii format, non-ascii argument
         text = format_unicode(b'ascii\x7f=%U', 'unicode\xe9')
         self.assertEqual(text, 'ascii\x7f=unicode\xe9')
 
-        # non-ascii format, ascii argument
+        # non-ascii format, ascii argument: ensure that PyUnicode_FromFormat()
+        # raises an error for a non-ascii format string.
         self.assertRaisesRegexp(ValueError,
             '^PyUnicode_FromFormatV\(\) expects an ASCII-encoded format '
             'string, got a non-ASCII byte: 0xe9$',
             format_unicode, b'unicode\xe9=%s', 'ascii')
 
+        # other tests
+        text = format_unicode(b'%%A:%A', 'abc\xe9\uabcd\U0010ffff')
+        self.assertEqual(text, r"%A:'abc\xe9\uabcd\U0010ffff'")
+
     # Test PyUnicode_AsWideChar()
     def test_aswidechar(self):
         from _testcapi import unicode_aswidechar
index 0e2f95018a55833b265017a6cc77492b03f90d8b..7564b67a2157d2f0d608d89b39533c63e3f30afe 100644 (file)
@@ -1074,6 +1074,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
             }
             case 'S':
             case 'R':
+            case 'A':
             {
                 Py_UNICODE *ucopy;
                 Py_ssize_t usize;