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 #pragma warning disable 219 // No unused variable warnings
00035
00036 namespace Antlr.Runtime.Tests {
00037 using System;
00038 using System.Collections.Generic;
00039 using Antlr.Runtime.Tree;
00040
00041 using MbUnit.Framework;
00042
00043 [TestFixture]
00044 public class RewriteRuleXxxxStreamFixture : TestFixtureBase {
00045 #region Check Constructors
00046
00047 [Test]
00048 public void CheckRewriteRuleTokenStreamConstructors() {
00049 RewriteRuleTokenStream tokenTest1 = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00050 "RewriteRuleTokenStream test1");
00051
00052 RewriteRuleTokenStream tokenTest2 = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00053 "RewriteRuleTokenStream test2", CreateToken(1,
00054 "test token without any real context"));
00055
00056 RewriteRuleTokenStream tokenTest3 = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00057 "RewriteRuleTokenStream test3", CreateTokenList(4));
00058 }
00059
00060 [Test]
00061 public void CheckRewriteRuleSubtreeStreamConstructors() {
00062 RewriteRuleSubtreeStream subtreeTest1 =
00063 new RewriteRuleSubtreeStream(CreateTreeAdaptor(),
00064 "RewriteRuleSubtreeStream test1");
00065
00066 RewriteRuleSubtreeStream subtreeTest2 =
00067 new RewriteRuleSubtreeStream(CreateTreeAdaptor(),
00068 "RewriteRuleSubtreeStream test2", CreateToken(1,
00069 "test token without any real context"));
00070
00071 RewriteRuleSubtreeStream subtreeTest3 =
00072 new RewriteRuleSubtreeStream(CreateTreeAdaptor(),
00073 "RewriteRuleSubtreeStream test3", CreateTokenList(4));
00074 }
00075
00076 [Test]
00077 public void CheckRewriteRuleNodeStreamConstructors() {
00078 RewriteRuleNodeStream nodeTest1 = new RewriteRuleNodeStream(CreateTreeAdaptor(),
00079 "RewriteRuleNodeStream test1");
00080
00081 RewriteRuleNodeStream nodeTest2 = new RewriteRuleNodeStream(CreateTreeAdaptor(),
00082 "RewriteRuleNodeStream test2", CreateToken(1,
00083 "test token without any real context"));
00084
00085 RewriteRuleNodeStream nodeTest3 = new RewriteRuleNodeStream(CreateTreeAdaptor(),
00086 "RewriteRuleNodeStream test3", CreateTokenList(4));
00087 }
00088 #endregion
00089
00090 #region Method Tests
00091
00092 #region Empty Behaviour
00093 [Test]
00094 [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")]
00095 public void CheckRRTokenStreamBehaviourWhileEmpty1() {
00096 string description = "RewriteRuleTokenStream test";
00097 RewriteRuleTokenStream tokenTest =
00098 new RewriteRuleTokenStream(CreateTreeAdaptor(), description);
00099
00100 Assert.IsFalse(tokenTest.HasNext(), "tokenTest has to give back false here.");
00101 Assert.AreEqual(description.ToString(), tokenTest.Description,
00102 "Description strings should be equal.");
00103 Assert.AreEqual(0, tokenTest.Size(), "The number of elements should be zero.");
00104 tokenTest.Reset();
00105 Assert.IsTrue(true, "Reset() shouldn't make any problems here.");
00106 Assert.AreEqual(0, tokenTest.Size(),
00107 "The number of elements should be still zero.");
00108 tokenTest.NextNode();
00109 }
00110
00111 [Test]
00112 [ExpectedException(typeof(RewriteEmptyStreamException),
00113 "RewriteRuleSubtreeStream test")]
00114 public void CheckRRSubtreeStreamBehaviourWhileEmpty1() {
00115 string description = "RewriteRuleSubtreeStream test";
00116 RewriteRuleSubtreeStream subtreeTest =
00117 new RewriteRuleSubtreeStream(CreateTreeAdaptor(), description);
00118
00119 Assert.IsFalse(subtreeTest.HasNext(), "HasNext() has to give back false here.");
00120 Assert.AreEqual(description.ToString(), subtreeTest.Description,
00121 "Description strings should be equal.");
00122 Assert.AreEqual(0, subtreeTest.Size(), "The number of elements should be zero.");
00123 subtreeTest.Reset();
00124 Assert.IsTrue(true, "Reset() shouldn't make any problems here.");
00125 Assert.AreEqual(0, subtreeTest.Size(),
00126 "The number of elements should be still zero.");
00127 subtreeTest.NextNode();
00128 }
00129
00130 [Test]
00131 [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")]
00132 public void CheckRRNodeStreamBehaviourWhileEmpty1() {
00133 string description = "RewriteRuleNodeStream test";
00134 RewriteRuleNodeStream nodeTest =
00135 new RewriteRuleNodeStream(CreateTreeAdaptor(), description);
00136
00137 Assert.IsFalse(nodeTest.HasNext(), "HasNext() has to give back false here.");
00138 Assert.AreEqual(description.ToString(), nodeTest.Description,
00139 "Description strings should be equal.");
00140 Assert.AreEqual(0, nodeTest.Size(), "The number of elements should be zero.");
00141 nodeTest.Reset();
00142 Assert.IsTrue(true, "Reset() shouldn't make any problems here.");
00143 Assert.AreEqual(0, nodeTest.Size(),
00144 "The number of elements should be still zero.");
00145 nodeTest.NextNode();
00146 }
00147
00148 [Test]
00149 [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")]
00150 public void CheckRRTokenStreamBehaviourWhileEmpty2() {
00151 RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00152 "RewriteRuleTokenStream test");
00153
00154 tokenTest.NextTree();
00155 }
00156
00157 [Test]
00158 [ExpectedException(typeof(RewriteEmptyStreamException),
00159 "RewriteRuleSubtreeStream test")]
00160 public void CheckRRSubtreeStreamBehaviourWhileEmpty2() {
00161 RewriteRuleSubtreeStream subtreeTest = new RewriteRuleSubtreeStream(
00162 CreateTreeAdaptor(), "RewriteRuleSubtreeStream test");
00163
00164 subtreeTest.NextTree();
00165 }
00166
00167 [Test]
00168 [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")]
00169 public void CheckRRNodeStreamBehaviourWhileEmpty2() {
00170 RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(),
00171 "RewriteRuleNodeStream test");
00172
00173 nodeTest.NextTree();
00174 }
00175
00176 [Test]
00177 [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")]
00178 public void CheckRRTokenStreamBehaviourWhileEmpty3() {
00179 RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00180 "RewriteRuleTokenStream test");
00181
00182 tokenTest.NextToken();
00183 }
00184
00185 #endregion
00186
00187 #region Behaviour with Elements
00188 [Test]
00189 [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleTokenStream test")]
00190 public void CheckRRTokenStreamBehaviourWithElements() {
00191 RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(),
00192 "RewriteRuleTokenStream test");
00193
00194 IToken token1 = CreateToken(1, "test token without any real context");
00195
00196
00197 tokenTest.Add(token1);
00198 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (1).");
00199 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (1).");
00200
00201
00202 CommonTree tree = (CommonTree) tokenTest.NextNode();
00203 Assert.AreEqual(token1, tree.Token,
00204 "The returned token should be equal to the given token (1).");
00205 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (2).");
00206 Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (1).");
00207 tokenTest.Reset();
00208 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (3).");
00209 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (2).");
00210
00211
00212 IToken returnedToken = tokenTest.NextToken();
00213 Assert.AreEqual(token1, returnedToken,
00214 "The returned token should be equal to the given token (2).");
00215 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (4).");
00216 Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (2).");
00217 tokenTest.Reset();
00218 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (5).");
00219 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (3).");
00220
00221
00222 returnedToken = (IToken) tokenTest.NextTree();
00223 Assert.AreEqual(token1, returnedToken,
00224 "The returned token should be equal to the given token (3).");
00225 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (6).");
00226 Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (2).");
00227 tokenTest.Reset();
00228 Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (7).");
00229 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (3).");
00230
00231
00232 IToken token2 = CreateToken(2, "test token without any real context");
00233
00234 tokenTest.Add(token2);
00235 Assert.AreEqual(2, tokenTest.Size(), "tokenTest should have the size 2 (1).");
00236 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (4).");
00237 returnedToken = tokenTest.NextToken();
00238 Assert.AreEqual(token1, returnedToken,
00239 "The returned token should be equal to the given token (4).");
00240 Assert.AreEqual(2, tokenTest.Size(), "tokenTest should have the size 2 (2).");
00241 Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (5).");
00242 returnedToken = tokenTest.NextToken();
00243 Assert.AreEqual(token2, returnedToken,
00244 "The returned token should be equal to the given token (5).");
00245 Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (3).");
00246
00247
00248 tokenTest.NextToken();
00249 }
00250
00251 [Test]
00252 [ExpectedException(typeof(RewriteCardinalityException),
00253 "RewriteRuleSubtreeStream test")]
00254 public void CheckRRSubtreeStreamBehaviourWithElements() {
00255 RewriteRuleSubtreeStream subtreeTest =
00256 new RewriteRuleSubtreeStream(CreateTreeAdaptor(),
00257 "RewriteRuleSubtreeStream test");
00258
00259 IToken token1 = CreateToken(1, "test token without any real context");
00260 ITree tree1 = CreateTree(token1);
00261
00262
00263 subtreeTest.Add(tree1);
00264 Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (1).");
00265 Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (1).");
00266
00267
00268 Assert.AreEqual(tree1, (ITree) subtreeTest.NextNode(),
00269 "The returned tree should be equal to the given tree (1).");
00270 Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (2).");
00271 Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (1).");
00272 subtreeTest.Reset();
00273 Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (3).");
00274 Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (2).");
00275
00276
00277 CommonTree returnedTree = (CommonTree) subtreeTest.NextTree();
00278 Assert.AreEqual(token1, returnedTree.Token,
00279 "The returned token should be equal to the given token (3).");
00280 Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (4).");
00281 Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (2).");
00282 subtreeTest.Reset();
00283 Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (5).");
00284 Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (3).");
00285
00286
00287 IToken token2 = CreateToken(2, "test token without any real context");
00288 ITree tree2 = CreateTree(token2);
00289
00290 subtreeTest.Add(tree2);
00291 Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (1).");
00292 Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (4).");
00293 returnedTree = (CommonTree) subtreeTest.NextTree();
00294 Assert.AreEqual(token1, returnedTree.Token,
00295 "The returned token should be equal to the given token (4).");
00296 Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (2).");
00297 Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (5).");
00298 returnedTree = (CommonTree) subtreeTest.NextTree();
00299 Assert.AreEqual(token2, returnedTree.Token,
00300 "The returned token should be equal to the given token (5).");
00301 Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (3).");
00302
00303
00304 subtreeTest.NextTree();
00305 }
00306
00307 [Test]
00308 [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleNodeStream test")]
00309 public void CheckRRNodeStreamBehaviourWithElements() {
00310 RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(),
00311 "RewriteRuleNodeStream test");
00312
00313 IToken token1 = CreateToken(1, "test token without any real context");
00314 ITree tree1 = CreateTree(token1);
00315
00316
00317 nodeTest.Add(tree1);
00318 Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (1).");
00319 Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (1).");
00320
00321
00322 CommonTree returnedTree = (CommonTree) nodeTest.NextNode();
00323 Assert.AreEqual(tree1.Type, returnedTree.Type,
00324 "The returned tree should be equal to the given tree (1).");
00325 Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (2).");
00326 Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (1).");
00327 nodeTest.Reset();
00328 Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (3).");
00329 Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (2).");
00330
00331
00332 returnedTree = (CommonTree) nodeTest.NextTree();
00333 Assert.AreEqual(token1, returnedTree.Token,
00334 "The returned token should be equal to the given token (3).");
00335 Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (4).");
00336 Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (2).");
00337 nodeTest.Reset();
00338 Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (5).");
00339 Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (3).");
00340
00341
00342 IToken token2 = CreateToken(2, "test token without any real context");
00343 ITree tree2 = CreateTree(token2);
00344
00345 nodeTest.Add(tree2);
00346 Assert.AreEqual(2, nodeTest.Size(), "nodeTest should have the size 2 (1).");
00347 Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (4).");
00348 returnedTree = (CommonTree) nodeTest.NextTree();
00349 Assert.AreEqual(token1, returnedTree.Token,
00350 "The returned token should be equal to the given token (4).");
00351 Assert.AreEqual(2, nodeTest.Size(), "nodeTest should have the size 2 (2).");
00352 Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (5).");
00353 returnedTree = (CommonTree) nodeTest.NextTree();
00354 Assert.AreEqual(token2, returnedTree.Token,
00355 "The returned token should be equal to the given token (5).");
00356 Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (3).");
00357
00358
00359 nodeTest.NextTree();
00360 }
00361
00362 #endregion
00363
00364 #endregion
00365
00366
00367 #region Helper Methods
00368
00369 private ITreeAdaptor CreateTreeAdaptor() {
00370 return new CommonTreeAdaptor();
00371 }
00372
00373 private ITree CreateTree(IToken token) {
00374 return new CommonTree(token);
00375 }
00376
00377 private IToken CreateToken(int type, string text) {
00378 return new CommonToken(type, text);
00379 }
00380
00381 private IList<IToken> CreateTokenList(int count) {
00382 IList<IToken> list = new List<IToken>();
00383 for (int i = 0; i < count; i++) {
00384 list.Add(new CommonToken((i+1), "test token " + (i+1).ToString() +
00385 " without any real context"));
00386 }
00387 return list;
00388 }
00389
00390 #endregion
00391 }
00392 }