mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #10829: Refactor PyUnicode_FromFormat()
* Use the same function to parse the format string in the 3 steps * Fix crashs on invalid format strings
This commit is contained in:
parent
096f1a85f0
commit
968654515f
3 changed files with 103 additions and 68 deletions
|
@ -1455,9 +1455,28 @@ class UnicodeTest(string_tests.CommonTest,
|
|||
'string, got a non-ASCII byte: 0xe9$',
|
||||
PyUnicode_FromFormat, b'unicode\xe9=%s', 'ascii')
|
||||
|
||||
# test "%c"
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0xabcd)), '\uabcd')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0x10ffff)), '\U0010ffff')
|
||||
|
||||
# test "%"
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%'), '%')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%%'), '%')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%%s'), '%s')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'[%%]'), '[%]')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%%%s', b'abc'), '%abc')
|
||||
|
||||
# test "%i"
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%03i', c_int(10)), '010')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%0.4i', c_int(10)), '0010')
|
||||
|
||||
# not supported: copy the raw format string. these tests are just here
|
||||
# to check for crashs and should not be considered as specifications
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%1%s', b'abc'), '%s')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%1abc'), '%1abc')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%+i', c_int(10)), '%+i')
|
||||
self.assertEqual(PyUnicode_FromFormat(b'%.%s', b'abc'), '%.%s')
|
||||
|
||||
# other tests
|
||||
text = PyUnicode_FromFormat(b'%%A:%A', 'abc\xe9\uabcd\U0010ffff')
|
||||
self.assertEqual(text, r"%A:'abc\xe9\uabcd\U0010ffff'")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue