Package Martel :: Package test :: Module test_optimize
[hide private]
[frames] | no frames]

Source Code for Module Martel.test.test_optimize

  1  from xml.sax import handler 
  2   
  3  from Martel import * 
  4  from Martel import Parser, optimize, Expression 
  5   
6 -def test1():
7 format = Group(None, Group("test", Str("A"))) 8 assert format.name is None 9 format2 = optimize.optimize(format) 10 assert format.name is None # must not affect original expressions 11 assert format2.name == "test" # got rid of top level 12 assert format2.expression.string == "A"
13
14 -def test2():
15 format = Group("test", Group(None, Str("A"))) 16 format = optimize.optimize(format) 17 assert format.name == "test" 18 assert format.expression.string == "A"
19
20 -def test3():
21 format = optimize.optimize(Rep1(Group(None, Str("A")))) 22 assert format.expression.string == "A"
23
24 -def test4():
25 format = optimize.optimize(Group(None, Group(None, Group(None, Str("A"))))) 26 assert format.string == "A"
27
28 -def test5():
29 format = optimize.optimize(Group(None, Str("A")) + \ 30 Group("B", Str("B")) + \ 31 Group(None, Str("C"))) 32 assert format.expressions[0].string == "A" 33 assert format.expressions[1].expression.string == "B" 34 assert format.expressions[2].string == "C"
35
36 -def test6():
37 format = optimize.optimize(Str("A") + Str("B")) 38 assert format.string == "AB"
39
40 -def test7():
41 format = optimize.optimize(Str("A") + Str("B") + Str("C") + Str("D")) 42 assert format.string == "ABCD"
43
44 -def test8():
45 format = optimize.optimize((Str("A") + Str("B")) + Str("C")) 46 assert format.string == "ABC"
47
48 -def test9():
49 # Shows that subexpressions are combined first 50 format = optimize.optimize(Str("A") + (Str("B") + Str("C"))) 51 assert format.string == "ABC"
52
53 -def test10():
54 format = optimize.optimize(Any("A") + Str("B")) 55 assert format.string == "AB"
56
57 -def test11():
58 format = optimize.optimize(AnyBut("A") + Str("B")) 59 assert format.expressions[1].string == "B"
60
61 -def test12():
62 format = optimize.optimize(Str("A") + Expression.Any("B")) 63 assert format.string == "AB"
64
65 -def test13():
66 format = optimize.optimize(Expression.Any("A") + \ 67 Expression.Any("B") + \ 68 Expression.Any("C") + \ 69 ((Expression.Any("D") + \ 70 Expression.Any("E")) + \ 71 Expression.Any("F"))) 72 assert format.string == "ABCDEF"
73
74 -def test14():
75 format = optimize.optimize(Str("A") + Expression.Any("B", invert = 1)) 76 assert isinstance(format, Expression.Seq)
77
78 -def test15():
79 format = optimize.optimize(Str("A") + Any("BC")) 80 assert isinstance(format, Expression.Seq)
81
82 -def test16():
83 format = optimize.optimize(Str("A") + Expression.Literal("B")) 84 assert format.string == "AB"
85
86 -def test17():
87 format = optimize.optimize(Str("A") + Expression.Literal("B", invert = 1)) 88 assert isinstance(format, Expression.Seq)
89
90 -def test18():
91 format = optimize.optimize( 92 Group(None, Group(None, Str("A") + Str("B")) + Str("C")) + \ 93 Group(None, Str("D") + Expression.Any("E") + \ 94 Group(None, Str("FG") + Str("H")) + Group(None, Str("I")))) 95 assert format.string == "ABCDEFGHI"
96
97 -def test19():
98 exp = Re("This is a test") 99 assert isinstance(exp, Expression.Seq) 100 assert exp.expressions[0].char == "T" 101 assert exp.expressions[-1].char == "t" 102 format = optimize.optimize(exp) 103 assert format.string == "This is a test"
104
105 -class GetErrorPos(handler.ContentHandler, handler.ErrorHandler):
106 - def __init__(self):
107 handler.ContentHandler.__init__(self) 108 self.pos = None
109 - def startDocument(self):
110 self.pos = None
111 - def error(self, exc):
112 if isinstance(exc, Parser.ParserPositionException): 113 self.pos = exc.pos
114 fatalError = error
115 116
117 -def check_error_pos(text, exp):
118 parser = exp.make_parser() 119 err = GetErrorPos() 120 parser.setErrorHandler(err) 121 parser.parseString(text) 122 return err.pos
123 124
125 -def test20():
126 test_format = Group("full_format", 127 Rep(Group("a_record", 128 Str("A") + Opt(Str("B")) + Str("\n"))) + \ 129 Str("Z")) 130 131 text = "A\nAC\nAB\nZ" 132 pos = check_error_pos(text, test_format) 133 assert pos == 0 134 135 format = select_names(test_format, ()) 136 format = optimize.optimize(format) 137 pos = check_error_pos(text, format) 138 assert pos == 2
139
140 -def test():
141 test1() 142 test2() 143 test3() 144 test4() 145 test5() 146 test6() 147 test7() 148 test8() 149 test9() 150 test10() 151 test11() 152 test12() 153 test13() 154 test14() 155 test15() 156 test16() 157 test17() 158 test18() 159 test19() 160 test20()
161 162 if __name__ == "__main__": 163 test() 164