1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# -*- coding: utf-8 -*-
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport os
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom StringIO import StringIO
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestStringStream(unittest.TestCase):
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    """Test case for the StringStream class."""
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testSize(self):
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.size()"""
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo')
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.size(), 3)
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testIndex(self):
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.index()"""
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo')
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 0)
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testConsume(self):
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.consume()"""
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # f
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 1)
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 1)
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # o
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 2)
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 2)
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 1)
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # o
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 3)
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 3)
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 1)
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # \n
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 4)
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 0)
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # b
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # a
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 6)
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 2)
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # r
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 7)
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 3)
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # EOF
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 7)
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 3)
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume() # EOF
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 7)
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 3)
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testReset(self):
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.reset()"""
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo')
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.reset()
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 0)
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 1)
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 0)
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'f')
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLA(self):
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.LA()"""
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo')
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'f')
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(2), 'o')
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(3), 'o')
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'o')
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(2), antlr3.EOF)
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(3), antlr3.EOF)
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testSubstring(self):
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.substring()"""
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foobar')
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.substring(0, 0), 'f')
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.substring(0, 1), 'fo')
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.substring(0, 5), 'foobar')
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.substring(3, 5), 'bar')
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testSeekForward(self):
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.seek(): forward"""
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 4)
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 0)
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'b')
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##     # not yet implemented
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##     def testSeekBackward(self):
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         """StringStream.seek(): backward"""
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         stream = antlr3.StringStream('foo\nbar')
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         stream.seek(4)
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         stream.seek(1)
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         self.failUnlessEqual(stream.index(), 1)
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         self.failUnlessEqual(stream.line, 1)
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         self.failUnlessEqual(stream.charPositionInLine, 1)
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver##         self.failUnlessEqual(stream.LA(1), 'o')
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testMark(self):
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.mark()"""
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker = stream.mark()
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(marker, 1)
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker = stream.mark()
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(marker, 2)
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 2)
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testReleaseLast(self):
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.release(): last marker"""
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.release()
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        # release same marker again, nothing has changed
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.release()
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testReleaseNested(self):
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.release(): nested"""
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.release(marker2)
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testRewindLast(self):
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.rewind(): last marker"""
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker = stream.mark()
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind()
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 0)
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 4)
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 0)
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'b')
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testRewindNested(self):
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """StringStream.rewind(): nested"""
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream('foo\nbar')
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker2)
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'a')
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestFileStream(unittest.TestCase):
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    """Test case for the FileStream class."""
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testNoEncoding(self):
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        path = os.path.join(os.path.dirname(__file__), 'teststreams.input1')
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.FileStream(path)
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker2)
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'a')
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), ord('a'))
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testEncoded(self):
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        path = os.path.join(os.path.dirname(__file__), 'teststreams.input2')
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.FileStream(path, 'utf-8')
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker2)
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), u'ä')
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), ord(u'ä'))
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestInputStream(unittest.TestCase):
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    """Test case for the InputStream class."""
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testNoEncoding(self):
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        file = StringIO('foo\nbar')
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.InputStream(file)
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker2)
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), 'a')
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), ord('a'))
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testEncoded(self):
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        file = StringIO(u'foo\nbär'.encode('utf-8'))
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.InputStream(file, 'utf-8')
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(4)
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker1 = stream.mark()
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker2 = stream.mark()
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker3 = stream.mark()
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker2)
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.markDepth, 1)
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), 5)
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.line, 2)
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.charPositionInLine, 1)
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LT(1), u'ä')
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), ord(u'ä'))
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestCommonTokenStream(unittest.TestCase):
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    """Test case for the StringStream class."""
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def setUp(self):
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """Setup test fixure
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        The constructor of CommonTokenStream needs a token source. This
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        is a simple mock class providing just the nextToken() method.
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        class MockSource(object):
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            def __init__(self):
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                self.tokens = []
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            def makeEOFToken(self):
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                return antlr3.CommonToken(type=antlr3.EOF)
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            def nextToken(self):
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                try:
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    return self.tokens.pop(0)
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                except IndexError:
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    return None
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source = MockSource()
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testInit(self):
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.__init__()"""
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), -1)
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testSetTokenSource(self):
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.setTokenSource()"""
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(None)
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.setTokenSource(self.source)
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.index(), -1)
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.channel, antlr3.DEFAULT_CHANNEL)
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLTEmptySource(self):
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(): EOF (empty source)"""
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(1)
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(lt1.type, antlr3.EOF)
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLT1(self):
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(1)"""
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(1)
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(lt1.type, 12)
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLT1WithHidden(self):
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(1): with hidden tokens"""
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL)
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(1)
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(lt1.type, 13)
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLT2BeyondEnd(self):
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(2): beyond end"""
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13, channel=antlr3.HIDDEN_CHANNEL)
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(2)
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(lt1.type, antlr3.EOF)
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    # not yet implemented
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLTNegative(self):
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(-1): look back"""
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.fillBuffer()
458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(-1)
461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(lt1.type, 12)
462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLB1(self):
465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LB(1)"""
466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.fillBuffer()
477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LB(1).type, 12)
480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLTZero(self):
483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LT(0)"""
484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lt1 = stream.LT(0)
496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnless(lt1 is None)
497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testLBBeyondBegin(self):
500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.LB(-1): beyond begin"""
501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL)
508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL)
512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnless(stream.LB(1) is None)
520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnless(stream.LB(3) is None)
524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testFillBuffer(self):
527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.fillBuffer()"""
528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=14)
539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=antlr3.EOF)
543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.fillBuffer()
547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(len(stream.tokens), 3)
549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.tokens[0].type, 12)
550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.tokens[1].type, 13)
551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.tokens[2].type, 14)
552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testConsume(self):
555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.consume()"""
556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=antlr3.EOF)
567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), 12)
571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), 13)
574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), antlr3.EOF)
577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), antlr3.EOF)
580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testSeek(self):
583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.seek()"""
584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=antlr3.EOF)
595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), 12)
599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(2)
601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), antlr3.EOF)
602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.seek(0)
604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), 12)
605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testMarkRewind(self):
608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.mark()/rewind()"""
609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12)
612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13)
616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=antlr3.EOF)
620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.fillBuffer()
624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        marker = stream.mark()
627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.consume()
629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream.rewind(marker)
630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.failUnlessEqual(stream.LA(1), 13)
632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testToString(self):
635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """CommonTokenStream.toString()"""
636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=12, text="foo")
639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=13, text="bar")
643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=14, text="gnurz")
647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.source.tokens.append(
650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            antlr3.CommonToken(type=15, text="blarz")
651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.CommonTokenStream(self.source)
654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        assert stream.toString() == "foobargnurzblarz"
656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        assert stream.toString(1, 2) == "bargnurz"
657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        assert stream.toString(stream.tokens[1], stream.tokens[-2]) == "bargnurz"
658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == "__main__":
661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))
662