mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Close #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls
encreset() instead of decreset().
This commit is contained in:
parent
ebbb3b7972
commit
e15dce3d18
4 changed files with 23 additions and 8 deletions
|
@ -458,7 +458,8 @@ define in order to be compatible with the Python codec registry.
|
||||||
|
|
||||||
.. method:: reset()
|
.. 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()
|
.. method:: IncrementalEncoder.getstate()
|
||||||
|
|
|
@ -260,7 +260,8 @@ class TestStateful(unittest.TestCase):
|
||||||
text = '\u4E16\u4E16'
|
text = '\u4E16\u4E16'
|
||||||
encoding = 'iso-2022-jp'
|
encoding = 'iso-2022-jp'
|
||||||
expected = b'\x1b$B@$@$'
|
expected = b'\x1b$B@$@$'
|
||||||
expected_reset = b'\x1b$B@$@$\x1b(B'
|
reset = b'\x1b(B'
|
||||||
|
expected_reset = expected + reset
|
||||||
|
|
||||||
def test_encode(self):
|
def test_encode(self):
|
||||||
self.assertEqual(self.text.encode(self.encoding), self.expected_reset)
|
self.assertEqual(self.text.encode(self.encoding), self.expected_reset)
|
||||||
|
@ -271,6 +272,8 @@ class TestStateful(unittest.TestCase):
|
||||||
encoder.encode(char)
|
encoder.encode(char)
|
||||||
for char in self.text)
|
for char in self.text)
|
||||||
self.assertEqual(output, self.expected)
|
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):
|
def test_incrementalencoder_final(self):
|
||||||
encoder = codecs.getincrementalencoder(self.encoding)()
|
encoder = codecs.getincrementalencoder(self.encoding)()
|
||||||
|
@ -279,12 +282,14 @@ class TestStateful(unittest.TestCase):
|
||||||
encoder.encode(char, index == last_index)
|
encoder.encode(char, index == last_index)
|
||||||
for index, char in enumerate(self.text))
|
for index, char in enumerate(self.text))
|
||||||
self.assertEqual(output, self.expected_reset)
|
self.assertEqual(output, self.expected_reset)
|
||||||
|
self.assertEqual(encoder.encode('', final=True), b'')
|
||||||
|
|
||||||
class TestHZStateful(TestStateful):
|
class TestHZStateful(TestStateful):
|
||||||
text = '\u804a\u804a'
|
text = '\u804a\u804a'
|
||||||
encoding = 'hz'
|
encoding = 'hz'
|
||||||
expected = b'~{ADAD'
|
expected = b'~{ADAD'
|
||||||
expected_reset = b'~{ADAD~}'
|
reset = b'~}'
|
||||||
|
expected_reset = expected + reset
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
support.run_unittest(__name__)
|
support.run_unittest(__name__)
|
||||||
|
|
|
@ -177,6 +177,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls
|
||||||
|
encreset() instead of decreset().
|
||||||
|
|
||||||
- Issue #12218: Removed wsgiref.egg-info.
|
- Issue #12218: Removed wsgiref.egg-info.
|
||||||
|
|
||||||
- Issue #12196: Add pipe2() to the os module.
|
- Issue #12196: Add pipe2() to the os module.
|
||||||
|
|
|
@ -901,11 +901,17 @@ mbiencoder_encode(MultibyteIncrementalEncoderObject *self,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
mbiencoder_reset(MultibyteIncrementalEncoderObject *self)
|
mbiencoder_reset(MultibyteIncrementalEncoderObject *self)
|
||||||
{
|
{
|
||||||
if (self->codec->decreset != NULL &&
|
/* Longest output: 4 bytes (b'\x0F\x1F(B') with ISO 2022 */
|
||||||
self->codec->decreset(&self->state, self->codec->config) != 0)
|
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;
|
return NULL;
|
||||||
|
}
|
||||||
self->pendingsize = 0;
|
self->pendingsize = 0;
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue