00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 namespace Antlr.Runtime.Tests
00036 {
00037 using System;
00038 using StringBuilder = System.Text.StringBuilder;
00039
00040 using IToken = Antlr.Runtime.IToken;
00041 using Token = Antlr.Runtime.Token;
00042 using CommonToken = Antlr.Runtime.CommonToken;
00043 using ITree = Antlr.Runtime.Tree.ITree;
00044 using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream;
00045 using CommonTree = Antlr.Runtime.Tree.CommonTree;
00046 using CommonTreeNodeStream = Antlr.Runtime.Tree.CommonTreeNodeStream;
00047 using UnBufferedTreeNodeStream = Antlr.Runtime.Tree.UnBufferedTreeNodeStream;
00048
00049 using MbUnit.Framework;
00050
00051 [TestFixture]
00052 public class ITreeNodeStreamFixture : TestFixtureBase
00053 {
00054 #region CommonTreeNodeStream Tests
00055
00056 [Test]
00057 public void testSingleNode()
00058 {
00059 ITree t = new CommonTree(new CommonToken(101));
00060
00061 ITreeNodeStream stream = CreateCommonTreeNodeStream(t);
00062 string expected = " 101";
00063 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00064 Assert.AreEqual(expected, actual);
00065
00066 expected = " 101";
00067 actual = stream.ToString();
00068 Assert.AreEqual(expected, actual);
00069 }
00070
00071 [Test]
00075 public void test4Nodes()
00076 {
00077 ITree t = new CommonTree(new CommonToken(101));
00078 t.AddChild(new CommonTree(new CommonToken(102)));
00079 t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
00080 t.AddChild(new CommonTree(new CommonToken(104)));
00081
00082 ITreeNodeStream stream = CreateCommonTreeNodeStream(t);
00083 string expected = " 101 102 103 104";
00084 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00085 Assert.AreEqual(expected, actual);
00086
00087 expected = " 101 2 102 2 103 3 104 3";
00088 actual = stream.ToString();
00089 Assert.AreEqual(expected, actual);
00090 }
00091
00092 [Test]
00093 public void testList()
00094 {
00095 ITree root = new CommonTree((IToken)null);
00096
00097 ITree t = new CommonTree(new CommonToken(101));
00098 t.AddChild(new CommonTree(new CommonToken(102)));
00099 t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
00100 t.AddChild(new CommonTree(new CommonToken(104)));
00101
00102 ITree u = new CommonTree(new CommonToken(105));
00103
00104 root.AddChild(t);
00105 root.AddChild(u);
00106
00107 CommonTreeNodeStream stream = new CommonTreeNodeStream(root);
00108 string expected = " 101 102 103 104 105";
00109 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00110 Assert.AreEqual(expected, actual);
00111
00112 expected = " 101 2 102 2 103 3 104 3 105";
00113 actual = stream.ToString();
00114 Assert.AreEqual(expected, actual);
00115 }
00116
00117 [Test]
00118 public void testFlatList()
00119 {
00120 ITree root = new CommonTree((IToken)null);
00121
00122 root.AddChild(new CommonTree(new CommonToken(101)));
00123 root.AddChild(new CommonTree(new CommonToken(102)));
00124 root.AddChild(new CommonTree(new CommonToken(103)));
00125
00126 CommonTreeNodeStream stream = new CommonTreeNodeStream(root);
00127 string expected = " 101 102 103";
00128 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00129 Assert.AreEqual(expected, actual);
00130
00131 expected = " 101 102 103";
00132 actual = stream.ToString();
00133 Assert.AreEqual(expected, actual);
00134 }
00135
00136 [Test]
00137 public void testListWithOneNode()
00138 {
00139 ITree root = new CommonTree((IToken)null);
00140
00141 root.AddChild(new CommonTree(new CommonToken(101)));
00142
00143 CommonTreeNodeStream stream = new CommonTreeNodeStream(root);
00144 string expected = " 101";
00145 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00146 Assert.AreEqual(expected, actual);
00147
00148 expected = " 101";
00149 actual = stream.ToString();
00150 Assert.AreEqual(expected, actual);
00151 }
00152
00153 [Test]
00154 public void testAoverB()
00155 {
00156 ITree t = new CommonTree(new CommonToken(101));
00157 t.AddChild(new CommonTree(new CommonToken(102)));
00158
00159 ITreeNodeStream stream = CreateCommonTreeNodeStream(t);
00160 string expected = " 101 102";
00161 string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
00162 Assert.AreEqual(expected, actual);
00163
00164 expected = " 101 2 102 3";
00165 actual = stream.ToString();
00166 Assert.AreEqual(expected, actual);
00167 }
00168
00169 [Test]
00170 public void testLT()
00171 {
00172
00173 ITree t = new CommonTree(new CommonToken(101));
00174 t.AddChild(new CommonTree(new CommonToken(102)));
00175 t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
00176 t.AddChild(new CommonTree(new CommonToken(104)));
00177
00178 ITreeNodeStream stream = CreateCommonTreeNodeStream(t);
00179 Assert.AreEqual(101, ((ITree)stream.LT(1)).Type);
00180 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(2)).Type);
00181 Assert.AreEqual(102, ((ITree)stream.LT(3)).Type);
00182 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(4)).Type);
00183 Assert.AreEqual(103, ((ITree)stream.LT(5)).Type);
00184 Assert.AreEqual(Token.UP, ((ITree)stream.LT(6)).Type);
00185 Assert.AreEqual(104, ((ITree)stream.LT(7)).Type);
00186 Assert.AreEqual(Token.UP, ((ITree)stream.LT(8)).Type);
00187 Assert.AreEqual(Token.EOF, ((ITree)stream.LT(9)).Type);
00188
00189 Assert.AreEqual(Token.EOF, ((ITree)stream.LT(100)).Type);
00190 }
00191
00192 [Test]
00193 public void testMarkRewindEntire()
00194 {
00195
00196
00197
00198 ITree r0 = new CommonTree(new CommonToken(101));
00199 ITree r1 = new CommonTree(new CommonToken(102));
00200 r0.AddChild(r1);
00201 r1.AddChild(new CommonTree(new CommonToken(103)));
00202 ITree r2 = new CommonTree(new CommonToken(106));
00203 r2.AddChild(new CommonTree(new CommonToken(107)));
00204 r1.AddChild(r2);
00205 r0.AddChild(new CommonTree(new CommonToken(104)));
00206 r0.AddChild(new CommonTree(new CommonToken(105)));
00207
00208 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00209 int m = stream.Mark();
00210 for (int k = 1; k <= 13; k++)
00211 {
00212 stream.LT(1);
00213 stream.Consume();
00214 }
00215 Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type);
00216 Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type);
00217 stream.Rewind(m);
00218
00219
00220 for (int k = 1; k <= 13; k++)
00221 {
00222 stream.LT(1);
00223 stream.Consume();
00224 }
00225 Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type);
00226 Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type);
00227 }
00228
00229 [Test]
00230 public void testMarkRewindInMiddle()
00231 {
00232
00233
00234
00235 ITree r0 = new CommonTree(new CommonToken(101));
00236 ITree r1 = new CommonTree(new CommonToken(102));
00237 r0.AddChild(r1);
00238 r1.AddChild(new CommonTree(new CommonToken(103)));
00239 ITree r2 = new CommonTree(new CommonToken(106));
00240 r2.AddChild(new CommonTree(new CommonToken(107)));
00241 r1.AddChild(r2);
00242 r0.AddChild(new CommonTree(new CommonToken(104)));
00243 r0.AddChild(new CommonTree(new CommonToken(105)));
00244
00245 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00246 for (int k = 1; k <= 7; k++)
00247 {
00248
00249 stream.Consume();
00250 }
00251 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00252 int m = stream.Mark();
00253 stream.Consume();
00254 stream.Consume();
00255 stream.Consume();
00256 stream.Consume();
00257 stream.Rewind(m);
00258
00259 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00260 stream.Consume();
00261 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00262 stream.Consume();
00263 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00264 stream.Consume();
00265 Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
00266 stream.Consume();
00267
00268 Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
00269 stream.Consume();
00270 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00271 stream.Consume();
00272 Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type);
00273 Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type);
00274 }
00275
00276 [Test]
00277 public void testMarkRewindNested()
00278 {
00279
00280
00281
00282 ITree r0 = new CommonTree(new CommonToken(101));
00283 ITree r1 = new CommonTree(new CommonToken(102));
00284 r0.AddChild(r1);
00285 r1.AddChild(new CommonTree(new CommonToken(103)));
00286 ITree r2 = new CommonTree(new CommonToken(106));
00287 r2.AddChild(new CommonTree(new CommonToken(107)));
00288 r1.AddChild(r2);
00289 r0.AddChild(new CommonTree(new CommonToken(104)));
00290 r0.AddChild(new CommonTree(new CommonToken(105)));
00291
00292 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00293 int m = stream.Mark();
00294 stream.Consume();
00295 stream.Consume();
00296 int m2 = stream.Mark();
00297 stream.Consume();
00298 stream.Consume();
00299 stream.Consume();
00300 stream.Consume();
00301 stream.Rewind(m2);
00302 Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
00303 stream.Consume();
00304 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00305 stream.Consume();
00306
00307 stream.Rewind(m);
00308 Assert.AreEqual(101, ((ITree)stream.LT(1)).Type);
00309 stream.Consume();
00310 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00311 stream.Consume();
00312 Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
00313 stream.Consume();
00314 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00315 }
00316
00317 [Test]
00318 public void testSeek()
00319 {
00320
00321
00322
00323 ITree r0 = new CommonTree(new CommonToken(101));
00324 ITree r1 = new CommonTree(new CommonToken(102));
00325 r0.AddChild(r1);
00326 r1.AddChild(new CommonTree(new CommonToken(103)));
00327 ITree r2 = new CommonTree(new CommonToken(106));
00328 r2.AddChild(new CommonTree(new CommonToken(107)));
00329 r1.AddChild(r2);
00330 r0.AddChild(new CommonTree(new CommonToken(104)));
00331 r0.AddChild(new CommonTree(new CommonToken(105)));
00332
00333 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00334 stream.Consume();
00335 stream.Consume();
00336 stream.Consume();
00337 stream.Seek(7);
00338 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00339 stream.Consume();
00340 stream.Consume();
00341 stream.Consume();
00342 Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
00343 }
00344
00345 [Test]
00346 public void testSeekFromStart()
00347 {
00348
00349
00350
00351 ITree r0 = new CommonTree(new CommonToken(101));
00352 ITree r1 = new CommonTree(new CommonToken(102));
00353 r0.AddChild(r1);
00354 r1.AddChild(new CommonTree(new CommonToken(103)));
00355 ITree r2 = new CommonTree(new CommonToken(106));
00356 r2.AddChild(new CommonTree(new CommonToken(107)));
00357 r1.AddChild(r2);
00358 r0.AddChild(new CommonTree(new CommonToken(104)));
00359 r0.AddChild(new CommonTree(new CommonToken(105)));
00360
00361 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00362 stream.Seek(7);
00363 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00364 stream.Consume();
00365 stream.Consume();
00366 stream.Consume();
00367 Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
00368 }
00369
00370 [Test]
00371 public void testPushPop()
00372 {
00373
00374
00375
00376 ITree r0 = new CommonTree(new CommonToken(101));
00377 ITree r1 = new CommonTree(new CommonToken(102));
00378 r1.AddChild(new CommonTree(new CommonToken(103)));
00379 r0.AddChild(r1);
00380 ITree r2 = new CommonTree(new CommonToken(104));
00381 r2.AddChild(new CommonTree(new CommonToken(105)));
00382 r0.AddChild(r2);
00383 ITree r3 = new CommonTree(new CommonToken(106));
00384 r3.AddChild(new CommonTree(new CommonToken(107)));
00385 r0.AddChild(r3);
00386 r0.AddChild(new CommonTree(new CommonToken(108)));
00387 r0.AddChild(new CommonTree(new CommonToken(109)));
00388
00389 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00390 String expecting = " 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3";
00391 String found = stream.ToString();
00392 Assert.AreEqual(expecting, found);
00393
00394
00395
00396 int indexOf102 = 2;
00397 int indexOf107 = 12;
00398 for (int k = 1; k <= indexOf107; k++)
00399 {
00400 stream.Consume();
00401 }
00402
00403 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00404 stream.Push(indexOf102);
00405 Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
00406 stream.Consume();
00407 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00408 stream.Consume();
00409 Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
00410 stream.Consume();
00411 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00412
00413 stream.Pop();
00414 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00415 }
00416
00417 [Test]
00418 public void testNestedPushPop()
00419 {
00420
00421
00422
00423 ITree r0 = new CommonTree(new CommonToken(101));
00424 ITree r1 = new CommonTree(new CommonToken(102));
00425 r1.AddChild(new CommonTree(new CommonToken(103)));
00426 r0.AddChild(r1);
00427 ITree r2 = new CommonTree(new CommonToken(104));
00428 r2.AddChild(new CommonTree(new CommonToken(105)));
00429 r0.AddChild(r2);
00430 ITree r3 = new CommonTree(new CommonToken(106));
00431 r3.AddChild(new CommonTree(new CommonToken(107)));
00432 r0.AddChild(r3);
00433 r0.AddChild(new CommonTree(new CommonToken(108)));
00434 r0.AddChild(new CommonTree(new CommonToken(109)));
00435
00436 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00437
00438
00439
00440
00441 int indexOf102 = 2;
00442 int indexOf107 = 12;
00443 for (int k = 1; k <= indexOf107; k++)
00444 {
00445 stream.Consume();
00446 }
00447 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00448
00449 stream.Push(indexOf102);
00450 Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
00451 stream.Consume();
00452 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00453 stream.Consume();
00454 Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
00455 stream.Consume();
00456
00457
00458 int indexOf104 = 6;
00459 stream.Push(indexOf104);
00460 Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
00461 stream.Consume();
00462 Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type);
00463 stream.Consume();
00464 Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
00465 stream.Consume();
00466 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00467
00468 stream.Pop();
00469
00470 Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type);
00471
00472 stream.Pop();
00473 Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
00474 }
00475
00476 [Test]
00477 public void testPushPopFromEOF()
00478 {
00479
00480
00481
00482 ITree r0 = new CommonTree(new CommonToken(101));
00483 ITree r1 = new CommonTree(new CommonToken(102));
00484 r1.AddChild(new CommonTree(new CommonToken(103)));
00485 r0.AddChild(r1);
00486 ITree r2 = new CommonTree(new CommonToken(104));
00487 r2.AddChild(new CommonTree(new CommonToken(105)));
00488 r0.AddChild(r2);
00489 ITree r3 = new CommonTree(new CommonToken(106));
00490 r3.AddChild(new CommonTree(new CommonToken(107)));
00491 r0.AddChild(r3);
00492 r0.AddChild(new CommonTree(new CommonToken(108)));
00493 r0.AddChild(new CommonTree(new CommonToken(109)));
00494
00495 CommonTreeNodeStream stream = new CommonTreeNodeStream(r0);
00496
00497 while (stream.LA(1) != Token.EOF)
00498 {
00499