1# -*- coding: utf-8 -*- 2""" 3Automatic tests for module ldap0.schema.parse 4""" 5 6import unittest 7 8from ldap0.schema.parse import split_tokens 9 10# basic test cases 11TESTCASES_BASIC = ( 12 (" BLUBBER DI BLUBB ", ["BLUBBER", "DI", "BLUBB"]), 13 ("BLUBBER DI BLUBB", ["BLUBBER", "DI", "BLUBB"]), 14 ("BL-UB-BER DI BL-UBB", ["BL-UB-BER", "DI", "BL-UBB"]), 15 ("BLUBBER DI BLUBB ", ["BLUBBER", "DI", "BLUBB"]), 16 ("BLUBBER DI 'BLUBB' ", ["BLUBBER", "DI", "BLUBB"]), 17 ("BLUBBER ( DI ) 'BLUBB' ", ["BLUBBER", "(", "DI", ")", "BLUBB"]), 18 ("BLUBBER(DI)", ["BLUBBER", "(", "DI", ")"]), 19 ("BLUBBER ( DI)", ["BLUBBER", "(", "DI", ")"]), 20 ("BLUBBER ''", ["BLUBBER", ""]), 21 ("( BLUBBER (DI 'BLUBB'))", ["(", "BLUBBER", "(", "DI", "BLUBB", ")", ")"]), 22 ("BLUBB (DA$BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]), 23 ("BLUBB ( DA $ BLAH )", ['BLUBB', "(", "DA", "BLAH", ")"]), 24 ("BLUBB (DA$ BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]), 25 ("BLUBB (DA $BLAH)", ['BLUBB', "(", "DA", "BLAH", ")"]), 26 ("BLUBB 'DA$BLAH'", ['BLUBB', "DA$BLAH"]), 27 ("BLUBB DI 'BLU B B ER' DA 'BLAH' ", ['BLUBB', 'DI', 'BLU B B ER', 'DA', 'BLAH']), 28 ("BLUBB DI 'BLU B B ER' DA 'BLAH' LABER", ['BLUBB', 'DI', 'BLU B B ER', 'DA', 'BLAH', 'LABER']), 29 ("BLUBB\t'DA\tBLUB'", ['BLUBB', "DA\tBLUB"]), 30) 31 32# UTF-8 raw strings 33TESTCASES_UTF8 = ( 34 (" BL\xc3\x9cBBER D\xc3\x84 BL\xc3\x9cBB ", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]), 35 ("BL\xc3\x9cBBER D\xc3\x84 BL\xc3\x9cBB", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]), 36 ("BL\xc3\x9cBBER D\xc3\x84 BL\xc3\x9cBB ", ["BL\xc3\x9cBBER", "D\xc3\x84", "BL\xc3\x9cBB"]), 37) 38 39# broken schema of Oracle Internet Directory 40TESTCASES_BROKEN_OID = ( 41 ("BLUBB DI 'BLU B B ER'MUST 'BLAH' ", ['BLUBB', 'DI', 'BLU B B ER', 'MUST', 'BLAH']), 42 ("BLUBBER DI 'BLU'BB ER' DA 'BLAH' ", ["BLUBBER", "DI", "BLU'BB ER", "DA", "BLAH"]), 43) 44 45# for quoted single quotes inside string values 46TESTCASES_ESCAPED_QUOTES = ( 47 ("BLUBBER '\\''", ["BLUBBER", "'"]), 48 ("BLUBBER DI 'BLU\\'BB ER' DA 'BLAH' ", ["BLUBBER", "DI", "BLU'BB ER", "DA", "BLAH"]), 49 ("BLUBBER DI 'BLU\\' BB ER' DA 'BLAH' ", ["BLUBBER", "DI", "BLU' BB ER", "DA", "BLAH"]), 50) 51 52# test cases which should result in ValueError raised 53TESTCASES_BROKEN = ( 54 "( BLUB", 55 "BLUB )", 56 "BLUB 'DA", 57 "BLUB $ DA", 58# "BLUB 'DA\\'", 59# "( BLUB )) DA (", 60) 61 62class TestSplitTokens(unittest.TestCase): 63 """ 64 test function ldap0.schema.parse.split_tokens() 65 """ 66 67 def _run_split_tokens_tests(self, test_cases): 68 for test_value, test_result in test_cases: 69 token_list = split_tokens(test_value) 70 self.assertEqual(token_list, test_result) 71 72 def _run_failure_tests(self, test_cases): 73 should_have_failed = [] 74 for test_value in test_cases: 75 try: 76 _ = split_tokens(test_value) 77 except ValueError: 78 pass 79 else: 80 should_have_failed.append(test_value) 81 if should_have_failed: 82 self.fail( 83 '%d value(s) should have raised ValueError: %r' % ( 84 len(should_have_failed), 85 should_have_failed, 86 ) 87 ) 88 89 def test_basic(self): 90 """ 91 run test cases specified in constant TESTCASES_BASIC 92 """ 93 self._run_split_tokens_tests(TESTCASES_BASIC) 94 95 def test_utf8(self): 96 """ 97 run test cases specified in constant TESTCASES_BASIC 98 """ 99 self._run_split_tokens_tests(TESTCASES_UTF8) 100 101 @unittest.expectedFailure 102 def test_let_broken_oid_pass(self): 103 """ 104 run test cases specified in constant TESTCASES_BROKEN_OID 105 """ 106 self._run_split_tokens_tests(TESTCASES_BROKEN_OID) 107 108 @unittest.expectedFailure 109 def test_escaped_quotes(self): 110 """ 111 run test cases specified in constant TESTCASES_ESCAPED_QUOTES 112 """ 113 self._run_split_tokens_tests(TESTCASES_ESCAPED_QUOTES) 114 115 def test_broken(self): 116 self._run_failure_tests(TESTCASES_BROKEN) 117 118 119if __name__ == '__main__': 120 unittest.main() 121