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

Source Code for Module Martel.test.test_Iterator

  1  # tests of the iterator interface 
  2   
  3  import os 
  4  from testformats import swissprot38 
  5  import Martel 
  6  from Martel import RecordReader, Parser 
  7  from xml.sax import handler 
  8   
  9  import test_swissprot38 
 10   
 11  text = test_swissprot38.record1 + test_swissprot38.record2 
 12   
 13   
14 -def test1():
15 # Does it read all of the records? 16 iterator = swissprot38.format.make_iterator("swissprot38_record") 17 stream = iterator.iterateString(text, handler.ContentHandler()) 18 i = 0 19 while 1: 20 try: 21 x = stream.next() 22 except StopIteration: # for IterParser objects 23 x = None 24 if x is None: 25 break 26 i = i + 1 27 assert i == 2, i
28
29 -def test2():
30 # Is is reading a record at a time? 31 iterator = swissprot38.format.make_iterator("swissprot38_record") 32 stream = iterator.iterateString(test_swissprot38.record1 + "X" * 100, 33 handler.ContentHandler()) 34 x = stream.next() 35 assert x is not None, x 36 try: 37 x = stream.next() 38 except KeyboardInterrupt: 39 raise 40 except: 41 pass 42 else: 43 raise AssertionError, "should not allow X's"
44
45 -def test3():
46 # test the non-record reader parser 47 iterator = swissprot38.format.expression.make_iterator("swissprot38_record") 48 stream = iterator.iterateString(text, handler.ContentHandler()) 49 i = 0 50 while 1: 51 x = stream.next() 52 if x is None: 53 break 54 i = i + 1 55 assert i == 2, i
56
57 -def test4():
58 # Make sure the default returns LAX items 59 exp = Martel.Re("(?P<term>(?P<a>a+)(?P<b>b+))+") 60 x = exp.make_iterator("term").iterateString("aabbabaaaabb") 61 term = x.next() 62 assert len(term["a"]) == 1 and term["a"][0] == "aa", term["a"] 63 assert len(term["b"]) == 1 and term["b"][0] == "bb", term["b"] 64 term = x.next() 65 assert len(term["a"]) == 1 and term["a"][0] == "a", term["a"] 66 assert len(term["b"]) == 1 and term["b"][0] == "b", term["b"] 67 term = x.next() 68 assert len(term["a"]) == 1 and term["a"][0] == "aaaa", term["a"] 69 assert len(term["b"]) == 1 and term["b"][0] == "bb", term["b"] 70 term = x.next() 71 assert term is None, "Did not stop correctly"
72
73 -def test5():
74 # Does 'iter' work? 75 try: 76 iter 77 except NameError: 78 print "Test skipped - missing 'iter' builtin from Python 2.2." 79 return 80 exp = Martel.Re("(?P<term>(?P<a>a+)(?P<b>b+))+") 81 x = exp.make_iterator("term") 82 it = iter(x.iterateString("aabbabaaaabb")) 83 term = it.next() 84 assert len(term["a"]) == 1 and term["a"][0] == "aa", term["a"] 85 assert len(term["b"]) == 1 and term["b"][0] == "bb", term["b"] 86 term = it.next() 87 assert len(term["a"]) == 1 and term["a"][0] == "a", term["a"] 88 assert len(term["b"]) == 1 and term["b"][0] == "b", term["b"] 89 term = it.next() 90 assert len(term["a"]) == 1 and term["a"][0] == "aaaa", term["a"] 91 assert len(term["b"]) == 1 and term["b"][0] == "bb", term["b"] 92 try: 93 it.next() 94 raise AssertionError("Did not stop correctly") 95 except StopIteration: 96 pass
97
98 -def test_header_footer1():
99 exp = Martel.HeaderFooter("dataset", {}, 100 Martel.Re("header\R"), 101 RecordReader.CountLines, (1,), 102 103 Martel.Re("a(?P<b>b*)a\R"), 104 RecordReader.CountLines, (1,), 105 106 Martel.Re("end\R"), 107 RecordReader.CountLines, (1,),) 108 lines = [ 109 "header", 110 "aa", 111 "aba", 112 "abba", 113 "end" 114 ] 115 text = "\n".join(lines) + "\n" 116 117 i = 0 118 for info in exp.make_iterator("b").iterateString(text): 119 assert len(info["b"]) == 1 120 assert len(info["b"][0]) == i, (info["b"][0], i) 121 i = i +1 122 assert i == 3, i
123 124
125 -def test_header_footer2():
126 exp = Martel.HeaderFooter("dataset", {}, 127 None, 128 None, None, 129 130 Martel.Re("a(?P<b>b*)a\R"), 131 RecordReader.CountLines, (1,), 132 133 Martel.Re("end\R"), 134 RecordReader.CountLines, (1,),) 135 lines = [ 136 "aa", 137 "aba", 138 "abba", 139 "end" 140 ] 141 text = "\n".join(lines) + "\n" 142 143 i = 0 144 for info in exp.make_iterator("b").iterateString(text): 145 assert len(info["b"]) == 1 146 assert len(info["b"][0]) == i, (info["b"][0], i) 147 i = i +1 148 assert i == 3, i
149 150
151 -def test_header_footer3():
152 exp = Martel.HeaderFooter("dataset", {}, 153 None, 154 None, None, 155 156 Martel.Re("a(?P<b>b*)a\R"), 157 RecordReader.CountLines, (1,), 158 159 None, 160 None, None) 161 lines = [ 162 "aa", 163 "aba", 164 "abba", 165 ] 166 text = "\n".join(lines) + "\n" 167 168 i = 0 169 for info in exp.make_iterator("b").iterateString(text): 170 assert len(info["b"]) == 1 171 assert len(info["b"][0]) == i, (info["b"][0], i) 172 i = i +1 173 assert i == 3, i
174 175
176 -def test_header_footer4():
177 # Test that the errors are correct 178 exp = Martel.HeaderFooter("dataset", {}, 179 Martel.Re("header\R"), 180 RecordReader.CountLines, (1,), 181 182 Martel.Re("a(?P<b>b*)a\R"), 183 RecordReader.CountLines, (1,), 184 185 Martel.Re("end\R"), 186 RecordReader.CountLines, (1,),) 187 lines = [ 188 "HEADER", 189 "aa", 190 "aba", 191 "abba", 192 "end" 193 ] 194 text = "\n".join(lines) + "\n" 195 196 try: 197 for info in exp.make_iterator("b").iterateString(text): 198 pass 199 except Parser.ParserPositionException, exc: 200 assert exc.pos == 0
201 202
203 -def test_header_footer5():
204 exp = Martel.HeaderFooter("dataset", {}, 205 None, 206 None, None, 207 208 Martel.Re("a(?P<b>b*)a\R"), 209 RecordReader.CountLines, (1,), 210 211 Martel.Re("end\R"), 212 RecordReader.CountLines, (1,),) 213 lines = [ 214 "aa", 215 "aba", 216 "abba", 217 "END" 218 ] 219 text = "\n".join(lines) + "\n" 220 221 try: 222 for info in exp.make_iterator("b").iterateString(text): 223 assert len(info["b"]) == 1 224 except Parser.ParserPositionException, exc: 225 assert exc.pos == 12, exc.pos
226 227
228 -def test_header_footer6():
229 exp = Martel.HeaderFooter("dataset", {}, 230 None, 231 None, None, 232 233 Martel.Re("a(?P<b>b*)a\R"), 234 RecordReader.CountLines, (1,), 235 236 None, 237 None, None) 238 lines = [ 239 "aA", 240 "aBbbba", 241 "abba", 242 ] 243 text = "\n".join(lines) + "\n" 244 245 try: 246 for info in exp.make_iterator("b").iterateString(text): 247 pass 248 except Parser.ParserPositionException, exc: 249 assert exc.pos == 1, exc.pos
250
251 -def test_header_footer7():
252 exp = Martel.HeaderFooter("dataset", {}, 253 None, 254 None, None, 255 256 Martel.Re("a(?P<b>b*)a\R"), 257 RecordReader.CountLines, (1,), 258 259 None, 260 None, None) 261 lines = [ 262 "aa", 263 "aBbbba", 264 "abba", 265 ] 266 text = "\n".join(lines) + "\n" 267 268 try: 269 for info in exp.make_iterator("b").iterateString(text): 270 pass 271 except Parser.ParserPositionException, exc: 272 assert exc.pos == 4, exc.pos
273 274 275
276 -def test():
277 # print "Iteration through all records" 278 test1() 279 # print "Iteration a record at a time" 280 test2() 281 # print "Test non-record-based parsers" 282 test3() 283 # print "Test return of LAX objects" 284 test4() 285 # print "Test Python 2.2 iterators" 286 test5() 287 288 test_header_footer1() 289 test_header_footer2() 290 test_header_footer3() 291 test_header_footer4() 292 test_header_footer5() 293 test_header_footer6() 294 test_header_footer7()
295 296 if __name__ == "__main__": 297 test() 298