xref: /aosp_15_r20/external/antlr/runtime/CSharp2/Sources/Antlr3.Runtime.Tests/ANTLRxxxxStreamFixture.cs (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot /*
2*16467b97STreehugger Robot [The "BSD licence"]
3*16467b97STreehugger Robot Copyright (c) 2005-2007 Kunle Odutola
4*16467b97STreehugger Robot All rights reserved.
5*16467b97STreehugger Robot 
6*16467b97STreehugger Robot Redistribution and use in source and binary forms, with or without
7*16467b97STreehugger Robot modification, are permitted provided that the following conditions
8*16467b97STreehugger Robot are met:
9*16467b97STreehugger Robot 1. Redistributions of source code MUST RETAIN the above copyright
10*16467b97STreehugger Robot    notice, this list of conditions and the following disclaimer.
11*16467b97STreehugger Robot 2. Redistributions in binary form MUST REPRODUCE the above copyright
12*16467b97STreehugger Robot    notice, this list of conditions and the following disclaimer in
13*16467b97STreehugger Robot    the documentation and/or other materials provided with the
14*16467b97STreehugger Robot    distribution.
15*16467b97STreehugger Robot 3. The name of the author may not be used to endorse or promote products
16*16467b97STreehugger Robot    derived from this software without specific prior WRITTEN permission.
17*16467b97STreehugger Robot 4. Unless explicitly state otherwise, any contribution intentionally
18*16467b97STreehugger Robot    submitted for inclusion in this work to the copyright owner or licensor
19*16467b97STreehugger Robot    shall be under the terms and conditions of this license, without any
20*16467b97STreehugger Robot    additional terms or conditions.
21*16467b97STreehugger Robot 
22*16467b97STreehugger Robot THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23*16467b97STreehugger Robot IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24*16467b97STreehugger Robot OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25*16467b97STreehugger Robot IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26*16467b97STreehugger Robot INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27*16467b97STreehugger Robot NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28*16467b97STreehugger Robot DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29*16467b97STreehugger Robot THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30*16467b97STreehugger Robot (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31*16467b97STreehugger Robot THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32*16467b97STreehugger Robot */
33*16467b97STreehugger Robot 
34*16467b97STreehugger Robot 
35*16467b97STreehugger Robot #pragma warning disable 219 // No unused variable warnings
36*16467b97STreehugger Robot 
37*16467b97STreehugger Robot namespace Antlr.Runtime.Tests
38*16467b97STreehugger Robot {
39*16467b97STreehugger Robot 	using System;
40*16467b97STreehugger Robot 	using Stream = System.IO.Stream;
41*16467b97STreehugger Robot 	using FileStream = System.IO.FileStream;
42*16467b97STreehugger Robot 	using MemoryStream = System.IO.MemoryStream;
43*16467b97STreehugger Robot 	using FileMode = System.IO.FileMode;
44*16467b97STreehugger Robot 	using Encoding = System.Text.Encoding;
45*16467b97STreehugger Robot 	using Encoder = System.Text.Encoder;
46*16467b97STreehugger Robot 
47*16467b97STreehugger Robot 	using ANTLRInputStream = Antlr.Runtime.ANTLRInputStream;
48*16467b97STreehugger Robot 
49*16467b97STreehugger Robot 	using MbUnit.Framework;
50*16467b97STreehugger Robot 
51*16467b97STreehugger Robot 	[TestFixture]
52*16467b97STreehugger Robot 	public class ANTLRxxxxStreamFixture : TestFixtureBase
53*16467b97STreehugger Robot 	{
54*16467b97STreehugger Robot 		private static readonly string grammarStr = ""
55*16467b97STreehugger Robot 				+ "parser grammar p;" + NL
56*16467b97STreehugger Robot 				+ "prog : WHILE ID LCURLY (assign)* RCURLY EOF;" + NL
57*16467b97STreehugger Robot 				+ "assign : ID ASSIGN expr SEMI ;" + NL
58*16467b97STreehugger Robot 				+ "expr : INT | FLOAT | ID ;" + NL;
59*16467b97STreehugger Robot 
60*16467b97STreehugger Robot 
61*16467b97STreehugger Robot 		#region ANTLRInputStream Tests
62*16467b97STreehugger Robot 
63*16467b97STreehugger Robot 		[Test]
TestANTLRInputStreamConstructorDoesNotHang()64*16467b97STreehugger Robot 		public void TestANTLRInputStreamConstructorDoesNotHang()
65*16467b97STreehugger Robot 		{
66*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
67*16467b97STreehugger Robot 			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
68*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
69*16467b97STreehugger Robot 
70*16467b97STreehugger Robot 			ANTLRInputStream input = new ANTLRInputStream(grammarStream, encoding);
71*16467b97STreehugger Robot 		}
72*16467b97STreehugger Robot 
73*16467b97STreehugger Robot 		[Test]
TestSizeOnEmptyANTLRInputStream()74*16467b97STreehugger Robot 		public void TestSizeOnEmptyANTLRInputStream()
75*16467b97STreehugger Robot 		{
76*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(new byte[] { });
77*16467b97STreehugger Robot 
78*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
79*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.Count);
80*16467b97STreehugger Robot 		}
81*16467b97STreehugger Robot 
82*16467b97STreehugger Robot 		[Test]
TestSizeOnANTLRInputStream()83*16467b97STreehugger Robot 		public void TestSizeOnANTLRInputStream()
84*16467b97STreehugger Robot 		{
85*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
86*16467b97STreehugger Robot 			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
87*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
88*16467b97STreehugger Robot 
89*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
90*16467b97STreehugger Robot 			Assert.AreEqual(grammarStr.Length, inputStream.Count);
91*16467b97STreehugger Robot 		}
92*16467b97STreehugger Robot 
93*16467b97STreehugger Robot 		[Test]
TestConsumeAndIndexOnANTLRInputStream()94*16467b97STreehugger Robot 		public void TestConsumeAndIndexOnANTLRInputStream()
95*16467b97STreehugger Robot 		{
96*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
97*16467b97STreehugger Robot 			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
98*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
99*16467b97STreehugger Robot 
100*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
101*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.Index);
102*16467b97STreehugger Robot 
103*16467b97STreehugger Robot 			inputStream.Consume();
104*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Index);
105*16467b97STreehugger Robot 
106*16467b97STreehugger Robot 			inputStream.Consume();
107*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Index);
108*16467b97STreehugger Robot 
109*16467b97STreehugger Robot 			while (inputStream.Index < inputStream.Count)
110*16467b97STreehugger Robot 			{
111*16467b97STreehugger Robot 				inputStream.Consume();
112*16467b97STreehugger Robot 			}
113*16467b97STreehugger Robot 			Assert.AreEqual(inputStream.Index, inputStream.Count);
114*16467b97STreehugger Robot 		}
115*16467b97STreehugger Robot 
116*16467b97STreehugger Robot 		[Test]
TestConsumeAllCharactersInAnANTLRInputStream()117*16467b97STreehugger Robot 		public void TestConsumeAllCharactersInAnANTLRInputStream()
118*16467b97STreehugger Robot 		{
119*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
120*16467b97STreehugger Robot 			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
121*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
122*16467b97STreehugger Robot 
123*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
124*16467b97STreehugger Robot 			while (inputStream.Index < inputStream.Count)
125*16467b97STreehugger Robot 			{
126*16467b97STreehugger Robot 				Console.Out.Write((char)inputStream.LA(1));
127*16467b97STreehugger Robot 				inputStream.Consume();
128*16467b97STreehugger Robot 			}
129*16467b97STreehugger Robot 			Assert.AreEqual(inputStream.Index, inputStream.Count);
130*16467b97STreehugger Robot 		}
131*16467b97STreehugger Robot 
132*16467b97STreehugger Robot 		[Test]
TestConsumeOnANTLRInputStream()133*16467b97STreehugger Robot 		public void TestConsumeOnANTLRInputStream()
134*16467b97STreehugger Robot 		{
135*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
136*16467b97STreehugger Robot 			byte[] buffer = encoding.GetBytes("One\r\nTwo");
137*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(buffer);
138*16467b97STreehugger Robot 
139*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
140*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.Index);
141*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.CharPositionInLine);
142*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
143*16467b97STreehugger Robot 
144*16467b97STreehugger Robot 			inputStream.Consume();		// O
145*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Index);
146*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.CharPositionInLine);
147*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
148*16467b97STreehugger Robot 
149*16467b97STreehugger Robot 			inputStream.Consume();		// n
150*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Index);
151*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.CharPositionInLine);
152*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
153*16467b97STreehugger Robot 
154*16467b97STreehugger Robot 			inputStream.Consume();		// e
155*16467b97STreehugger Robot 			Assert.AreEqual(3, inputStream.Index);
156*16467b97STreehugger Robot 			Assert.AreEqual(3, inputStream.CharPositionInLine);
157*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
158*16467b97STreehugger Robot 
159*16467b97STreehugger Robot 			inputStream.Consume();		// \r
160*16467b97STreehugger Robot 			Assert.AreEqual(4, inputStream.Index);
161*16467b97STreehugger Robot 			Assert.AreEqual(4, inputStream.CharPositionInLine);
162*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
163*16467b97STreehugger Robot 
164*16467b97STreehugger Robot 			inputStream.Consume();		// \n
165*16467b97STreehugger Robot 			Assert.AreEqual(5, inputStream.Index);
166*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.CharPositionInLine);
167*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
168*16467b97STreehugger Robot 
169*16467b97STreehugger Robot 			inputStream.Consume();		// T
170*16467b97STreehugger Robot 			Assert.AreEqual(6, inputStream.Index);
171*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.CharPositionInLine);
172*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
173*16467b97STreehugger Robot 
174*16467b97STreehugger Robot 			inputStream.Consume();		// w
175*16467b97STreehugger Robot 			Assert.AreEqual(7, inputStream.Index);
176*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.CharPositionInLine);
177*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
178*16467b97STreehugger Robot 
179*16467b97STreehugger Robot 			inputStream.Consume();		// o
180*16467b97STreehugger Robot 			Assert.AreEqual(8, inputStream.Index);
181*16467b97STreehugger Robot 			Assert.AreEqual(3, inputStream.CharPositionInLine);
182*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
183*16467b97STreehugger Robot 
184*16467b97STreehugger Robot 			inputStream.Consume();		// EOF
185*16467b97STreehugger Robot 			Assert.AreEqual(8, inputStream.Index);
186*16467b97STreehugger Robot 			Assert.AreEqual(3, inputStream.CharPositionInLine);
187*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
188*16467b97STreehugger Robot 
189*16467b97STreehugger Robot 			inputStream.Consume();		// EOF
190*16467b97STreehugger Robot 			Assert.AreEqual(8, inputStream.Index);
191*16467b97STreehugger Robot 			Assert.AreEqual(3, inputStream.CharPositionInLine);
192*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Line);
193*16467b97STreehugger Robot 		}
194*16467b97STreehugger Robot 
195*16467b97STreehugger Robot 		[Test]
TestResetOnANTLRInputStream()196*16467b97STreehugger Robot 		public void TestResetOnANTLRInputStream()
197*16467b97STreehugger Robot 		{
198*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
199*16467b97STreehugger Robot 			byte[] buffer = encoding.GetBytes("One\r\nTwo");
200*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(buffer);
201*16467b97STreehugger Robot 
202*16467b97STreehugger Robot 			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, encoding);
203*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.Index);
204*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.CharPositionInLine);
205*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
206*16467b97STreehugger Robot 
207*16467b97STreehugger Robot 			inputStream.Consume();		// O
208*16467b97STreehugger Robot 			inputStream.Consume();		// n
209*16467b97STreehugger Robot 
210*16467b97STreehugger Robot 			Assert.AreEqual('e', inputStream.LA(1));
211*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Index);
212*16467b97STreehugger Robot 
213*16467b97STreehugger Robot 			inputStream.Reset();
214*16467b97STreehugger Robot 			Assert.AreEqual('O', inputStream.LA(1));
215*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.Index);
216*16467b97STreehugger Robot 			Assert.AreEqual(0, inputStream.CharPositionInLine);
217*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
218*16467b97STreehugger Robot 			inputStream.Consume();		// O
219*16467b97STreehugger Robot 
220*16467b97STreehugger Robot 			Assert.AreEqual('n', inputStream.LA(1));
221*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Index);
222*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.CharPositionInLine);
223*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
224*16467b97STreehugger Robot 			inputStream.Consume();		// n
225*16467b97STreehugger Robot 
226*16467b97STreehugger Robot 			Assert.AreEqual('e', inputStream.LA(1));
227*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.Index);
228*16467b97STreehugger Robot 			Assert.AreEqual(2, inputStream.CharPositionInLine);
229*16467b97STreehugger Robot 			Assert.AreEqual(1, inputStream.Line);
230*16467b97STreehugger Robot 			inputStream.Consume();		// e
231*16467b97STreehugger Robot 		}
232*16467b97STreehugger Robot 
233*16467b97STreehugger Robot 		[Test]
TestSubstringOnANTLRInputStream()234*16467b97STreehugger Robot 		public void TestSubstringOnANTLRInputStream()
235*16467b97STreehugger Robot 		{
236*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
237*16467b97STreehugger Robot 			byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree");
238*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(buffer);
239*16467b97STreehugger Robot 
240*16467b97STreehugger Robot 			ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding);
241*16467b97STreehugger Robot 
242*16467b97STreehugger Robot 			Assert.AreEqual("Two", stream.Substring(5, 7));
243*16467b97STreehugger Robot 			Assert.AreEqual("One", stream.Substring(0, 2));
244*16467b97STreehugger Robot 			Assert.AreEqual("Three", stream.Substring(10, 14));
245*16467b97STreehugger Robot 
246*16467b97STreehugger Robot 			stream.Consume();
247*16467b97STreehugger Robot 
248*16467b97STreehugger Robot 			Assert.AreEqual("Two", stream.Substring(5, 7));
249*16467b97STreehugger Robot 			Assert.AreEqual("One", stream.Substring(0, 2));
250*16467b97STreehugger Robot 			Assert.AreEqual("Three", stream.Substring(10, 14));
251*16467b97STreehugger Robot 		}
252*16467b97STreehugger Robot 
253*16467b97STreehugger Robot 		[Test]
TestSeekOnANTLRInputStream()254*16467b97STreehugger Robot 		public void TestSeekOnANTLRInputStream()
255*16467b97STreehugger Robot 		{
256*16467b97STreehugger Robot 			Encoding encoding = Encoding.Unicode;
257*16467b97STreehugger Robot 			byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree");
258*16467b97STreehugger Robot 			MemoryStream grammarStream = new MemoryStream(buffer);
259*16467b97STreehugger Robot 
260*16467b97STreehugger Robot 			ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding);
261*16467b97STreehugger Robot 			Assert.AreEqual('O', stream.LA(1));
262*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.Index);
263*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.CharPositionInLine);
264*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
265*16467b97STreehugger Robot 
266*16467b97STreehugger Robot 			stream.Seek(6);
267*16467b97STreehugger Robot 			Assert.AreEqual('w', stream.LA(1));
268*16467b97STreehugger Robot 			Assert.AreEqual(6, stream.Index);
269*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
270*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
271*16467b97STreehugger Robot 
272*16467b97STreehugger Robot 			stream.Seek(11);
273*16467b97STreehugger Robot 			Assert.AreEqual('h', stream.LA(1));
274*16467b97STreehugger Robot 			Assert.AreEqual(11, stream.Index);
275*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
276*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.Line);
277*16467b97STreehugger Robot 
278*16467b97STreehugger Robot 			// seeking backwards leaves state info (other than index in stream) unchanged
279*16467b97STreehugger Robot 			stream.Seek(1);
280*16467b97STreehugger Robot 			Assert.AreEqual('n', stream.LA(1));
281*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Index);
282*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
283*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.Line);
284*16467b97STreehugger Robot 		}
285*16467b97STreehugger Robot 
286*16467b97STreehugger Robot 		#endregion
287*16467b97STreehugger Robot 
288*16467b97STreehugger Robot 
289*16467b97STreehugger Robot 		#region ANTLRStringStream Tests
290*16467b97STreehugger Robot 
291*16467b97STreehugger Robot 		[Test]
TestSizeOnEmptyANTLRStringStream()292*16467b97STreehugger Robot 		public void TestSizeOnEmptyANTLRStringStream()
293*16467b97STreehugger Robot 		{
294*16467b97STreehugger Robot 			ANTLRStringStream s1 = new ANTLRStringStream("");
295*16467b97STreehugger Robot 			Assert.AreEqual(0, s1.Count);
296*16467b97STreehugger Robot 			Assert.AreEqual(0, s1.Index);
297*16467b97STreehugger Robot 		}
298*16467b97STreehugger Robot 
299*16467b97STreehugger Robot 		[Test]
TestSizeOnANTLRStringStream()300*16467b97STreehugger Robot 		public void TestSizeOnANTLRStringStream()
301*16467b97STreehugger Robot 		{
302*16467b97STreehugger Robot 			ANTLRStringStream s1 = new ANTLRStringStream("lexer\r\n");
303*16467b97STreehugger Robot 			Assert.AreEqual(7, s1.Count);
304*16467b97STreehugger Robot 
305*16467b97STreehugger Robot 			ANTLRStringStream s2 = new ANTLRStringStream(grammarStr);
306*16467b97STreehugger Robot 			Assert.AreEqual(grammarStr.Length, s2.Count);
307*16467b97STreehugger Robot 
308*16467b97STreehugger Robot 			ANTLRStringStream s3 = new ANTLRStringStream("grammar P;");
309*16467b97STreehugger Robot 			Assert.AreEqual(10, s3.Count);
310*16467b97STreehugger Robot 		}
311*16467b97STreehugger Robot 
312*16467b97STreehugger Robot 		[Test]
TestConsumeOnANTLRStringStream()313*16467b97STreehugger Robot 		public void TestConsumeOnANTLRStringStream()
314*16467b97STreehugger Robot 		{
315*16467b97STreehugger Robot 			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo");
316*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.Index);
317*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.CharPositionInLine);
318*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
319*16467b97STreehugger Robot 
320*16467b97STreehugger Robot 			stream.Consume();		// O
321*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Index);
322*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
323*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
324*16467b97STreehugger Robot 
325*16467b97STreehugger Robot 			stream.Consume();		// n
326*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Index);
327*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.CharPositionInLine);
328*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
329*16467b97STreehugger Robot 
330*16467b97STreehugger Robot 			stream.Consume();		// e
331*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.Index);
332*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.CharPositionInLine);
333*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
334*16467b97STreehugger Robot 
335*16467b97STreehugger Robot 			stream.Consume();		// \r
336*16467b97STreehugger Robot 			Assert.AreEqual(4, stream.Index);
337*16467b97STreehugger Robot 			Assert.AreEqual(4, stream.CharPositionInLine);
338*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
339*16467b97STreehugger Robot 
340*16467b97STreehugger Robot 			stream.Consume();		// \n
341*16467b97STreehugger Robot 			Assert.AreEqual(5, stream.Index);
342*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.CharPositionInLine);
343*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
344*16467b97STreehugger Robot 
345*16467b97STreehugger Robot 			stream.Consume();		// T
346*16467b97STreehugger Robot 			Assert.AreEqual(6, stream.Index);
347*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
348*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
349*16467b97STreehugger Robot 
350*16467b97STreehugger Robot 			stream.Consume();		// w
351*16467b97STreehugger Robot 			Assert.AreEqual(7, stream.Index);
352*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.CharPositionInLine);
353*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
354*16467b97STreehugger Robot 
355*16467b97STreehugger Robot 			stream.Consume();		// o
356*16467b97STreehugger Robot 			Assert.AreEqual(8, stream.Index);
357*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.CharPositionInLine);
358*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
359*16467b97STreehugger Robot 
360*16467b97STreehugger Robot 			stream.Consume();		// EOF
361*16467b97STreehugger Robot 			Assert.AreEqual(8, stream.Index);
362*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.CharPositionInLine);
363*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
364*16467b97STreehugger Robot 
365*16467b97STreehugger Robot 			stream.Consume();		// EOF
366*16467b97STreehugger Robot 			Assert.AreEqual(8, stream.Index);
367*16467b97STreehugger Robot 			Assert.AreEqual(3, stream.CharPositionInLine);
368*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Line);
369*16467b97STreehugger Robot 		}
370*16467b97STreehugger Robot 
371*16467b97STreehugger Robot 		[Test]
TestResetOnANTLRStringStream()372*16467b97STreehugger Robot 		public void TestResetOnANTLRStringStream()
373*16467b97STreehugger Robot 		{
374*16467b97STreehugger Robot 			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo");
375*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.Index);
376*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.CharPositionInLine);
377*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
378*16467b97STreehugger Robot 
379*16467b97STreehugger Robot 			stream.Consume();		// O
380*16467b97STreehugger Robot 			stream.Consume();		// n
381*16467b97STreehugger Robot 
382*16467b97STreehugger Robot 			Assert.AreEqual('e', stream.LA(1));
383*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Index);
384*16467b97STreehugger Robot 
385*16467b97STreehugger Robot 			stream.Reset();
386*16467b97STreehugger Robot 			Assert.AreEqual('O', stream.LA(1));
387*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.Index);
388*16467b97STreehugger Robot 			Assert.AreEqual(0, stream.CharPositionInLine);
389*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
390*16467b97STreehugger Robot 			stream.Consume();		// O
391*16467b97STreehugger Robot 
392*16467b97STreehugger Robot 			Assert.AreEqual('n', stream.LA(1));
393*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Index);
394*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.CharPositionInLine);
395*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
396*16467b97STreehugger Robot 			stream.Consume();		// n
397*16467b97STreehugger Robot 
398*16467b97STreehugger Robot 			Assert.AreEqual('e', stream.LA(1));
399*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.Index);
400*16467b97STreehugger Robot 			Assert.AreEqual(2, stream.CharPositionInLine);
401*16467b97STreehugger Robot 			Assert.AreEqual(1, stream.Line);
402*16467b97STreehugger Robot 			stream.Consume();		// e
403*16467b97STreehugger Robot 		}
404*16467b97STreehugger Robot 
405*16467b97STreehugger Robot 		[Test]
TestSubstringOnANTLRStringStream()406*16467b97STreehugger Robot 		public void TestSubstringOnANTLRStringStream()
407*16467b97STreehugger Robot 		{
408*16467b97STreehugger Robot 			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo\r\nThree");
409*16467b97STreehugger Robot 
410*16467b97STreehugger Robot 			Assert.AreEqual("Two", stream.Substring(5, 7));
411*16467b97STreehugger Robot 			Assert.AreEqual("One", stream.Substring(0, 2));
412*16467b97STreehugger Robot 			Assert.AreEqual("Three", stream.Substring(10, 14));
413*16467b97STreehugger Robot 
414*16467b97STreehugger Robot 			stream.Consume();
415*16467b97STreehugger Robot 
416*16467b97STreehugger Robot 			Assert.AreEqual("Two", stream.Substring(5, 7));
417*16467b97STreehugger Robot 			Assert.AreEqual("One", stream.Substring(0, 2));
418*16467b97STreehugger Robot 			Assert.AreEqual("Three", stream.Substring(10, 14));
419*16467b97STreehugger Robot 		}
420*16467b97STreehugger Robot 
421*16467b97STreehugger Robot 		#endregion
422*16467b97STreehugger Robot 	}
423*16467b97STreehugger Robot }