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 }