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}