1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver"""Testsuite for TokenRewriteStream class.""" 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# don't care about docstrings 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# pylint: disable-msg=C0111 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport testbase 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass T1(testbase.ANTLRTest): 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.compileGrammar() 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def _parse(self, input): 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream(input) 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.TokenRewriteStream(lexer) 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream.fillBuffer() 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return tStream 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertBeforeIndex0(self): 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "0") 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "0abc" 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertAfterLastIndex(self): 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertAfter(2, "x") 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abcx" 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test2InsertBeforeAfterMiddleIndex(self): 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertAfter(1, "x") 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "axbxc" 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceIndex0(self): 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, "x") 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "xbc" 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceLastIndex(self): 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, "x") 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abx" 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceMiddleIndex(self): 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "x") 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "axc" 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test2ReplaceMiddleIndex(self): 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "x") 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "y") 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "ayc" 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test2ReplaceMiddleIndex1InsertBefore(self): 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "_") 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "x") 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "y") 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "_ayc" 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceThenDeleteMiddleIndex(self): 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, "x") 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.delete(1) 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "ac" 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertInPriorReplace(self): 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 2, "x") 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "0") 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.toString() 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(exc), 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "insert op <InsertBeforeOp@1:\"0\"> within boundaries of " 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "previous <ReplaceOp@0..2:\"x\">" 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertThenReplaceSameIndex(self): 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "0") 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, "x") # supercedes insert at 0 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "0xbc" 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test2InsertMiddleIndex(self): 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "y") 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "ayxbc" 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test2InsertThenReplaceIndex0(self): 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "x") 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "y") 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, "z") 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "yxzbc" 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceThenInsertBeforeLastIndex(self): 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, "x") 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(2, "y") 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abyx" 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertThenReplaceLastIndex(self): 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(2, "y") 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, "x") 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abyx" 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceThenInsertAfterLastIndex(self): 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, "x") 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertAfter(2, "y") 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abxy" 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceRangeThenInsertAtLeftEdge(self): 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "x") 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(2, "y") 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abyxba" 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceRangeThenInsertAtRightEdge(self): 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "x") 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(4, "y") # no effect; within range of a replace 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.toString() 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(exc), 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "insert op <InsertBeforeOp@4:\"y\"> within boundaries of " 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "previous <ReplaceOp@2..4:\"x\">") 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceRangeThenInsertAfterRightEdge(self): 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "x") 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertAfter(4, "y") 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abxyba" 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceAll(self): 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 6, "x") 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x" 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceSubsetThenFetch(self): 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "xyz") 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(0, 6) 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abxyzba" 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceThenReplaceSuperset(self): 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "xyz") 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(3, 5, "foo") # overlaps, error 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.toString() 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(exc), 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "replace op boundaries of <ReplaceOp@3..5:\"foo\"> overlap " 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "with previous <ReplaceOp@2..4:\"xyz\">") 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceThenReplaceLowerIndexedSuperset(self): 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcccba") 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 4, "xyz") 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 3, "foo") # overlap, error 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.toString() 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(exc), 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "replace op boundaries of <ReplaceOp@1..3:\"foo\"> overlap " 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "with previous <ReplaceOp@2..4:\"xyz\">") 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testReplaceSingleMiddleThenOverlappingSuperset(self): 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcba") 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 2, "xyz") 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 3, "foo") 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "fooa" 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(result, expecting) 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testCombineInserts(self): 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "x") 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "y") 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "yxabc" 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testCombine3Inserts(self): 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "y") 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "z") 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "yazxbc" 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testCombineInsertOnLeftWithReplace(self): 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 2, "foo") 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "z") # combine with left edge of rewrite 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "zfoo" 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testCombineInsertOnLeftWithDelete(self): 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.delete(0, 2) 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "z") # combine with left edge of rewrite 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "z" # make sure combo is not znull 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDisjointInserts(self): 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(2, "y") 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(0, "z") 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "zaxbyc" 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testOverlappingReplace(self): 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 3, "bar") # wipes prior nested replace 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "bar" 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testOverlappingReplace2(self): 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 3, "bar") 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") # cannot split earlier replace 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.toString() 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ValueError, exc: 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str(exc), 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "replace op boundaries of <ReplaceOp@1..2:\"foo\"> overlap " 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "with previous <ReplaceOp@0..3:\"bar\">") 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testOverlappingReplace3(self): 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(0, 2, "bar") # wipes prior nested replace 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "barc" 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testOverlappingReplace4(self): 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 3, "bar") # wipes prior nested replace 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "abar" 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDropIdenticalReplace(self): 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") # drop previous, identical 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "afooc" 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testDropPrevCoveredInsert(self): 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "foo") 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(1, 2, "foo") # kill prev insert 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "afoofoo" 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testLeaveAloneDisjointInsert(self): 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 3, "foo") 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "axbfoo" 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testLeaveAloneDisjointInsert2(self): 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abcc") 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(2, 3, "foo") 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(1, "x") 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "axbfoo" 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testInsertBeforeTokenThenDeleteThatToken(self): 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("abc") 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertBefore(2, "y") 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.delete(2) 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "aby" 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass T2(testbase.ANTLRTest): 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.compileGrammar('t048rewrite2.g') 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def _parse(self, input): 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream(input) 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.TokenRewriteStream(lexer) 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream.fillBuffer() 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return tStream 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testToStringStartStop(self): 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Tokens: 0123456789 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Input: x = 3 * 0 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("x = 3 * 0;") 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(4, 8, "0") # replace 3 * 0 with 0 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toOriginalString() 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 3 * 0;" 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0;" 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(0, 9) 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0;" 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(4, 8) 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "0" 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testToStringStartStop2(self): 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Tokens: 012345678901234567 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Input: x = 3 * 0 + 2 * 0 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = self._parse("x = 3 * 0 + 2 * 0;") 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toOriginalString() 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 3 * 0 + 2 * 0;" 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.replace(4, 8, "0") # replace 3 * 0 with 0 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString() 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0 + 2 * 0;" 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(0, 17) 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0 + 2 * 0;" 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(4, 8) 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "0" 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(0, 8) 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0" 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(12, 16) 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "2 * 0" 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens.insertAfter(17, "// comment") 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(12, 18) 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "2 * 0;// comment" 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = tokens.toString(0, 8) # try again after insert at end 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = "x = 0" 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(expecting, result) 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == '__main__': 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver unittest.main() 491