1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"]
3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2005-2007 Kunle Odutola
4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved.
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met:
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. Redistributions of source code MUST RETAIN the above copyright
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer.
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. Redistributions in binary form MUST REPRODUCE the above copyright
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer in
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   the documentation and/or other materials provided with the
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   distribution.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. The name of the author may not be used to endorse or promote products
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   derived from this software without specific prior WRITTEN permission.
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver4. Unless explicitly state otherwise, any contribution intentionally
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   submitted for inclusion in this work to the copyright owner or licensor
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   shall be under the terms and conditions of this license, without any
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   additional terms or conditions.
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#pragma warning disable 219 // No unused variable warnings
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Tests
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using System;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using Stream = System.IO.Stream;
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using FileStream = System.IO.FileStream;
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using MemoryStream = System.IO.MemoryStream;
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using FileMode = System.IO.FileMode;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using Encoding = System.Text.Encoding;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using Encoder = System.Text.Encoder;
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using ANTLRInputStream = Antlr.Runtime.ANTLRInputStream;
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using MbUnit.Framework;
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	[TestFixture]
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	public class ANTLRxxxxStreamFixture : TestFixtureBase
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	{
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		private static readonly string grammarStr = ""
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				+ "parser grammar p;" + NL
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				+ "prog : WHILE ID LCURLY (assign)* RCURLY EOF;" + NL
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				+ "assign : ID ASSIGN expr SEMI ;" + NL
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				+ "expr : INT | FLOAT | ID ;" + NL;
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region ANTLRInputStream Tests
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestANTLRInputStreamConstructorDoesNotHang()
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream input = new ANTLRInputStream(grammarStream, encoding);
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSizeOnEmptyANTLRInputStream()
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(new byte[] { });
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.Count);
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSizeOnANTLRInputStream()
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(grammarStr.Length, inputStream.Count);
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestConsumeAndIndexOnANTLRInputStream()
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.Index);
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Index);
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Index);
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			while (inputStream.Index < inputStream.Count)
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				inputStream.Consume();
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(inputStream.Index, inputStream.Count);
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestConsumeAllCharactersInAnANTLRInputStream()
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] grammarStrBuffer = encoding.GetBytes(grammarStr);
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(grammarStrBuffer);
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			while (inputStream.Index < inputStream.Count)
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				Console.Out.Write((char)inputStream.LA(1));
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				inputStream.Consume();
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(inputStream.Index, inputStream.Count);
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestConsumeOnANTLRInputStream()
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] buffer = encoding.GetBytes("One\r\nTwo");
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(buffer);
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode);
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.Index);
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.CharPositionInLine);
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// O
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Index);
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.CharPositionInLine);
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// n
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Index);
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.CharPositionInLine);
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// e
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, inputStream.Index);
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, inputStream.CharPositionInLine);
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// \r
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(4, inputStream.Index);
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(4, inputStream.CharPositionInLine);
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// \n
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(5, inputStream.Index);
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.CharPositionInLine);
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// T
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(6, inputStream.Index);
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.CharPositionInLine);
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// w
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(7, inputStream.Index);
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.CharPositionInLine);
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// o
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, inputStream.Index);
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, inputStream.CharPositionInLine);
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// EOF
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, inputStream.Index);
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, inputStream.CharPositionInLine);
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// EOF
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, inputStream.Index);
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, inputStream.CharPositionInLine);
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Line);
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestResetOnANTLRInputStream()
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] buffer = encoding.GetBytes("One\r\nTwo");
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(buffer);
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, encoding);
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.Index);
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.CharPositionInLine);
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// O
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// n
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('e', inputStream.LA(1));
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Index);
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Reset();
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('O', inputStream.LA(1));
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.Index);
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, inputStream.CharPositionInLine);
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// O
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('n', inputStream.LA(1));
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Index);
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.CharPositionInLine);
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// n
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('e', inputStream.LA(1));
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.Index);
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, inputStream.CharPositionInLine);
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, inputStream.Line);
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			inputStream.Consume();		// e
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSubstringOnANTLRInputStream()
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree");
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(buffer);
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding);
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Two", stream.Substring(5, 7));
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("One", stream.Substring(0, 2));
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Three", stream.Substring(10, 14));
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Two", stream.Substring(5, 7));
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("One", stream.Substring(0, 2));
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Three", stream.Substring(10, 14));
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSeekOnANTLRInputStream()
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Encoding encoding = Encoding.Unicode;
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree");
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			MemoryStream grammarStream = new MemoryStream(buffer);
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding);
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('O', stream.LA(1));
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.Index);
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.CharPositionInLine);
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Seek(6);
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('w', stream.LA(1));
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(6, stream.Index);
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Seek(11);
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('h', stream.LA(1));
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(11, stream.Index);
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.Line);
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// seeking backwards leaves state info (other than index in stream) unchanged
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Seek(1);
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('n', stream.LA(1));
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Index);
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.Line);
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region ANTLRStringStream Tests
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSizeOnEmptyANTLRStringStream()
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream s1 = new ANTLRStringStream("");
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, s1.Count);
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, s1.Index);
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSizeOnANTLRStringStream()
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream s1 = new ANTLRStringStream("lexer\r\n");
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(7, s1.Count);
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream s2 = new ANTLRStringStream(grammarStr);
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(grammarStr.Length, s2.Count);
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream s3 = new ANTLRStringStream("grammar P;");
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(10, s3.Count);
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestConsumeOnANTLRStringStream()
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo");
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.Index);
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.CharPositionInLine);
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// O
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Index);
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// n
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Index);
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.CharPositionInLine);
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// e
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.Index);
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.CharPositionInLine);
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// \r
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(4, stream.Index);
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(4, stream.CharPositionInLine);
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// \n
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(5, stream.Index);
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.CharPositionInLine);
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// T
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(6, stream.Index);
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// w
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(7, stream.Index);
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.CharPositionInLine);
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// o
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, stream.Index);
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.CharPositionInLine);
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// EOF
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, stream.Index);
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.CharPositionInLine);
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// EOF
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(8, stream.Index);
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, stream.CharPositionInLine);
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Line);
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestResetOnANTLRStringStream()
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo");
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.Index);
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.CharPositionInLine);
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// O
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// n
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('e', stream.LA(1));
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Index);
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Reset();
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('O', stream.LA(1));
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.Index);
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, stream.CharPositionInLine);
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// O
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('n', stream.LA(1));
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Index);
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.CharPositionInLine);
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// n
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual('e', stream.LA(1));
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.Index);
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, stream.CharPositionInLine);
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, stream.Line);
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();		// e
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void TestSubstringOnANTLRStringStream()
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo\r\nThree");
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Two", stream.Substring(5, 7));
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("One", stream.Substring(0, 2));
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Three", stream.Substring(10, 14));
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			stream.Consume();
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Two", stream.Substring(5, 7));
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("One", stream.Substring(0, 2));
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual("Three", stream.Substring(10, 14));
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	}
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}