def testNestedPushPop(self): # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) # stream has 9 real + 8 nav nodes # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP r0 = CommonTree(CommonToken(101)) r1 = CommonTree(CommonToken(102)) r1.addChild(CommonTree(CommonToken(103))) r0.addChild(r1) r2 = CommonTree(CommonToken(104)) r2.addChild(CommonTree(CommonToken(105))) r0.addChild(r2) r3 = CommonTree(CommonToken(106)) r3.addChild(CommonTree(CommonToken(107))) r0.addChild(r3) r0.addChild(CommonTree(CommonToken(108))) r0.addChild(CommonTree(CommonToken(109))) stream = CommonTreeNodeStream(r0) # Assume we want to hit node 107 and then "call 102", which # calls 104, then return indexOf102 = 2 indexOf107 = 12 for _ in range(indexOf107): # consume til 107 node stream.consume() self.failUnlessEqual(107, stream.LT(1).getType()) # CALL 102 stream.push(indexOf102) self.failUnlessEqual(102, stream.LT(1).getType()) stream.consume() # consume 102 self.failUnlessEqual(DOWN, stream.LT(1).getType()) stream.consume() # consume DN self.failUnlessEqual(103, stream.LT(1).getType()) stream.consume() # consume 103 # CALL 104 indexOf104 = 6 stream.push(indexOf104) self.failUnlessEqual(104, stream.LT(1).getType()) stream.consume() # consume 102 self.failUnlessEqual(DOWN, stream.LT(1).getType()) stream.consume() # consume DN self.failUnlessEqual(105, stream.LT(1).getType()) stream.consume() # consume 103 self.failUnlessEqual(UP, stream.LT(1).getType()) # RETURN (to UP node in 102 subtree) stream.pop() self.failUnlessEqual(UP, stream.LT(1).getType()) # RETURN (to empty stack) stream.pop() self.failUnlessEqual(107, stream.LT(1).getType())
def testPushPopFromEOF(self): # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) # stream has 9 real + 8 nav nodes # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP r0 = CommonTree(CommonToken(101)) r1 = CommonTree(CommonToken(102)) r1.addChild(CommonTree(CommonToken(103))) r0.addChild(r1) r2 = CommonTree(CommonToken(104)) r2.addChild(CommonTree(CommonToken(105))) r0.addChild(r2) r3 = CommonTree(CommonToken(106)) r3.addChild(CommonTree(CommonToken(107))) r0.addChild(r3) r0.addChild(CommonTree(CommonToken(108))) r0.addChild(CommonTree(CommonToken(109))) stream = CommonTreeNodeStream(r0) while stream.LA(1) != EOF: stream.consume() indexOf102 = 2 indexOf104 = 6 self.failUnlessEqual(EOF, stream.LT(1).getType()) # CALL 102 stream.push(indexOf102) self.failUnlessEqual(102, stream.LT(1).getType()) stream.consume() # consume 102 self.failUnlessEqual(DOWN, stream.LT(1).getType()) stream.consume() # consume DN self.failUnlessEqual(103, stream.LT(1).getType()) stream.consume() # consume 103 self.failUnlessEqual(UP, stream.LT(1).getType()) # RETURN (to empty stack) stream.pop() self.failUnlessEqual(EOF, stream.LT(1).getType()) # CALL 104 stream.push(indexOf104) self.failUnlessEqual(104, stream.LT(1).getType()) stream.consume() # consume 102 self.failUnlessEqual(DOWN, stream.LT(1).getType()) stream.consume() # consume DN self.failUnlessEqual(105, stream.LT(1).getType()) stream.consume() # consume 103 self.failUnlessEqual(UP, stream.LT(1).getType()) # RETURN (to empty stack) stream.pop() self.failUnlessEqual(EOF, stream.LT(1).getType())
def testPushPop(self): # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) # stream has 9 real + 8 nav nodes # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP r0 = CommonTree(CommonToken(101)) r1 = CommonTree(CommonToken(102)) r1.addChild(CommonTree(CommonToken(103))) r0.addChild(r1) r2 = CommonTree(CommonToken(104)) r2.addChild(CommonTree(CommonToken(105))) r0.addChild(r2) r3 = CommonTree(CommonToken(106)) r3.addChild(CommonTree(CommonToken(107))) r0.addChild(r3) r0.addChild(CommonTree(CommonToken(108))) r0.addChild(CommonTree(CommonToken(109))) stream = CommonTreeNodeStream(r0) expecting = "101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3" found = str(stream) self.failUnlessEqual(expecting, found) # Assume we want to hit node 107 and then "call 102" then return indexOf102 = 2 indexOf107 = 12 for _ in range(indexOf107): # consume til 107 node stream.consume() # CALL 102 self.failUnlessEqual(107, stream.LT(1).getType()) stream.push(indexOf102) self.failUnlessEqual(102, stream.LT(1).getType()) stream.consume() # consume 102 self.failUnlessEqual(DOWN, stream.LT(1).getType()) stream.consume() # consume DN self.failUnlessEqual(103, stream.LT(1).getType()) stream.consume() # consume 103 self.failUnlessEqual(UP, stream.LT(1).getType()) # RETURN stream.pop() self.failUnlessEqual(107, stream.LT(1).getType())