Close #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls
encreset() instead of decreset().
This commit is contained in:
parent
ebbb3b7972
commit
e15dce3d18
|
@ -458,7 +458,8 @@ define in order to be compatible with the Python codec registry.
|
|||
|
||||
.. method:: reset()
|
||||
|
||||
Reset the encoder to the initial state.
|
||||
Reset the encoder to the initial state. The output is discarded: call
|
||||
``.encode('', final=True)`` to reset the encoder and to get the output.
|
||||
|
||||
|
||||
.. method:: IncrementalEncoder.getstate()
|
||||
|
|
|
@ -260,7 +260,8 @@ class TestStateful(unittest.TestCase):
|
|||
text = '\u4E16\u4E16'
|
||||
encoding = 'iso-2022-jp'
|
||||
expected = b'\x1b$B@$@$'
|
||||
expected_reset = b'\x1b$B@$@$\x1b(B'
|
||||
reset = b'\x1b(B'
|
||||
expected_reset = expected + reset
|
||||
|
||||
def test_encode(self):
|
||||
self.assertEqual(self.text.encode(self.encoding), self.expected_reset)
|
||||
|
@ -271,6 +272,8 @@ class TestStateful(unittest.TestCase):
|
|||
encoder.encode(char)
|
||||
for char in self.text)
|
||||
self.assertEqual(output, self.expected)
|
||||
self.assertEqual(encoder.encode('', final=True), self.reset)
|
||||
self.assertEqual(encoder.encode('', final=True), b'')
|
||||
|
||||
def test_incrementalencoder_final(self):
|
||||
encoder = codecs.getincrementalencoder(self.encoding)()
|
||||
|
@ -279,12 +282,14 @@ class TestStateful(unittest.TestCase):
|
|||
encoder.encode(char, index == last_index)
|
||||
for index, char in enumerate(self.text))
|
||||
self.assertEqual(output, self.expected_reset)
|
||||
self.assertEqual(encoder.encode('', final=True), b'')
|
||||
|
||||
class TestHZStateful(TestStateful):
|
||||
text = '\u804a\u804a'
|
||||
encoding = 'hz'
|
||||
expected = b'~{ADAD'
|
||||
expected_reset = b'~{ADAD~}'
|
||||
reset = b'~}'
|
||||
expected_reset = expected + reset
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(__name__)
|
||||
|
|
|
@ -177,9 +177,12 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls
|
||||
encreset() instead of decreset().
|
||||
|
||||
- Issue #12218: Removed wsgiref.egg-info.
|
||||
|
||||
- Issue #12196: Add pipe2() to the os module.
|
||||
- Issue #12196: Add pipe2() to the os module.
|
||||
|
||||
- Issue #985064: Make plistlib more resilient to faulty input plists.
|
||||
Patch by Mher Movsisyan.
|
||||
|
|
|
@ -901,11 +901,17 @@ mbiencoder_encode(MultibyteIncrementalEncoderObject *self,
|
|||
static PyObject *
|
||||
mbiencoder_reset(MultibyteIncrementalEncoderObject *self)
|
||||
{
|
||||
if (self->codec->decreset != NULL &&
|
||||
self->codec->decreset(&self->state, self->codec->config) != 0)
|
||||
return NULL;
|
||||
/* Longest output: 4 bytes (b'\x0F\x1F(B') with ISO 2022 */
|
||||
unsigned char buffer[4], *outbuf;
|
||||
Py_ssize_t r;
|
||||
if (self->codec->encreset != NULL) {
|
||||
outbuf = buffer;
|
||||
r = self->codec->encreset(&self->state, self->codec->config,
|
||||
&outbuf, sizeof(buffer));
|
||||
if (r != 0)
|
||||
return NULL;
|
||||
}
|
||||
self->pendingsize = 0;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue