info.streamwriter, 'strict') as srw:
self.assertEquals(srw.read(), "\xfc")
+class TypesTest(unittest.TestCase):
+ def test_decode_unicode(self):
+ # Most decoders don't accept unicode input
+ decoders = [
+ codecs.utf_7_decode,
+ codecs.utf_8_decode,
+ codecs.utf_16_le_decode,
+ codecs.utf_16_be_decode,
+ codecs.utf_16_ex_decode,
+ codecs.utf_32_decode,
+ codecs.utf_32_le_decode,
+ codecs.utf_32_be_decode,
+ codecs.utf_32_ex_decode,
+ codecs.latin_1_decode,
+ codecs.ascii_decode,
+ codecs.charmap_decode,
+ ]
+ if hasattr(codecs, "mbcs_decode"):
+ decoders.append(codecs.mbcs_decode)
+ for decoder in decoders:
+ self.assertRaises(TypeError, decoder, "xxx")
+
+ def test_unicode_escape(self):
+ # Escape-decoding an unicode string is supported ang gives the same
+ # result as decoding the equivalent ASCII bytes string.
+ self.assertEquals(codecs.unicode_escape_decode(r"\u1234"), ("\u1234", 6))
+ self.assertEquals(codecs.unicode_escape_decode(br"\u1234"), ("\u1234", 6))
+ self.assertEquals(codecs.raw_unicode_escape_decode(r"\u1234"), ("\u1234", 6))
+ self.assertEquals(codecs.raw_unicode_escape_decode(br"\u1234"), ("\u1234", 6))
+
def test_main():
support.run_unittest(
BasicUnicodeTest,
CharmapTest,
WithStmtTest,
+ TypesTest,
)
Py_ssize_t consumed;
PyObject *decoded = NULL;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_7_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_7_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len;
Py_ssize_t consumed;
PyObject *decoded = NULL;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_8_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_8_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len;
Py_ssize_t consumed;
PyObject *decoded;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_16_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_16_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
Py_ssize_t consumed;
PyObject *decoded = NULL;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_16_le_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_16_le_decode",
&pbuf, &errors, &final))
return NULL;
Py_ssize_t consumed;
PyObject *decoded = NULL;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_16_be_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_16_be_decode",
&pbuf, &errors, &final))
return NULL;
int final = 0;
Py_ssize_t consumed;
- if (!PyArg_ParseTuple(args, "s*|zii:utf_16_ex_decode",
+ if (!PyArg_ParseTuple(args, "y*|zii:utf_16_ex_decode",
&pbuf, &errors, &byteorder, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
Py_ssize_t consumed;
PyObject *decoded;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_32_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_32_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
Py_ssize_t consumed;
PyObject *decoded;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_32_le_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_32_le_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
Py_ssize_t consumed;
PyObject *decoded;
- if (!PyArg_ParseTuple(args, "s*|zi:utf_32_be_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:utf_32_be_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
int final = 0;
Py_ssize_t consumed;
- if (!PyArg_ParseTuple(args, "s*|zii:utf_32_ex_decode",
+ if (!PyArg_ParseTuple(args, "y*|zii:utf_32_ex_decode",
&pbuf, &errors, &byteorder, &final))
return NULL;
consumed = pbuf.len; /* This is overwritten unless final is true. */
PyObject *unicode;
const char *errors = NULL;
- if (!PyArg_ParseTuple(args, "s*|z:latin_1_decode",
+ if (!PyArg_ParseTuple(args, "y*|z:latin_1_decode",
&pbuf, &errors))
return NULL;
PyObject *unicode;
const char *errors = NULL;
- if (!PyArg_ParseTuple(args, "s*|z:ascii_decode",
+ if (!PyArg_ParseTuple(args, "y*|z:ascii_decode",
&pbuf, &errors))
return NULL;
const char *errors = NULL;
PyObject *mapping = NULL;
- if (!PyArg_ParseTuple(args, "s*|zO:charmap_decode",
+ if (!PyArg_ParseTuple(args, "y*|zO:charmap_decode",
&pbuf, &errors, &mapping))
return NULL;
if (mapping == Py_None)
Py_ssize_t consumed;
PyObject *decoded = NULL;
- if (!PyArg_ParseTuple(args, "s*|zi:mbcs_decode",
+ if (!PyArg_ParseTuple(args, "y*|zi:mbcs_decode",
&pbuf, &errors, &final))
return NULL;
consumed = pbuf.len;