mirror of https://github.com/python/cpython
Add tests for the C APIs PyCodec_IncrementalEncoder() and
PyCodec_IncrementalDecoder().
This commit is contained in:
parent
ba8e180f3b
commit
9ae019bf5b
|
@ -1,7 +1,7 @@
|
|||
from test import test_support
|
||||
import unittest
|
||||
import codecs
|
||||
import sys, StringIO
|
||||
import sys, StringIO, _testcapi
|
||||
|
||||
class Queue(object):
|
||||
"""
|
||||
|
@ -1032,9 +1032,11 @@ class BasicUnicodeTest(unittest.TestCase):
|
|||
decodedresult += reader.read()
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
|
||||
# check incremental decoder/encoder and iterencode()/iterdecode()
|
||||
# check incremental decoder/encoder (fetched via the Python
|
||||
# and C API) and iterencode()/iterdecode()
|
||||
try:
|
||||
encoder = codecs.getincrementalencoder(encoding)()
|
||||
cencoder = _testcapi.codec_incrementalencoder(encoding)
|
||||
except LookupError: # no IncrementalEncoder
|
||||
pass
|
||||
else:
|
||||
|
@ -1048,6 +1050,16 @@ class BasicUnicodeTest(unittest.TestCase):
|
|||
decodedresult += decoder.decode(c)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
|
||||
# check C API
|
||||
encodedresult = ""
|
||||
for c in s:
|
||||
encodedresult += cencoder.encode(c)
|
||||
cdecoder = _testcapi.codec_incrementaldecoder(encoding)
|
||||
decodedresult = u""
|
||||
for c in encodedresult:
|
||||
decodedresult += cdecoder.decode(c)
|
||||
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
|
||||
|
||||
# check iterencode()/iterdecode()
|
||||
result = u"".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding))
|
||||
self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding))
|
||||
|
|
|
@ -478,6 +478,26 @@ test_u_code(PyObject *self)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
static
|
||||
PyObject *codec_incrementalencoder(PyObject *self, PyObject *args)
|
||||
{
|
||||
const char *encoding, *errors = NULL;
|
||||
if (!PyArg_ParseTuple(args, "s|s:test_incrementalencoder",
|
||||
&encoding, &errors))
|
||||
return NULL;
|
||||
return PyCodec_IncrementalEncoder(encoding, errors);
|
||||
}
|
||||
|
||||
static
|
||||
PyObject *codec_incrementaldecoder(PyObject *self, PyObject *args)
|
||||
{
|
||||
const char *encoding, *errors = NULL;
|
||||
if (!PyArg_ParseTuple(args, "s|s:test_incrementaldecoder",
|
||||
&encoding, &errors))
|
||||
return NULL;
|
||||
return PyCodec_IncrementalDecoder(encoding, errors);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Simple test of _PyLong_NumBits and _PyLong_Sign. */
|
||||
|
@ -623,6 +643,10 @@ static PyMethodDef TestMethods[] = {
|
|||
{"getargs_K", (PyCFunction)getargs_K, METH_VARARGS},
|
||||
{"test_longlong_api", (PyCFunction)test_longlong_api, METH_NOARGS},
|
||||
{"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
|
||||
{"codec_incrementalencoder",
|
||||
(PyCFunction)codec_incrementalencoder, METH_VARARGS},
|
||||
{"codec_incrementaldecoder",
|
||||
(PyCFunction)codec_incrementaldecoder, METH_VARARGS},
|
||||
#endif
|
||||
#ifdef Py_USING_UNICODE
|
||||
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
|
||||
|
|
Loading…
Reference in New Issue