File: t_ldap_schema_tokenizer.py

package info (click to toggle)
python-ldap 3.4.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,756 kB
  • sloc: python: 9,558; ansic: 3,052; makefile: 139; sh: 79
file content (123 lines) | stat: -rw-r--r-- 4,207 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""
Automatic tests for python-ldap's module ldap.schema.tokenizer

See https://www.python-ldap.org/ for details.
"""

import os
import unittest

# Switch off processing .ldaprc or ldap.conf before importing _ldap
os.environ['LDAPNOINIT'] = '1'

import ldap.schema

# basic test cases
TESTCASES_BASIC = (
    (" BLUBBER DI BLUBB ", ["BLUBBER", "DI", "BLUBB"]),
    ("BLUBBER DI BLUBB", ["BLUBBER", "DI", "BLUBB"]),
    ("BL-UB-BER DI BL-UBB", ["BL-UB-BER", "DI", "BL-UBB"]),
    ("BLUBBER  DI   BLUBB  ", ["BLUBBER", "DI", "BLUBB"]),
    ("BLUBBER  DI  'BLUBB'   ", ["BLUBBER", "DI", "BLUBB"]),
    ("BLUBBER ( DI ) 'BLUBB'   ", ["BLUBBER", "(", "DI", ")", "BLUBB"]),
    ("BLUBBER(DI)", ["BLUBBER", "(", "DI", ")"]),
    ("BLUBBER ( DI)", ["BLUBBER", "(", "DI", ")"]),
    ("BLUBBER ''", ["BLUBBER", ""]),
    ("( BLUBBER (DI 'BLUBB'))", ["(", "BLUBBER", "(", "DI", "BLUBB", ")", ")"]),
    ("BLUBB (DA$BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]),
    ("BLUBB ( DA $  BLAH )", ['BLUBB', "(", "DA", "BLAH", ")"]),
    ("BLUBB (DA$ BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]),
    ("BLUBB (DA $BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]),
    ("BLUBB 'DA$BLAH'", ['BLUBB', "DA$BLAH"]),
    ("BLUBB DI 'BLU B B ER' DA 'BLAH' ", ['BLUBB', 'DI', 'BLU B B ER', 'DA', 'BLAH']),
    ("BLUBB DI 'BLU B B ER' DA 'BLAH' LABER", ['BLUBB', 'DI', 'BLU B B ER', 'DA', 'BLAH', 'LABER']),
    ("BLUBB\t'DA\tBLUB'", ['BLUBB', "DA\tBLUB"]),
)

# UTF-8 raw strings
TESTCASES_UTF8 = (
    (" BL\xc3\x9cBBER D\xc3\x84 BL\xc3\x9cBB ", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]),
    ("BL\xc3\x9cBBER D\xc3\x84 BL\xc3\x9cBB", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]),
    ("BL\xc3\x9cBBER  D\xc3\x84   BL\xc3\x9cBB  ", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]),
)

# broken schema of Oracle Internet Directory
TESTCASES_BROKEN_OID = (
    "BLUBB DI 'BLU B B ER'MUST 'BLAH' ", #['BLUBB', 'DI', 'BLU B B ER', 'MUST', 'BLAH']
    "BLUBBER DI 'BLU'BB ER' DA 'BLAH' ", #["BLUBBER", "DI", "BLU'BB ER", "DA", "BLAH"]
)

# for quoted single quotes inside string values
TESTCASES_ESCAPED_QUOTES = (
    ("BLUBBER '\\''", ["BLUBBER", "'"]),
    ("BLUBBER DI 'BLU\\'BB ER' DA 'BLAH' ", ["BLUBBER", "DI", "BLU'BB ER", "DA", "BLAH"]),
    ("BLUBBER DI 'BLU\\' BB ER' DA 'BLAH' ", ["BLUBBER", "DI", "BLU' BB ER", "DA", "BLAH"]),
)

# test cases which should result in ValueError raised
TESTCASES_BROKEN = (
    "( BLUB",
    "BLUB )",
    "BLUB 'DA",
    "BLUB $ DA",
#    "BLUB 'DA\\'",
#    "( BLUB )) DA (",
)

class TestSplitTokens(unittest.TestCase):
    """
    test function ldap.schema.tokenizer.split_tokens()
    """

    def _run_split_tokens_tests(self, test_cases):
        for test_value, test_result in test_cases:
            token_list = ldap.schema.split_tokens(test_value)
            self.assertEqual(token_list, test_result)

    def _run_failure_tests(self, test_cases):
        should_have_failed = []
        for test_value in test_cases:
            try:
                _ = ldap.schema.split_tokens(test_value)
            except ValueError:
                pass
            else:
                should_have_failed.append(test_value)
        if should_have_failed:
            self.fail(
                '%d value(s) should have raised ValueError: %r' % (
                    len(should_have_failed),
                    should_have_failed,
                )
            )

    def test_basic(self):
        """
        run test cases specified in constant TESTCASES_BASIC
        """
        self._run_split_tokens_tests(TESTCASES_BASIC)

    def test_utf8(self):
        """
        run test cases specified in constant TESTCASES_BASIC
        """
        self._run_split_tokens_tests(TESTCASES_UTF8)

    def test_broken_oid(self):
        """
        run test cases specified in constant TESTCASES_BROKEN_OID
        """
        self._run_failure_tests(TESTCASES_BROKEN_OID)

    def test_escaped_quotes(self):
        """
        run test cases specified in constant TESTCASES_ESCAPED_QUOTES
        """
        self._run_split_tokens_tests(TESTCASES_ESCAPED_QUOTES)

    def test_broken(self):
        self._run_failure_tests(TESTCASES_BROKEN)


if __name__ == '__main__':
    unittest.main()