File: test_encoding.py

package info (click to toggle)
python-uritools 4.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 240 kB
  • sloc: python: 1,534; makefile: 134
file content (80 lines) | stat: -rw-r--r-- 2,748 bytes parent folder | download | duplicates (2)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import unittest

from uritools import RESERVED, UNRESERVED, uridecode, uriencode


class EncodingTest(unittest.TestCase):
    def check(self, decoded, encoded, safe="", encoding="utf-8"):
        self.assertEqual(uriencode(decoded, safe, encoding), encoded)
        self.assertEqual(uridecode(encoded, encoding), decoded)
        # swap bytes/string types
        self.assertEqual(
            uriencode(decoded.encode(encoding), safe, encoding), encoded
        )  # noqa
        self.assertEqual(uridecode(encoded.decode("ascii"), encoding), decoded)

    def test_encoding(self):
        cases = [
            ("", b""),
            (" ", b"%20"),
            ("%", b"%25"),
            ("~", b"~"),
            (UNRESERVED, UNRESERVED.encode("ascii")),
        ]
        for decoded, encoded in cases:
            self.check(decoded, encoded)

    def test_safe_encoding(self):
        cases = [
            ("", b"", ""),
            ("", b"", b""),
            (" ", b" ", " "),
            (" ", b" ", b" "),
            ("%", b"%", "%"),
            ("%", b"%", b"%"),
            (RESERVED, RESERVED.encode("ascii"), RESERVED),
        ]
        for decoded, encoded, safe in cases:
            self.check(decoded, encoded, safe)

    def test_utf8_encoding(self):
        cases = [("\xf6lk\xfcrbis", b"%C3%B6lk%C3%BCrbis")]
        for decoded, encoded in cases:
            self.check(decoded, encoded, encoding="utf-8")

    def test_latin1_encoding(self):
        cases = [("\xf6lk\xfcrbis", b"%F6lk%FCrbis")]
        for decoded, encoded in cases:
            self.check(decoded, encoded, encoding="latin-1")

    def test_idna_encoding(self):
        cases = [("\xf6lk\xfcrbis", b"xn--lkrbis-vxa4c")]
        for decoded, encoded in cases:
            self.check(decoded, encoded, encoding="idna")

    def test_decode_bytes(self):
        cases = [
            ("%F6lk%FCrbis", b"\xf6lk\xfcrbis"),
            (b"%F6lk%FCrbis", b"\xf6lk\xfcrbis"),
        ]
        for input, output in cases:
            self.assertEqual(uridecode(input, encoding=None), output)

    def test_encode_bytes(self):
        cases = [(b"\xf6lk\xfcrbis", b"%F6lk%FCrbis")]
        for input, output in cases:
            self.assertEqual(uriencode(input, encoding=None), output)

    def test_decode_errors(self):
        cases = [
            (UnicodeError, b"%FF", "utf-8"),
        ]
        for exception, string, encoding in cases:
            self.assertRaises(exception, uridecode, string, encoding)

    def test_encode_errors(self):
        cases = [
            (UnicodeError, "\xff", b"", "ascii"),
        ]
        for exception, string, safe, encoding in cases:
            self.assertRaises(exception, uriencode, string, safe, encoding)