test_unicode.py 文件源码

python
阅读 41 收藏 0 点赞 0 评论 0

项目:zippy 作者: securesystemslab 项目源码 文件源码
def test_from_format(self):
        support.import_module('ctypes')
        from ctypes import pythonapi, py_object, c_int
        #if sys.maxunicode == 65535:
        #    name = "PyUnicodeUCS2_FromFormat"
        #else:
        #    name = "PyUnicodeUCS4_FromFormat"
        _PyUnicode_FromFormat = getattr(pythonapi, 'PyUnicode_FromFormat')
        _PyUnicode_FromFormat.restype = py_object

        def PyUnicode_FromFormat(format, *args):
            cargs = tuple(
                py_object(arg) if isinstance(arg, str) else arg
                for arg in args)
            return _PyUnicode_FromFormat(format, *cargs)

        # ascii format, non-ascii argument
        text = PyUnicode_FromFormat(b'ascii\x7f=%U', 'unicode\xe9')
        self.assertEqual(text, 'ascii\x7f=unicode\xe9')

        # non-ascii format, ascii argument: ensure that PyUnicode_FromFormatV()
        # raises an error
        self.assertRaisesRegex(ValueError,
            '^PyUnicode_FromFormatV\(\) expects an ASCII-encoded format '
            'string, got a non-ASCII byte: 0xe9$',
            PyUnicode_FromFormat, b'unicode\xe9=%s', 'ascii')

        self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0xabcd)), '\uabcd')
        self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0x10ffff)), '\U0010ffff')

        # other tests
        text = PyUnicode_FromFormat(b'%%A:%A', 'abc\xe9\uabcd\U0010ffff')
        self.assertEqual(text, r"%A:'abc\xe9\uabcd\U0010ffff'")

        text = PyUnicode_FromFormat(b'repr=%V', 'abc', b'xyz')
        self.assertEqual(text, 'repr=abc')

        # Test string decode from parameter of %s using utf-8.
        # b'\xe4\xba\xba\xe6\xb0\x91' is utf-8 encoded byte sequence of
        # '\u4eba\u6c11'
        text = PyUnicode_FromFormat(b'repr=%V', None, b'\xe4\xba\xba\xe6\xb0\x91')
        self.assertEqual(text, 'repr=\u4eba\u6c11')

        #Test replace error handler.
        text = PyUnicode_FromFormat(b'repr=%V', None, b'abc\xff')
        self.assertEqual(text, 'repr=abc\ufffd')

    # Test PyUnicode_AsWideChar()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号