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 (CommonTreeNodeStream, CommonTree, CommonTreeAdaptor, 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeParser, TreeVisitor, TreeIterator) 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3 import CommonToken, UP, DOWN, EOF 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.treewizard import TreeWizard 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeNodeStream(unittest.TestCase): 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the TreeNodeStream class.""" 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor = CommonTreeAdaptor() 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def newStream(self, t): 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Build new stream; let's us override to test other streams.""" 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return CommonTreeNodeStream(t) 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNode(self): 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = self.newStream(t) 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101" 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101" 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testTwoChildrenOfNilRoot(self): 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver class V(CommonTree): 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def __init__(self, token=None, ttype=None, x=None): 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if x is not None: 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.x = x 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ttype is not None and token is None: 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.token = CommonToken(type=ttype) 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if token is not None: 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.token = token 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def __str__(self): 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if self.token is not None: 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt = self.token.text 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else: 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt = "" 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt += "<V>" 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return txt 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_0 = self.adaptor.nil(); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = V(ttype=101, x=2) 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver u = V(token=CommonToken(type=102, text="102")) 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.addChild(root_0, t) 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.addChild(root_0, u) 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assert_(root_0.parent is None) 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(-1, root_0.childIndex) 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(0, t.childIndex) 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(1, u.childIndex) 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test4Nodes(self): 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) 104) 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(102))) 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.getChild(0).addChild(CommonTree(CommonToken(103))) 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(104))) 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = self.newStream(t) 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 102 103 104" 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 2 102 2 103 3 104 3" 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testList(self): 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root = CommonTree(None) 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(102))) 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.getChild(0).addChild(CommonTree(CommonToken(103))) 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(104))) 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver u = CommonTree(CommonToken(105)) 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(t) 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(u) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(root) 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 102 103 104 105" 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 2 102 2 103 3 104 3 105" 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testFlatList(self): 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root = CommonTree(None) 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(CommonTree(CommonToken(101))) 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(CommonTree(CommonToken(102))) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(CommonTree(CommonToken(103))) 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(root) 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 102 103" 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 102 103" 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testListWithOneNode(self): 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root = CommonTree(None) 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(CommonTree(CommonToken(101))) 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(root) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101" 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101" 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testAoverB(self): 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(102))) 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = self.newStream(t) 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 102" 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toNodesOnlyString(stream) 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 2 102 3" 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testLT(self): 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) 104) 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(102))) 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.getChild(0).addChild(CommonTree(CommonToken(103))) 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(104))) 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = self.newStream(t) 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(101, stream.LT(1).getType()) 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(2).getType()) 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(3).getType()) 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(4).getType()) 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(103, stream.LT(5).getType()) 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(6).getType()) 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(7).getType()) 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(8).getType()) 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(9).getType()) 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # check way ahead 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(100).getType()) 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMarkRewindEntire(self): 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver m = stream.mark() # MARK 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for _ in range(13): # consume til end 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.LT(1) 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(-1).getType()) #TODO: remove? 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewind(m) # REWIND 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # consume til end again :) 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for _ in range(13): # consume til end 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.LT(1) 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(-1).getType()) #TODO: remove? 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMarkRewindInMiddle(self): 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for _ in range(7): # consume til middle 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #System.out.println(tream.LT(1).getType()) 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver m = stream.mark() # MARK 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 107 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 104 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewind(m) # REWIND 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(1).getType()) 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # now we're past rewind position 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(105, stream.LT(1).getType()) 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(-1).getType()) 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMarkRewindNested(self): 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver m = stream.mark() # MARK at start 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 101 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver m2 = stream.mark() # MARK on 102 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 106 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewind(m2) # REWIND to 102 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(1).getType()) 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stop at 103 and rewind to start 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewind(m) # REWIND to 101 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(101, stream.LT(1).getType()) 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(1).getType()) 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSeek(self): 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 101 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.seek(7) # seek to 107 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 107 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(1).getType()) 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSeekFromStart(self): 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.seek(7) # seek to 107 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 107 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume UP 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(1).getType()) 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReset(self): 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 7 real + 6 nav nodes 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver v1 = self.toNodesOnlyString(stream) # scan all 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.reset() 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver v2 = self.toNodesOnlyString(stream) # scan all 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(v1, v2) 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testIterator(self): 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = [ 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 101, DOWN, 102, DOWN, 103, 106, DOWN, 107, UP, UP, 104, 105, UP] 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = [t.type for t in stream] 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEqual(expecting, found) 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def toNodesOnlyString(self, nodes): 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf = [] 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for i in range(nodes.size()): 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = nodes.LT(i+1) 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = nodes.getTreeAdaptor().getType(t) 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if not (type==DOWN or type==UP): 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.append(str(type)) 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return ' '.join(buf) 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestCommonTreeNodeStream(unittest.TestCase): 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the CommonTreeNodeStream class.""" 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testPushPop(self): 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 9 real + 8 nav nodes 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(104)) 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(105))) 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r2) 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3 = CommonTree(CommonToken(106)) 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.addChild(CommonTree(CommonToken(107))) 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r3) 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(108))) 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(109))) 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3" 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(stream) 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, found) 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Assume we want to hit node 107 and then "call 102" then return 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf102 = 2 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf107 = 12 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for _ in range(indexOf107):# consume til 107 node 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # CALL 102 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.push(indexOf102) 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(1).getType()) 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(103, stream.LT(1).getType()) 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # RETURN 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.pop() 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNestedPushPop(self): 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 9 real + 8 nav nodes 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(104)) 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(105))) 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r2) 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3 = CommonTree(CommonToken(106)) 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.addChild(CommonTree(CommonToken(107))) 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r3) 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(108))) 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(109))) 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Assume we want to hit node 107 and then "call 102", which 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # calls 104, then return 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf102 = 2 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf107 = 12 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for _ in range(indexOf107): # consume til 107 node 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # CALL 102 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.push(indexOf102) 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(1).getType()) 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(103, stream.LT(1).getType()) 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # CALL 104 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf104 = 6 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.push(indexOf104) 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(1).getType()) 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(105, stream.LT(1).getType()) 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # RETURN (to UP node in 102 subtree) 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.pop() 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # RETURN (to empty stack) 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.pop() 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(107, stream.LT(1).getType()) 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testPushPopFromEOF(self): 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # stream has 9 real + 8 nav nodes 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(104)) 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(105))) 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r2) 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3 = CommonTree(CommonToken(106)) 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.addChild(CommonTree(CommonToken(107))) 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r3) 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(108))) 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(109))) 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream = CommonTreeNodeStream(r0) 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver while stream.LA(1) != EOF: 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf102 = 2 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver indexOf104 = 6 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # CALL 102 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.push(indexOf102) 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(102, stream.LT(1).getType()) 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(103, stream.LT(1).getType()) 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # RETURN (to empty stack) 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.pop() 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # CALL 104 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.push(indexOf104) 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(104, stream.LT(1).getType()) 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 102 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(DOWN, stream.LT(1).getType()) 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume DN 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(105, stream.LT(1).getType()) 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume() # consume 103 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(UP, stream.LT(1).getType()) 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # RETURN (to empty stack) 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.pop() 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(EOF, stream.LT(1).getType()) 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestCommonTree(unittest.TestCase): 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test case for the CommonTree class.""" 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Setup test fixure""" 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor = CommonTreeAdaptor() 555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSingleNode(self): 558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(t.parent is None) 560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, t.childIndex) 561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test4Nodes(self): 564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103) 104) 565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(102))) 567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.getChild(0).addChild(CommonTree(CommonToken(103))) 568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(r0.parent is None) 571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, r0.childIndex) 572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testList(self): 575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(nil 101 102 103) 576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(None) 577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c0=CommonTree(CommonToken(101)) 578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0) 579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c1=CommonTree(CommonToken(102)) 580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1) 581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c2=CommonTree(CommonToken(103)) 582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2) 583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(r0.parent is None) 585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, r0.childIndex) 586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(r0, c0.parent) 587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(0, c0.childIndex) 588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(r0, c1.parent) 589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(1, c1.childIndex) 590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(r0, c2.parent) 591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(2, c2.childIndex) 592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testList2(self): 595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Add child ^(nil 101 102 103) to root 5 596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # should pull 101 102 103 directly to become 5's child list 597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root = CommonTree(CommonToken(5)) 598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # child tree 600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(None) 601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c0=CommonTree(CommonToken(101)) 602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0) 603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c1=CommonTree(CommonToken(102)) 604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1) 605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c2=CommonTree(CommonToken(103)) 606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2) 607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(r0) 609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(root.parent is None) 611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, root.childIndex) 612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # check children of root all point at root 613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(0, c0.childIndex) 615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(1, c1.childIndex) 617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(2, c2.childIndex) 619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testAddListToExistChildren(self): 622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Add child ^(nil 101 102 103) to root ^(5 6) 623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # should add 101 102 103 to end of 5's child list 624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root = CommonTree(CommonToken(5)) 625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(CommonTree(CommonToken(6))) 626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # child tree 628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(None) 629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c0=CommonTree(CommonToken(101)) 630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0) 631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c1=CommonTree(CommonToken(102)) 632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1) 633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c2=CommonTree(CommonToken(103)) 634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2) 635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(r0) 637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(root.parent is None) 639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, root.childIndex) 640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # check children of root all point at root 641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(1, c0.childIndex) 643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(2, c1.childIndex) 645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(root, c0.parent) 646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(3, c2.childIndex) 647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDupTree(self): 650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(101 ^(102 103 ^(106 107) ) 104 105) 651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0 = CommonTree(CommonToken(101)) 652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 = CommonTree(CommonToken(102)) 653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1) 654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(CommonTree(CommonToken(103))) 655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 = CommonTree(CommonToken(106)) 656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(CommonTree(CommonToken(107))) 657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2) 658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(104))) 659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(CommonTree(CommonToken(105))) 660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dup = self.adaptor.dupTree(r0) 662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 663324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(dup.parent is None) 664324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(-1, dup.childIndex) 665324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dup.sanityCheckParentAndChildIndexes() 666324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 667324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 668324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBecomeRoot(self): 669324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # 5 becomes root of ^(nil 101 102 103) 670324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot = CommonTree(CommonToken(5)) 671324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 672324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot = CommonTree(None) 673324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(101))) 674324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(102))) 675324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(103))) 676324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 677324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.becomeRoot(newRoot, oldRoot) 678324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes() 679324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 680324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 681324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBecomeRoot2(self): 682324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # 5 becomes root of ^(101 102 103) 683324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot = CommonTree(CommonToken(5)) 684324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 685324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot = CommonTree(CommonToken(101)) 686324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(102))) 687324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(103))) 688324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 689324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.becomeRoot(newRoot, oldRoot) 690324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes() 691324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 692324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 693324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBecomeRoot3(self): 694324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(nil 5) becomes root of ^(nil 101 102 103) 695324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot = CommonTree(None) 696324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.addChild(CommonTree(CommonToken(5))) 697324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 698324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot = CommonTree(None) 699324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(101))) 700324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(102))) 701324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(103))) 702324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 703324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.becomeRoot(newRoot, oldRoot) 704324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes() 705324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 706324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 707324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBecomeRoot5(self): 708324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ^(nil 5) becomes root of ^(101 102 103) 709324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot = CommonTree(None) 710324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.addChild(CommonTree(CommonToken(5))) 711324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 712324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot = CommonTree(CommonToken(101)) 713324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(102))) 714324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(CommonTree(CommonToken(103))) 715324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 716324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.becomeRoot(newRoot, oldRoot) 717324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes() 718324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 719324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 720324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testBecomeRoot6(self): 721324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # emulates construction of ^(5 6) 722324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_0 = self.adaptor.nil() 723324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_1 = self.adaptor.nil() 724324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_1 = self.adaptor.becomeRoot(CommonTree(CommonToken(5)), root_1) 725324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 726324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.addChild(root_1, CommonTree(CommonToken(6))) 727324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 728324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.adaptor.addChild(root_0, root_1) 729324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 730324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_0.sanityCheckParentAndChildIndexes() 731324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 732324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 733324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Test replaceChildren 734324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 735324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceWithNoChildren(self): 736324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(101)) 737324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(5)) 738324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver error = False 739324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 740324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild) 741324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 742324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except IndexError: 743324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver error = True 744324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 745324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnless(error) 746324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 747324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 748324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceWithOneChildren(self): 749324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # assume token type 99 and use text 750324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 751324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver c0 = CommonTree(CommonToken(99, text="b")) 752324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(c0) 753324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 754324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="c")) 755324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild) 756324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a c)" 757324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 758324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 759324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 760324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 761324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceInMiddle(self): 762324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 763324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 764324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) # index 1 765324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 766324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 767324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 768324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 1, newChild) 769324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a b x d)" 770324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 771324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 772324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 773324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 774324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceAtLeft(self): 775324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 776324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) # index 0 777324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 778324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 779324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 780324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 781324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild) 782324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a x c d)" 783324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 784324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 785324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 786324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 787324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceAtRight(self): 788324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 789324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 790324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 791324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) # index 2 792324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 793324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 794324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(2, 2, newChild) 795324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a b c x)" 796324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 797324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 798324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 799324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 800324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceOneWithTwoAtLeft(self): 801324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 802324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 803324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 804324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 805324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 806324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren = self.adaptor.nil() 807324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="x"))) 808324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="y"))) 809324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 810324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChildren) 811324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a x y c d)" 812324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 813324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 814324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 815324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 816324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceOneWithTwoAtRight(self): 817324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 818324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 819324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 820324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 821324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 822324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren = self.adaptor.nil() 823324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="x"))) 824324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="y"))) 825324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 826324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(2, 2, newChildren) 827324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a b c x y)" 828324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 829324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 830324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 831324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 832324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceOneWithTwoInMiddle(self): 833324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 834324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 835324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 836324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 837324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 838324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren = self.adaptor.nil() 839324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="x"))) 840324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="y"))) 841324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 842324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 1, newChildren) 843324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a b x y d)" 844324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 845324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 846324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 847324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 848324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceTwoWithOneAtLeft(self): 849324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 850324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 851324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 852324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 853324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 854324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 855324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 856324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 1, newChild) 857324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a x d)" 858324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 859324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 860324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 861324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 862324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceTwoWithOneAtRight(self): 863324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 864324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 865324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 866324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 867324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 868324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 869324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 870324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 2, newChild) 871324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a b x)" 872324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 873324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 874324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 875324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 876324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceAllWithOne(self): 877324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 878324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 879324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 880324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 881324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 882324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChild = CommonTree(CommonToken(99, text="x")) 883324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 884324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 2, newChild) 885324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a x)" 886324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 887324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 888324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 889324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 890324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceAllWithTwo(self): 891324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = CommonTree(CommonToken(99, text="a")) 892324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="b"))) 893324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="c"))) 894324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(CommonTree(CommonToken(99, text="d"))) 895324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 896324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren = self.adaptor.nil() 897324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="x"))) 898324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(CommonTree(CommonToken(99, text="y"))) 899324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 900324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 2, newChildren) 901324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "(a x y)" 902324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, t.toStringTree()) 903324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes() 904324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 905324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 906324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeContext(unittest.TestCase): 907324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test the TreeParser.inContext() method""" 908324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 909324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenNames = [ 910324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VEC", "ASSIGN", "PRINT", 911324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "PLUS", "MULT", "DOT", "ID", "INT", "WS", "'['", "','", "']'" 912324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ] 913324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 914324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testSimpleParent(self): 915324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" 916324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 917324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 918324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 919324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 920324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 921324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 922324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 923324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", 924324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 925324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 926324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 927324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 928324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 929324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") 930324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 931324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 932324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 933324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNoParent(self): 934324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3])))" 935324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 936324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 937324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 938324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 939324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 940324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 941324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 942324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(%x:PRINT (MULT ID (VEC INT INT INT)))", 943324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 944324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 945324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 946324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 947324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = False 948324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") 949324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 950324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 951324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 952324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testParentWithWildcard(self): 953324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" 954324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 955324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 956324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 957324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 958324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 959324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 960324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 961324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", 962324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 963324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 964324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 965324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 966324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 967324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ...") 968324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 969324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 970324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 971324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testWildcardAtStartIgnored(self): 972324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" 973324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 974324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 975324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 976324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 977324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 978324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 979324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 980324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", 981324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 982324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 983324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 984324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 985324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 986324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "...VEC") 987324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 988324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 989324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 990324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testWildcardInBetween(self): 991324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" 992324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 993324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 994324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 995324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 996324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 997324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 998324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 999324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", 1000324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1001324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1002324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1003324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1004324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1005324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT...VEC") 1006324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1007324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1008324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1009324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testLotsOfWildcards(self): 1010324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" 1011324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1012324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1013324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1014324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1015324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1016324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1017324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1018324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", 1019324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1020324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1021324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1022324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1023324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1024324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "... PRINT ... VEC ...") 1025324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1026324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1027324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1028324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDeep(self): 1029324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1030324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1031324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1032324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1033324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1034324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1035324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1036324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1037324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1038324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1039324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1040324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1041324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1042324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1043324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ...") 1044324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1045324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1046324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1047324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDeepAndFindRoot(self): 1048324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1049324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1050324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1051324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1052324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1053324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1054324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1055324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1056324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1057324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1058324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1059324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1060324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1061324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1062324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ...") 1063324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1064324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1065324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1066324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDeepAndFindRoot2(self): 1067324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1068324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1069324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1070324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1071324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1072324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1073324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1074324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1075324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1076324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1077324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1078324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1079324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1080324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1081324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ... VEC ...") 1082324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1083324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1084324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1085324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testChain(self): 1086324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1087324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1088324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1089324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1090324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1091324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1092324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1093324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1094324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1095324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1096324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1097324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1098324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1099324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = True 1100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT MULT VEC MULT") 1101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ## TEST INVALID CONTEXTS 1105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNotParent(self): 1107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = False 1121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") 1122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMismatch(self): 1126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = False 1140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ## missing MULT 1141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT VEC MULT") 1142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMismatch2(self): 1146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = False 1160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT VEC ...") 1161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testMismatch3(self): 1165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = False 1179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ... VEC MULT") 1180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDoubleEtc(self): 1184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 1198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ... ... VEC") 1199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 1200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 1201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "invalid syntax: ... ..." 1202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(exc) 1203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDotDot(self): 1207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = {} 1213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver valid = wiz.parse( 1214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t, 1215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", 1216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels) 1217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertTrue(valid) 1218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node = labels.get("x") 1219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 1221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT .. VEC") 1222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 1223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 1224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "invalid syntax: .." 1225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = str(exc) 1226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeVisitor(unittest.TestCase): 1230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Test of the TreeVisitor class.""" 1231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenNames = [ 1233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VEC", "ASSIGN", "PRINT", 1234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "PLUS", "MULT", "DOT", "ID", "INT", "WS", "'['", "','", "']'" 1235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ] 1236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testTreeVisitor(self): 1238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" 1239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokenNames) 1241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create(tree) 1242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = [] 1244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def pre(t): 1245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found.append("pre(%s)" % t) 1246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return t 1247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def post(t): 1248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found.append("post(%s)" % t) 1249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return t 1250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver visitor = TreeVisitor(adaptor) 1252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver visitor.visit(t, pre, post) 1253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = [ "pre(PRINT)", "pre(MULT)", "pre(x)", "post(x)", 1255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "pre(VEC)", "pre(MULT)", "pre(9)", "post(9)", "pre(1)", 1256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "post(1)", "post(MULT)", "pre(2)", "post(2)", "pre(3)", 1257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "post(3)", "post(VEC)", "post(MULT)", "post(PRINT)" ] 1258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeIterator(unittest.TestCase): 1263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = [ 1264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "<invalid>", "<EOR>", "<DOWN>", "<UP>", 1265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "A", "B", "C", "D", "E", "F", "G" ] 1266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testNode(self): 1268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("A") 1271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A EOF" 1273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testFlatAB(self): 1278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(nil A B)") 1281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "nil DOWN A B UP EOF" 1283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testAB(self): 1288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B)") 1291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B UP EOF" 1293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testABC(self): 1298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A B C)") 1301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B C UP EOF" 1303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testVerticalList(self): 1308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A (B C))") 1311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B DOWN C UP UP EOF" 1313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testComplex(self): 1318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A (B (C D E) F) G)") 1321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF" 1323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReset(self): 1328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = CommonTreeAdaptor() 1329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver wiz = TreeWizard(adaptor, self.tokens) 1330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = wiz.create("(A (B (C D E) F) G)") 1331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it = TreeIterator(t) 1332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF" 1333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it.reset() 1337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF" 1338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.toString(it) 1339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.assertEquals(expecting, found) 1340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def toString(self, it): 1343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf = [] 1344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for n in it: 1345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.append(str(n)) 1346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return ' '.join(buf) 1348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == "__main__": 1351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) 1352