Add tests for the C APIs PyCodec_IncrementalEncoder() and

PyCodec_IncrementalDecoder().
This commit is contained in:
Walter Dörwald 2006-03-18 14:22:26 +00:00
parent ba8e180f3b
commit 9ae019bf5b
2 changed files with 38 additions and 2 deletions

View File

@ -1,7 +1,7 @@
from test import test_support from test import test_support
import unittest import unittest
import codecs import codecs
import sys, StringIO import sys, StringIO, _testcapi
class Queue(object): class Queue(object):
""" """
@ -1032,9 +1032,11 @@ class BasicUnicodeTest(unittest.TestCase):
decodedresult += reader.read() decodedresult += reader.read()
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding)) 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: try:
encoder = codecs.getincrementalencoder(encoding)() encoder = codecs.getincrementalencoder(encoding)()
cencoder = _testcapi.codec_incrementalencoder(encoding)
except LookupError: # no IncrementalEncoder except LookupError: # no IncrementalEncoder
pass pass
else: else:
@ -1048,6 +1050,16 @@ class BasicUnicodeTest(unittest.TestCase):
decodedresult += decoder.decode(c) decodedresult += decoder.decode(c)
self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding)) 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() # check iterencode()/iterdecode()
result = u"".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding)) result = u"".join(codecs.iterdecode(codecs.iterencode(s, encoding), encoding))
self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding)) self.assertEqual(result, s, "%r != %r (encoding=%r)" % (result, s, encoding))

View File

@ -478,6 +478,26 @@ test_u_code(PyObject *self)
return Py_None; 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 #endif
/* Simple test of _PyLong_NumBits and _PyLong_Sign. */ /* Simple test of _PyLong_NumBits and _PyLong_Sign. */
@ -623,6 +643,10 @@ static PyMethodDef TestMethods[] = {
{"getargs_K", (PyCFunction)getargs_K, METH_VARARGS}, {"getargs_K", (PyCFunction)getargs_K, METH_VARARGS},
{"test_longlong_api", (PyCFunction)test_longlong_api, METH_NOARGS}, {"test_longlong_api", (PyCFunction)test_longlong_api, METH_NOARGS},
{"test_L_code", (PyCFunction)test_L_code, 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 #endif
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
{"test_u_code", (PyCFunction)test_u_code, METH_NOARGS}, {"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},