1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# -*- coding: utf-8 -*- 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport os 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom StringIO import StringIO 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.tree import CommonTreeAdaptor, CommonTree, INVALID_TOKEN_TYPE 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.treewizard import TreeWizard, computeTokenTypes, \ 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreePatternLexer, EOF, ID, BEGIN, END, PERCENT, COLON, DOT, ARG, \ 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreePatternParser, \ 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreePattern, WildcardTreePattern, TreePatternTreeAdaptor 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestComputeTokenTypes(unittest.TestCase): 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the computeTokenTypes function.""" 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNone(self): 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """computeTokenTypes(None) -> {}""" 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typeMap = computeTokenTypes(None) 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(typeMap, dict)) 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(typeMap, {}) 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testList(self): 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """computeTokenTypes(['a', 'b']) -> { 'a': 0, 'b': 1 }""" 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typeMap = computeTokenTypes(['a', 'b']) 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(typeMap, dict)) 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(typeMap, { 'a': 0, 'b': 1 }) 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreePatternLexer(unittest.TestCase): 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the TreePatternLexer class.""" 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBegin(self): 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): '('""" 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('(') 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, BEGIN) 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEnd(self): 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): ')'""" 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer(')') 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, END) 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testPercent(self): 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): '%'""" 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('%') 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, PERCENT) 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDot(self): 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): '.'""" 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('.') 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, DOT) 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testColon(self): 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): ':'""" 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer(':') 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, COLON) 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEOF(self): 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): EOF""" 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer(' \n \r \t ') 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, EOF) 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testID(self): 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): ID""" 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('_foo12_bar') 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, ID) 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '_foo12_bar') 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testARG(self): 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): ARG""" 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('[ \\]bla\\n]') 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, ARG) 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, ' ]bla\\n') 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, False) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testError(self): 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternLexer(): error""" 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('1') 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.nextToken() 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(type, EOF) 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.sval, '') 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(lexer.error, True) 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreePatternParser(unittest.TestCase): 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the TreePatternParser class.""" 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Setup text fixure 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver We need a tree adaptor, use CommonTreeAdaptor. 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver And a constant list of token names. 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """ 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor = CommonTreeAdaptor() 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.tokens = [ 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ] 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.wizard = TreeWizard(self.adaptor, tokenNames=self.tokens) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNode(self): 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: 'ID'""" 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('ID') 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, CommonTree)) 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getType(), 10) 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getText(), 'ID') 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNodeWithArg(self): 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: 'ID[foo]'""" 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('ID[foo]') 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, CommonTree)) 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getType(), 10) 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getText(), 'foo') 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleLevelTree(self): 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: '(A B)'""" 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('(A B)') 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, CommonTree)) 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getType(), 5) 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getText(), 'A') 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getChildCount(), 1) 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getChild(0).getType(), 6) 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getChild(0).getText(), 'B') 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNil(self): 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: 'nil'""" 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('nil') 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, CommonTree)) 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getType(), 0) 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.getText(), None) 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testWildcard(self): 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: '(.)'""" 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('(.)') 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, WildcardTreePattern)) 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testLabel(self): 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: '(%a:A)'""" 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('(%a:A)') 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, TreePatternTreeAdaptor()) 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(isinstance(tree, TreePattern)) 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(tree.label, 'a') 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testError1(self): 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: ')'""" 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer(')') 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(tree is None) 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testError2(self): 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: '()'""" 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('()') 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(tree is None) 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testError3(self): 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreePatternParser: '(A ])'""" 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = TreePatternLexer('(A ])') 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = TreePatternParser(lexer, self.wizard, self.adaptor) 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = parser.pattern() 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(tree is None) 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeWizard(unittest.TestCase): 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the TreeWizard class.""" 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Setup text fixure 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver We need a tree adaptor, use CommonTreeAdaptor. 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver And a constant list of token names. 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """ 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor = CommonTreeAdaptor() 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.tokens = [ 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ] 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInit(self): 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreeWizard.__init__()""" 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard( 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor, 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenNames=['a', 'b'] 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(wiz.adaptor is self.adaptor) 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.tokenNameToTypeMap, 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 'a': 0, 'b': 1 } 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testGetTokenType(self): 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """TreeWizard.getTokenType()""" 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard( 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor, 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenNames=self.tokens 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.getTokenType('A'), 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.getTokenType('VAR'), 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 11 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.getTokenType('invalid'), 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver INVALID_TOKEN_TYPE 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNode(self): 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("ID") 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "ID" 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNodeWithArg(self): 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("ID[foo]") 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "foo" 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNodeTree(self): 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A)") 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A" 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleLevelTree(self): 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C D)") 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(A B C D)" 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testListTree(self): 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(nil A B C)") 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A B C" 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInvalidListTree(self): 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("A B C") 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(t is None) 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDoubleLevelTree(self): 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A (B C) (B D) E)") 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = t.toStringTree() 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(A (B C) (B D) E)" 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def __simplifyIndexMap(self, indexMap): 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return dict( # stringify nodes for easy comparing 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (ttype, [str(node) for node in nodes]) 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ttype, nodes in indexMap.items() 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNodeIndex(self): 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("ID") 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexMap = wiz.index(tree) 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.__simplifyIndexMap(indexMap) 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = { 10: ["ID"] } 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNoRepeatsIndex(self): 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B C D)") 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexMap = wiz.index(tree) 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.__simplifyIndexMap(indexMap) 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = { 8:['D'], 6:['B'], 7:['C'], 5:['A'] } 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRepeatsIndex(self): 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexMap = wiz.index(tree) 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.__simplifyIndexMap(indexMap) 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = { 8: ['D', 'D'], 6: ['B', 'B', 'B'], 7: ['C'], 5: ['A', 'A'] } 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNoRepeatsVisit(self): 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B C D)") 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append(str(node)) 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("B"), visitor) 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['B'] 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNoRepeatsVisit2(self): 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append(str(node)) 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("C"), visitor) 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['C'] 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRepeatsVisit(self): 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append(str(node)) 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("B"), visitor) 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['B', 'B', 'B'] 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRepeatsVisit2(self): 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append(str(node)) 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("A"), visitor) 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['A', 'A'] 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRepeatsVisitWithContext(self): 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append('%s@%s[%d]' % (node, parent, childIndex)) 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("B"), visitor) 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['B@A[0]', 'B@A[1]', 'B@A[2]'] 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRepeatsVisitWithNullParentAndContext(self): 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B (A C B) B D D)") 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append( 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s@%s[%d]' 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver % (node, ['nil', parent][parent is not None], childIndex) 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, wiz.getTokenType("A"), visitor) 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['A@nil[0]', 'A@A[1]'] 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testVisitPattern(self): 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B C (A B) D)") 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append( 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(node) 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, '(A B)', visitor) 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['A'] # shouldn't match overall root, just (A B) 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testVisitPatternMultiple(self): 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B C (A B) (D (A B)))") 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append( 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s@%s[%d]' 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver % (node, ['nil', parent][parent is not None], childIndex) 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, '(A B)', visitor) 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['A@A[2]', 'A@D[0]'] 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testVisitPatternMultipleWithLabels(self): 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def visitor(node, parent, childIndex, labels): 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements.append( 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s@%s[%d]%s&%s' 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver % (node, 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ['nil', parent][parent is not None], 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver childIndex, 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels['a'], 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels['b'], 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz.visit(tree, '(%a:A %b:B)', visitor) 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['foo@A[2]foo&bar', 'big@D[0]big&dog'] 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, elements) 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParse(self): 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A B C)") 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseSingleNode(self): 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("A") 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "A") 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseSingleNodeFails(self): 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("A") 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "B") 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not valid) 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseFlatTree(self): 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(nil A B C)") 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(nil A B C)") 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseFlatTreeFails(self): 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(nil A B C)") 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(nil A B)") 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not valid) 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseFlatTreeFails2(self): 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(nil A B C)") 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(nil A B A)") 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not valid) 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testWildcard(self): 555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A . .)") 558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseWithText(self): 562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B[foo] C[bar])") 564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # C pattern has no text arg so despite [bar] in t, no need 565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # to match text--check structure only. 566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A B[foo] C)") 567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseWithText2(self): 571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B[T__32] (C (D E[a])))") 573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # C pattern has no text arg so despite [bar] in t, no need 574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # to match text--check structure only. 575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A B[foo] C)") 576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals("(A T__32 (C (D a)))", t.toStringTree()) 577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseWithTextFails(self): 580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A[foo] B C)") 583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not valid) # fails 584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseLabels(self): 587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(%a:A %b:B %c:C)", labels) 591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("A", str(labels["a"])) 593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("B", str(labels["b"])) 594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("C", str(labels["c"])) 595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseWithWildcardLabels(self): 598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(A %b:. %c:.)", labels) 602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("B", str(labels["b"])) 604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("C", str(labels["c"])) 605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseLabelsAndTestText(self): 608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B[foo] C)") 610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(%a:A %b:B[foo] %c:C)", labels) 612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("A", str(labels["a"])) 614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("foo", str(labels["b"])) 615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("C", str(labels["c"])) 616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParseLabelsInNestedTree(self): 619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A (B C) (D E))") 621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse(t, "(%a:A (%b:B %c:C) (%d:D %e:E) )", labels) 623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(valid) 624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("A", str(labels["a"])) 625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("B", str(labels["b"])) 626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("C", str(labels["c"])) 627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("D", str(labels["d"])) 628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("E", str(labels["e"])) 629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEquals(self): 632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t1 = wiz.create("(A B C)") 634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t2 = wiz.create("(A B C)") 635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver same = wiz.equals(t1, t2) 636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(same) 637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEqualsWithText(self): 640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t1 = wiz.create("(A B[foo] C)") 642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t2 = wiz.create("(A B[foo] C)") 643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver same = wiz.equals(t1, t2) 644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(same) 645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEqualsWithMismatchedText(self): 648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t1 = wiz.create("(A B[foo] C)") 650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t2 = wiz.create("(A B C)") 651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver same = wiz.equals(t1, t2) 652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not same) 653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEqualsWithMismatchedList(self): 656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t1 = wiz.create("(A B C)") 658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t2 = wiz.create("(A B A)") 659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver same = wiz.equals(t1, t2) 660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not same) 661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 663324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testEqualsWithMismatchedListLength(self): 664324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 665324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t1 = wiz.create("(A B C)") 666324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t2 = wiz.create("(A B)") 667324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver same = wiz.equals(t1, t2) 668324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(not same) 669324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 670324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 671324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testFindPattern(self): 672324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 673324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 674324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver subtrees = wiz.find(t, "(A B)") 675324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = [str(node) for node in subtrees] 676324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['foo', 'big'] 677324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 678324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 679324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 680324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testFindTokenType(self): 681324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(self.adaptor, self.tokens) 682324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 683324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver subtrees = wiz.find(t, wiz.getTokenType('A')) 684324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = [str(node) for node in subtrees] 685324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = ['A', 'foo', 'big'] 686324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 687324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 688324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 689324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 690324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == "__main__": 691324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) 692