1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3'
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'test/unit'
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'spec'
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverinclude ANTLR3
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestStringStream < Test::Unit::TestCase
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def setup
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = StringStream.new( "oh\nhey!\n" )
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_size
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.size.should == 8
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_index
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 0
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_consume
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # o
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 1
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 1
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 1
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume  # h
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 2
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 2
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 1
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # \n
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 3
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume #  h
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 4
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 1
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # e
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 5
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 2
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # y
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 6
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 3
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # !
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 7
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 4
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # \n
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 8
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 3
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # EOF
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 8
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 3
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume # EOF
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 8
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 3
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_reset
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    2.times { @stream.consume }
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.reset
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 0
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 1
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?o.ord
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(1).should == 'o'
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(2).should == 'h'
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(3).should == "\n"
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?o.ord
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(2).should == ?h.ord
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(3).should == ?\n.ord
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    6.times { @stream.consume }
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(1).should == '!'
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(2).should == "\n"
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(3).should be_nil
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?!.ord
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(2).should == ?\n.ord
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(3).should == EOF
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_substring
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.substring(0,0).should == 'o'
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.substring(0,1).should == 'oh'
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.substring(0,8).should == "oh\nhey!\n"
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.substring(3,6).should == "hey!"
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_seek_forward
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(3)
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 3
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 0
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?h.ord
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_mark
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker = @stream.mark
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker.should == 1
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    2.times { @stream.consume }
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker = @stream.mark
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker.should == 2
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_release_last
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker1 = @stream.mark
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    2.times { @stream.consume }
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker2 = @stream.mark
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.release
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 2
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.release
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 1
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_release_nested
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker1 = @stream.mark()
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume()
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker2 = @stream.mark()
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume()
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker3 = @stream.mark()
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.release(marker2)
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 2
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_rewind_last
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker = @stream.mark
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.rewind
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 1
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index.should == 4
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 1
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?e.ord
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_through
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( 2 ).should == 'oh'
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( -2 ).should == ''
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek( 5 )
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( 0 ).should == ''
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( 1 ).should == 'y'
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( -2 ).should == 'he'
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.through( 5 ).should == "y!\n"
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_rewind_nested
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker1 = @stream.mark()
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker2 = @stream.mark
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker3 = @stream.mark
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.rewind(marker2)
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 2
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index().should == 5
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 2
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?y.ord    
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestFileStream < Test::Unit::TestCase
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_no_encoding
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    path = File.join(File.dirname(__FILE__), 'sample-input/file-stream-1')
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = FileStream.new(path)
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(4)
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker1 = @stream.mark()
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume()
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker2 = @stream.mark()
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume()
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker3 = @stream.mark()
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.rewind(marker2)
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.index().should == 5
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.line.should == 2
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.column.should == 1
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.mark_depth.should == 2
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(1).should == 'a'
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == ?a.ord
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_encoded
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestInputStream < Test::Unit::TestCase
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_no_encoding
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_encoded
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestCommonTokenStream < Test::Unit::TestCase
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  class MockSource
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    include ANTLR3::TokenSource
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    attr_accessor :tokens
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def initialize
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      @tokens = []
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def next_token
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      @tokens.shift
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  # vvvvvvvv tests vvvvvvvvv
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_init
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new( @source )
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.position.should == 0
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_rebuild
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source1 = MockSource.new
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source2 = MockSource.new
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source2.tokens << new_token( 10, :channel => ANTLR3::HIDDEN ) << new_token( 11 )
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new( @source1 )
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.position.should == 0
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.tokens.length.should == 0
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.rebuild( @source2 )
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.token_source.should == @source2
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.position.should == 1
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.tokens.should have( 2 ).things
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look_empty_source
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look.should == ANTLR3::EOF_TOKEN
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look1
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12)
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(1).type.should == 12
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look1_with_hidden
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    # FIX
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12, :channel => ANTLR3::HIDDEN_CHANNEL) <<
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(13)
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(1).type.should == 13
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look2_beyond_end
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) <<
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(13, :channel => ANTLR3::HIDDEN_CHANNEL)
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(2).type.should == EOF
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look_negative
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13)
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(-1).type.should == 12
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_lb1
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13)
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(-1).type.should == 12
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_look_zero
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    # FIX
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13)
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(0).should == nil
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_lb_beyond_begin
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(10) <<
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(11, :channel => HIDDEN_CHANNEL) <<
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(12, :channel => HIDDEN_CHANNEL) <<
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(13)
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(-1).should == nil
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    2.times { @stream.consume }
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.look(-3).should == nil
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_fill_buffer
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13) <<  new_token(14) << new_token(EOF)
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.instance_variable_get(:@tokens).length.should == 3
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.tokens[0].type.should == 12
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.tokens[1].type.should == 13
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.tokens[2].type.should == 14
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_consume
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13) << new_token(EOF)
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek.should == 12
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek.should == 13
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek.should == EOF
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek.should == EOF
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_seek
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13) << new_token(EOF)
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == 12
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(2).peek.should == EOF
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(0).peek.should == 12
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(-3).position.should == 0
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.seek(10).position.should == 2
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_mark_rewind
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12) << new_token(13) << new_token(EOF)
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    marker = @stream.mark
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.consume
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.rewind(marker)
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.peek(1).should == 13
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def test_to_string
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source = MockSource.new
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @source.tokens << new_token(12, 'foo') <<
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(13, 'bar') << new_token(14, 'gnurz') <<
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      new_token(15, 'blarz')
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream = CommonTokenStream.new(@source)
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.to_s.should == "foobargnurzblarz"
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.to_s(1,2).should == 'bargnurz'
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    @stream.to_s(@stream[1], @stream[-2]).should == 'bargnurz'
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def new_token(type, opts = {})
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    fields = {}
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    case type
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    when Hash then fields.update(type)
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    else
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      fields[:type] = type
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    case opts
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    when Hash then fields.update(opts)
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    when String then fields[:text] = opts
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    CommonToken.create(fields)
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver__END__
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverteststreams.py                                | LN  | STATUS
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver----------------------------------------------+-----+--------------
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestStringStream(unittest.TestCase)     | 009 | [x]
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testSize(self)                          | 012 | [x]
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testIndex(self)                         | 020 | [x]
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testConsume(self)                       | 028 | [x]
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testReset(self)                         | 079 | [x]
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLA(self)                            | 094 | [x]
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testSubstring(self)                     | 111 | [x]
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testSeekForward(self)                   | 122 | [x]
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testMark(self)                          | 150 | [x]
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testReleaseLast(self)                   | 167 | [x]
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testReleaseNested(self)                 | 186 | [x]
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testRewindLast(self)                    | 204 | [x]
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testRewindNested(self)                  | 223 | [x]
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestFileStream(unittest.TestCase)       | 245 | [o]
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testNoEncoding(self)                    | 249 | [x]
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testEncoded(self)                       | 272 | [ ]
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestInputStream(unittest.TestCase)      | 296 | [ ]
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testNoEncoding(self)                    | 299 | [ ]
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testEncoded(self)                       | 322 | [ ]
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestCommonTokenStream(unittest.TestCase)| 345 | [ ]
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def setUp(self)                             | 348 | [x]
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testInit(self)                          | 369 | [x]
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testSetTokenSource(self)                | 376 | [x]
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLTEmptySource(self)                 | 385 | [x]
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLT1(self)                           | 394 | [x]
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLT1WithHidden(self)                 | 407 | [x]
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLT2BeyondEnd(self)                  | 424 | [x]
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLTNegative(self)                    | 442 | [x]
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLB1(self)                           | 461 | [x]
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLTZero(self)                        | 479 | [x]
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testLBBeyondBegin(self)                 | 496 | [x]
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testFillBuffer(self)                    | 523 | [x]
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testConsume(self)                       | 551 | [x]
457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testSeek(self)                          | 579 | [x]
458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testMarkRewind(self)                    | 604 | [x]
459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  def testToString(self)                      | 631 | [x]
460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
461