File: test_codecs.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (53 lines) | stat: -rw-r--r-- 2,396 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# encoding: iso-8859-15
from pypy.module.cpyext.test.test_api import BaseApiTest
from rpython.rtyper.lltypesystem import rffi
from pypy.module.cpyext.codecs import (
    PyCodec_IncrementalEncoder, PyCodec_IncrementalDecoder,
    PyCodec_Encoder, PyCodec_Decoder)
from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase

class TestCodecs(BaseApiTest):
    def test_incremental(self, space):
        utf8 = rffi.str2charp('utf-8')
        w_encoder = PyCodec_IncrementalEncoder(space, utf8, None)
        w_encoded = space.call_method(w_encoder, 'encode', space.wrap(u'späm'))
        w_decoder = PyCodec_IncrementalDecoder(space, utf8, None)
        w_decoded = space.call_method(w_decoder, 'decode', w_encoded)
        assert space.utf8_w(w_decoded) == u'späm'.encode("utf-8")
        rffi.free_charp(utf8)

    def test_encoder_decoder(self, space):
        utf8 = rffi.str2charp('utf-8')
        w_encoder = PyCodec_Encoder(space, utf8)
        w_decoder = PyCodec_Decoder(space, utf8)
        rffi.free_charp(utf8)
        space.appexec([w_encoder, w_decoder], r"""(encoder, decoder):
            assert encoder(u"\u1234") == (b"\xe1\x88\xb4", 1)
            assert decoder(b"\xe1\x88\xb4") == (u"\u1234", 3)
        """)

class AppTestUnicodeObject(AppTestCpythonExtensionBase):
    def test_encode_decode(self):
        module = self.import_extension('foo', [
            ("encode", "METH_VARARGS",
             """
                PyObject *obj=NULL;
                const char *encoding=NULL;
                const char *errors=NULL;
                if (!PyArg_ParseTuple(args, "Os|s:foo.encode", &obj, &encoding, &errors))
                    return NULL;
                return PyCodec_Encode(obj, encoding, errors);
            """),
            ("decode", "METH_VARARGS",
             """
                PyObject *obj=NULL;
                const char *encoding=NULL;
                const char *errors=NULL;
                if (!PyArg_ParseTuple(args, "Os|s:foo.decode", &obj, &encoding, &errors))
                    return NULL;
                return PyCodec_Decode(obj, encoding, errors);
            """),])
        assert module.decode(b'abc', 'latin-1') == 'abc'
        assert module.encode('abc', 'latin-1') == b'abc'
        assert module.decode(b'abc', 'latin-1', 'strict') == 'abc'
        assert module.encode('abc', 'latin-1', 'strict') == b'abc'