1*16467b97STreehugger Robot /* 2*16467b97STreehugger Robot [The "BSD licence"] 3*16467b97STreehugger Robot Copyright (c) 2007 Johannes Luber 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 #pragma warning disable 219 // No unused variable warnings 35*16467b97STreehugger Robot 36*16467b97STreehugger Robot namespace Antlr.Runtime.Tests { 37*16467b97STreehugger Robot using System; 38*16467b97STreehugger Robot using System.Collections.Generic; 39*16467b97STreehugger Robot using Antlr.Runtime.Tree; 40*16467b97STreehugger Robot 41*16467b97STreehugger Robot using MbUnit.Framework; 42*16467b97STreehugger Robot 43*16467b97STreehugger Robot [TestFixture] 44*16467b97STreehugger Robot public class RewriteRuleXxxxStreamFixture : TestFixtureBase { 45*16467b97STreehugger Robot #region Check Constructors 46*16467b97STreehugger Robot 47*16467b97STreehugger Robot [Test] CheckRewriteRuleTokenStreamConstructors()48*16467b97STreehugger Robot public void CheckRewriteRuleTokenStreamConstructors() { 49*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest1 = new RewriteRuleTokenStream(CreateTreeAdaptor(), 50*16467b97STreehugger Robot "RewriteRuleTokenStream test1"); 51*16467b97STreehugger Robot 52*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest2 = new RewriteRuleTokenStream(CreateTreeAdaptor(), 53*16467b97STreehugger Robot "RewriteRuleTokenStream test2", CreateToken(1, 54*16467b97STreehugger Robot "test token without any real context")); 55*16467b97STreehugger Robot 56*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest3 = new RewriteRuleTokenStream(CreateTreeAdaptor(), 57*16467b97STreehugger Robot "RewriteRuleTokenStream test3", CreateTokenList(4)); 58*16467b97STreehugger Robot } 59*16467b97STreehugger Robot 60*16467b97STreehugger Robot [Test] CheckRewriteRuleSubtreeStreamConstructors()61*16467b97STreehugger Robot public void CheckRewriteRuleSubtreeStreamConstructors() { 62*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest1 = 63*16467b97STreehugger Robot new RewriteRuleSubtreeStream(CreateTreeAdaptor(), 64*16467b97STreehugger Robot "RewriteRuleSubtreeStream test1"); 65*16467b97STreehugger Robot 66*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest2 = 67*16467b97STreehugger Robot new RewriteRuleSubtreeStream(CreateTreeAdaptor(), 68*16467b97STreehugger Robot "RewriteRuleSubtreeStream test2", CreateToken(1, 69*16467b97STreehugger Robot "test token without any real context")); 70*16467b97STreehugger Robot 71*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest3 = 72*16467b97STreehugger Robot new RewriteRuleSubtreeStream(CreateTreeAdaptor(), 73*16467b97STreehugger Robot "RewriteRuleSubtreeStream test3", CreateTokenList(4)); 74*16467b97STreehugger Robot } 75*16467b97STreehugger Robot 76*16467b97STreehugger Robot [Test] CheckRewriteRuleNodeStreamConstructors()77*16467b97STreehugger Robot public void CheckRewriteRuleNodeStreamConstructors() { 78*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest1 = new RewriteRuleNodeStream(CreateTreeAdaptor(), 79*16467b97STreehugger Robot "RewriteRuleNodeStream test1"); 80*16467b97STreehugger Robot 81*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest2 = new RewriteRuleNodeStream(CreateTreeAdaptor(), 82*16467b97STreehugger Robot "RewriteRuleNodeStream test2", CreateToken(1, 83*16467b97STreehugger Robot "test token without any real context")); 84*16467b97STreehugger Robot 85*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest3 = new RewriteRuleNodeStream(CreateTreeAdaptor(), 86*16467b97STreehugger Robot "RewriteRuleNodeStream test3", CreateTokenList(4)); 87*16467b97STreehugger Robot } 88*16467b97STreehugger Robot #endregion 89*16467b97STreehugger Robot 90*16467b97STreehugger Robot #region Method Tests 91*16467b97STreehugger Robot 92*16467b97STreehugger Robot #region Empty Behaviour 93*16467b97STreehugger Robot [Test] 94*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] CheckRRTokenStreamBehaviourWhileEmpty1()95*16467b97STreehugger Robot public void CheckRRTokenStreamBehaviourWhileEmpty1() { 96*16467b97STreehugger Robot string description = "RewriteRuleTokenStream test"; 97*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest = 98*16467b97STreehugger Robot new RewriteRuleTokenStream(CreateTreeAdaptor(), description); 99*16467b97STreehugger Robot 100*16467b97STreehugger Robot Assert.IsFalse(tokenTest.HasNext, "tokenTest has to give back false here."); 101*16467b97STreehugger Robot Assert.AreEqual(description.ToString(), tokenTest.Description, 102*16467b97STreehugger Robot "Description strings should be equal."); 103*16467b97STreehugger Robot Assert.AreEqual(0, tokenTest.Count, "The number of elements should be zero."); 104*16467b97STreehugger Robot tokenTest.Reset(); 105*16467b97STreehugger Robot Assert.IsTrue(true, "Reset() shouldn't make any problems here."); 106*16467b97STreehugger Robot Assert.AreEqual(0, tokenTest.Count, 107*16467b97STreehugger Robot "The number of elements should be still zero."); 108*16467b97STreehugger Robot tokenTest.NextNode(); 109*16467b97STreehugger Robot } 110*16467b97STreehugger Robot 111*16467b97STreehugger Robot [Test] 112*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), 113*16467b97STreehugger Robot "RewriteRuleSubtreeStream test")] CheckRRSubtreeStreamBehaviourWhileEmpty1()114*16467b97STreehugger Robot public void CheckRRSubtreeStreamBehaviourWhileEmpty1() { 115*16467b97STreehugger Robot string description = "RewriteRuleSubtreeStream test"; 116*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest = 117*16467b97STreehugger Robot new RewriteRuleSubtreeStream(CreateTreeAdaptor(), description); 118*16467b97STreehugger Robot 119*16467b97STreehugger Robot Assert.IsFalse(subtreeTest.HasNext, "HasNext has to give back false here."); 120*16467b97STreehugger Robot Assert.AreEqual(description.ToString(), subtreeTest.Description, 121*16467b97STreehugger Robot "Description strings should be equal."); 122*16467b97STreehugger Robot Assert.AreEqual(0, subtreeTest.Count, "The number of elements should be zero."); 123*16467b97STreehugger Robot subtreeTest.Reset(); 124*16467b97STreehugger Robot Assert.IsTrue(true, "Reset() shouldn't make any problems here."); 125*16467b97STreehugger Robot Assert.AreEqual(0, subtreeTest.Count, 126*16467b97STreehugger Robot "The number of elements should be still zero."); 127*16467b97STreehugger Robot subtreeTest.NextNode(); 128*16467b97STreehugger Robot } 129*16467b97STreehugger Robot 130*16467b97STreehugger Robot [Test] 131*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")] CheckRRNodeStreamBehaviourWhileEmpty1()132*16467b97STreehugger Robot public void CheckRRNodeStreamBehaviourWhileEmpty1() { 133*16467b97STreehugger Robot string description = "RewriteRuleNodeStream test"; 134*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest = 135*16467b97STreehugger Robot new RewriteRuleNodeStream(CreateTreeAdaptor(), description); 136*16467b97STreehugger Robot 137*16467b97STreehugger Robot Assert.IsFalse(nodeTest.HasNext, "HasNext has to give back false here."); 138*16467b97STreehugger Robot Assert.AreEqual(description.ToString(), nodeTest.Description, 139*16467b97STreehugger Robot "Description strings should be equal."); 140*16467b97STreehugger Robot Assert.AreEqual(0, nodeTest.Count, "The number of elements should be zero."); 141*16467b97STreehugger Robot nodeTest.Reset(); 142*16467b97STreehugger Robot Assert.IsTrue(true, "Reset() shouldn't make any problems here."); 143*16467b97STreehugger Robot Assert.AreEqual(0, nodeTest.Count, 144*16467b97STreehugger Robot "The number of elements should be still zero."); 145*16467b97STreehugger Robot nodeTest.NextNode(); 146*16467b97STreehugger Robot } 147*16467b97STreehugger Robot 148*16467b97STreehugger Robot [Test] 149*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] CheckRRTokenStreamBehaviourWhileEmpty2()150*16467b97STreehugger Robot public void CheckRRTokenStreamBehaviourWhileEmpty2() { 151*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), 152*16467b97STreehugger Robot "RewriteRuleTokenStream test"); 153*16467b97STreehugger Robot 154*16467b97STreehugger Robot tokenTest.NextTree(); 155*16467b97STreehugger Robot } 156*16467b97STreehugger Robot 157*16467b97STreehugger Robot [Test] 158*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), 159*16467b97STreehugger Robot "RewriteRuleSubtreeStream test")] CheckRRSubtreeStreamBehaviourWhileEmpty2()160*16467b97STreehugger Robot public void CheckRRSubtreeStreamBehaviourWhileEmpty2() { 161*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest = new RewriteRuleSubtreeStream( 162*16467b97STreehugger Robot CreateTreeAdaptor(), "RewriteRuleSubtreeStream test"); 163*16467b97STreehugger Robot 164*16467b97STreehugger Robot subtreeTest.NextTree(); 165*16467b97STreehugger Robot } 166*16467b97STreehugger Robot 167*16467b97STreehugger Robot [Test] 168*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")] CheckRRNodeStreamBehaviourWhileEmpty2()169*16467b97STreehugger Robot public void CheckRRNodeStreamBehaviourWhileEmpty2() { 170*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(), 171*16467b97STreehugger Robot "RewriteRuleNodeStream test"); 172*16467b97STreehugger Robot 173*16467b97STreehugger Robot nodeTest.NextTree(); 174*16467b97STreehugger Robot } 175*16467b97STreehugger Robot 176*16467b97STreehugger Robot [Test] 177*16467b97STreehugger Robot [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] CheckRRTokenStreamBehaviourWhileEmpty3()178*16467b97STreehugger Robot public void CheckRRTokenStreamBehaviourWhileEmpty3() { 179*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), 180*16467b97STreehugger Robot "RewriteRuleTokenStream test"); 181*16467b97STreehugger Robot 182*16467b97STreehugger Robot tokenTest.NextToken(); 183*16467b97STreehugger Robot } 184*16467b97STreehugger Robot 185*16467b97STreehugger Robot #endregion 186*16467b97STreehugger Robot 187*16467b97STreehugger Robot #region Behaviour with Elements 188*16467b97STreehugger Robot [Test] 189*16467b97STreehugger Robot [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleTokenStream test")] CheckRRTokenStreamBehaviourWithElements()190*16467b97STreehugger Robot public void CheckRRTokenStreamBehaviourWithElements() { 191*16467b97STreehugger Robot RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), 192*16467b97STreehugger Robot "RewriteRuleTokenStream test"); 193*16467b97STreehugger Robot 194*16467b97STreehugger Robot IToken token1 = CreateToken(1, "test token without any real context"); 195*16467b97STreehugger Robot 196*16467b97STreehugger Robot // Test Add() 197*16467b97STreehugger Robot tokenTest.Add(token1); 198*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (1)."); 199*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (1)."); 200*16467b97STreehugger Robot 201*16467b97STreehugger Robot // Test NextNode() 202*16467b97STreehugger Robot CommonTree tree = (CommonTree) tokenTest.NextNode(); 203*16467b97STreehugger Robot Assert.AreEqual(token1, tree.Token, 204*16467b97STreehugger Robot "The returned token should be equal to the given token (1)."); 205*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (2)."); 206*16467b97STreehugger Robot Assert.IsFalse(tokenTest.HasNext, "HasNext should be false here (1)."); 207*16467b97STreehugger Robot tokenTest.Reset(); 208*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (3)."); 209*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (2)."); 210*16467b97STreehugger Robot 211*16467b97STreehugger Robot // Test NextToken() 212*16467b97STreehugger Robot IToken returnedToken = tokenTest.NextToken(); 213*16467b97STreehugger Robot Assert.AreEqual(token1, returnedToken, 214*16467b97STreehugger Robot "The returned token should be equal to the given token (2)."); 215*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (4)."); 216*16467b97STreehugger Robot Assert.IsFalse(tokenTest.HasNext, "HasNext should be false here (2)."); 217*16467b97STreehugger Robot tokenTest.Reset(); 218*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (5)."); 219*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (3)."); 220*16467b97STreehugger Robot 221*16467b97STreehugger Robot // Test NextTree() 222*16467b97STreehugger Robot returnedToken = (IToken) tokenTest.NextTree(); 223*16467b97STreehugger Robot Assert.AreEqual(token1, returnedToken, 224*16467b97STreehugger Robot "The returned token should be equal to the given token (3)."); 225*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (6)."); 226*16467b97STreehugger Robot Assert.IsFalse(tokenTest.HasNext, "HasNext should be false here (2)."); 227*16467b97STreehugger Robot tokenTest.Reset(); 228*16467b97STreehugger Robot Assert.AreEqual(1, tokenTest.Count, "tokenTest should have the size 1 (7)."); 229*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (3)."); 230*16467b97STreehugger Robot 231*16467b97STreehugger Robot // Test, what happens with two elements 232*16467b97STreehugger Robot IToken token2 = CreateToken(2, "test token without any real context"); 233*16467b97STreehugger Robot 234*16467b97STreehugger Robot tokenTest.Add(token2); 235*16467b97STreehugger Robot Assert.AreEqual(2, tokenTest.Count, "tokenTest should have the size 2 (1)."); 236*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (4)."); 237*16467b97STreehugger Robot returnedToken = tokenTest.NextToken(); 238*16467b97STreehugger Robot Assert.AreEqual(token1, returnedToken, 239*16467b97STreehugger Robot "The returned token should be equal to the given token (4)."); 240*16467b97STreehugger Robot Assert.AreEqual(2, tokenTest.Count, "tokenTest should have the size 2 (2)."); 241*16467b97STreehugger Robot Assert.IsTrue(tokenTest.HasNext, "HasNext should be true here (5)."); 242*16467b97STreehugger Robot returnedToken = tokenTest.NextToken(); 243*16467b97STreehugger Robot Assert.AreEqual(token2, returnedToken, 244*16467b97STreehugger Robot "The returned token should be equal to the given token (5)."); 245*16467b97STreehugger Robot Assert.IsFalse(tokenTest.HasNext, "HasNext should be false here (3)."); 246*16467b97STreehugger Robot 247*16467b97STreehugger Robot // Test exception 248*16467b97STreehugger Robot tokenTest.NextToken(); 249*16467b97STreehugger Robot } 250*16467b97STreehugger Robot 251*16467b97STreehugger Robot [Test] 252*16467b97STreehugger Robot [ExpectedException(typeof(RewriteCardinalityException), 253*16467b97STreehugger Robot "RewriteRuleSubtreeStream test")] CheckRRSubtreeStreamBehaviourWithElements()254*16467b97STreehugger Robot public void CheckRRSubtreeStreamBehaviourWithElements() { 255*16467b97STreehugger Robot RewriteRuleSubtreeStream subtreeTest = 256*16467b97STreehugger Robot new RewriteRuleSubtreeStream(CreateTreeAdaptor(), 257*16467b97STreehugger Robot "RewriteRuleSubtreeStream test"); 258*16467b97STreehugger Robot 259*16467b97STreehugger Robot IToken token1 = CreateToken(1, "test token without any real context"); 260*16467b97STreehugger Robot ITree tree1 = CreateTree(token1); 261*16467b97STreehugger Robot 262*16467b97STreehugger Robot // Test Add() 263*16467b97STreehugger Robot subtreeTest.Add(tree1); 264*16467b97STreehugger Robot Assert.AreEqual(1, subtreeTest.Count, "subtreeTest should have the size 1 (1)."); 265*16467b97STreehugger Robot Assert.IsTrue(subtreeTest.HasNext, "HasNext should be true here (1)."); 266*16467b97STreehugger Robot 267*16467b97STreehugger Robot // Test NextNode() 268*16467b97STreehugger Robot Assert.AreEqual(tree1, (ITree) subtreeTest.NextNode(), 269*16467b97STreehugger Robot "The returned tree should be equal to the given tree (1)."); 270*16467b97STreehugger Robot Assert.AreEqual(1, subtreeTest.Count, "subtreeTest should have the size 1 (2)."); 271*16467b97STreehugger Robot Assert.IsFalse(subtreeTest.HasNext, "HasNext should be false here (1)."); 272*16467b97STreehugger Robot subtreeTest.Reset(); 273*16467b97STreehugger Robot Assert.AreEqual(1, subtreeTest.Count, "subtreeTest should have the size 1 (3)."); 274*16467b97STreehugger Robot Assert.IsTrue(subtreeTest.HasNext, "HasNext should be true here (2)."); 275*16467b97STreehugger Robot 276*16467b97STreehugger Robot // Test NextTree() 277*16467b97STreehugger Robot CommonTree returnedTree = (CommonTree) subtreeTest.NextTree(); 278*16467b97STreehugger Robot Assert.AreEqual(token1, returnedTree.Token, 279*16467b97STreehugger Robot "The returned token should be equal to the given token (3)."); 280*16467b97STreehugger Robot Assert.AreEqual(1, subtreeTest.Count, "subtreeTest should have the size 1 (4)."); 281*16467b97STreehugger Robot Assert.IsFalse(subtreeTest.HasNext, "HasNext should be false here (2)."); 282*16467b97STreehugger Robot subtreeTest.Reset(); 283*16467b97STreehugger Robot Assert.AreEqual(1, subtreeTest.Count, "subtreeTest should have the size 1 (5)."); 284*16467b97STreehugger Robot Assert.IsTrue(subtreeTest.HasNext, "HasNext should be true here (3)."); 285*16467b97STreehugger Robot 286*16467b97STreehugger Robot // Test, what happens with two elements 287*16467b97STreehugger Robot IToken token2 = CreateToken(2, "test token without any real context"); 288*16467b97STreehugger Robot ITree tree2 = CreateTree(token2); 289*16467b97STreehugger Robot 290*16467b97STreehugger Robot subtreeTest.Add(tree2); 291*16467b97STreehugger Robot Assert.AreEqual(2, subtreeTest.Count, "subtreeTest should have the size 2 (1)."); 292*16467b97STreehugger Robot Assert.IsTrue(subtreeTest.HasNext, "HasNext should be true here (4)."); 293*16467b97STreehugger Robot returnedTree = (CommonTree) subtreeTest.NextTree(); 294*16467b97STreehugger Robot Assert.AreEqual(token1, returnedTree.Token, 295*16467b97STreehugger Robot "The returned token should be equal to the given token (4)."); 296*16467b97STreehugger Robot Assert.AreEqual(2, subtreeTest.Count, "subtreeTest should have the size 2 (2)."); 297*16467b97STreehugger Robot Assert.IsTrue(subtreeTest.HasNext, "HasNext should be true here (5)."); 298*16467b97STreehugger Robot returnedTree = (CommonTree) subtreeTest.NextTree(); 299*16467b97STreehugger Robot Assert.AreEqual(token2, returnedTree.Token, 300*16467b97STreehugger Robot "The returned token should be equal to the given token (5)."); 301*16467b97STreehugger Robot Assert.IsFalse(subtreeTest.HasNext, "HasNext should be false here (3)."); 302*16467b97STreehugger Robot 303*16467b97STreehugger Robot // Test exception 304*16467b97STreehugger Robot subtreeTest.NextTree(); 305*16467b97STreehugger Robot } 306*16467b97STreehugger Robot 307*16467b97STreehugger Robot [Test] 308*16467b97STreehugger Robot [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleNodeStream test")] CheckRRNodeStreamBehaviourWithElements()309*16467b97STreehugger Robot public void CheckRRNodeStreamBehaviourWithElements() { 310*16467b97STreehugger Robot RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(), 311*16467b97STreehugger Robot "RewriteRuleNodeStream test"); 312*16467b97STreehugger Robot 313*16467b97STreehugger Robot IToken token1 = CreateToken(1, "test token without any real context"); 314*16467b97STreehugger Robot ITree tree1 = CreateTree(token1); 315*16467b97STreehugger Robot 316*16467b97STreehugger Robot // Test Add() 317*16467b97STreehugger Robot nodeTest.Add(tree1); 318*16467b97STreehugger Robot Assert.AreEqual(1, nodeTest.Count, "nodeTest should have the size 1 (1)."); 319*16467b97STreehugger Robot Assert.IsTrue(nodeTest.HasNext, "HasNext should be true here (1)."); 320*16467b97STreehugger Robot 321*16467b97STreehugger Robot // Test NextNode() 322*16467b97STreehugger Robot CommonTree returnedTree = (CommonTree) nodeTest.NextNode(); 323*16467b97STreehugger Robot Assert.AreEqual(tree1.Type, returnedTree.Type, 324*16467b97STreehugger Robot "The returned tree should be equal to the given tree (1)."); 325*16467b97STreehugger Robot Assert.AreEqual(1, nodeTest.Count, "nodeTest should have the size 1 (2)."); 326*16467b97STreehugger Robot Assert.IsFalse(nodeTest.HasNext, "HasNext should be false here (1)."); 327*16467b97STreehugger Robot nodeTest.Reset(); 328*16467b97STreehugger Robot Assert.AreEqual(1, nodeTest.Count, "nodeTest should have the size 1 (3)."); 329*16467b97STreehugger Robot Assert.IsTrue(nodeTest.HasNext, "HasNext should be true here (2)."); 330*16467b97STreehugger Robot 331*16467b97STreehugger Robot // Test NextTree() 332*16467b97STreehugger Robot returnedTree = (CommonTree) nodeTest.NextTree(); 333*16467b97STreehugger Robot Assert.AreEqual(token1, returnedTree.Token, 334*16467b97STreehugger Robot "The returned token should be equal to the given token (3)."); 335*16467b97STreehugger Robot Assert.AreEqual(1, nodeTest.Count, "nodeTest should have the size 1 (4)."); 336*16467b97STreehugger Robot Assert.IsFalse(nodeTest.HasNext, "HasNext should be false here (2)."); 337*16467b97STreehugger Robot nodeTest.Reset(); 338*16467b97STreehugger Robot Assert.AreEqual(1, nodeTest.Count, "nodeTest should have the size 1 (5)."); 339*16467b97STreehugger Robot Assert.IsTrue(nodeTest.HasNext, "HasNext should be true here (3)."); 340*16467b97STreehugger Robot 341*16467b97STreehugger Robot // Test, what happens with two elements 342*16467b97STreehugger Robot IToken token2 = CreateToken(2, "test token without any real context"); 343*16467b97STreehugger Robot ITree tree2 = CreateTree(token2); 344*16467b97STreehugger Robot 345*16467b97STreehugger Robot nodeTest.Add(tree2); 346*16467b97STreehugger Robot Assert.AreEqual(2, nodeTest.Count, "nodeTest should have the size 2 (1)."); 347*16467b97STreehugger Robot Assert.IsTrue(nodeTest.HasNext, "HasNext should be true here (4)."); 348*16467b97STreehugger Robot returnedTree = (CommonTree) nodeTest.NextTree(); 349*16467b97STreehugger Robot Assert.AreEqual(token1, returnedTree.Token, 350*16467b97STreehugger Robot "The returned token should be equal to the given token (4)."); 351*16467b97STreehugger Robot Assert.AreEqual(2, nodeTest.Count, "nodeTest should have the size 2 (2)."); 352*16467b97STreehugger Robot Assert.IsTrue(nodeTest.HasNext, "HasNext should be true here (5)."); 353*16467b97STreehugger Robot returnedTree = (CommonTree) nodeTest.NextTree(); 354*16467b97STreehugger Robot Assert.AreEqual(token2, returnedTree.Token, 355*16467b97STreehugger Robot "The returned token should be equal to the given token (5)."); 356*16467b97STreehugger Robot Assert.IsFalse(nodeTest.HasNext, "HasNext should be false here (3)."); 357*16467b97STreehugger Robot 358*16467b97STreehugger Robot // Test exception 359*16467b97STreehugger Robot nodeTest.NextTree(); 360*16467b97STreehugger Robot } 361*16467b97STreehugger Robot 362*16467b97STreehugger Robot #endregion 363*16467b97STreehugger Robot 364*16467b97STreehugger Robot #endregion 365*16467b97STreehugger Robot 366*16467b97STreehugger Robot 367*16467b97STreehugger Robot #region Helper Methods 368*16467b97STreehugger Robot CreateTreeAdaptor()369*16467b97STreehugger Robot private ITreeAdaptor CreateTreeAdaptor() { 370*16467b97STreehugger Robot return new CommonTreeAdaptor(); 371*16467b97STreehugger Robot } 372*16467b97STreehugger Robot CreateTree(IToken token)373*16467b97STreehugger Robot private ITree CreateTree(IToken token) { 374*16467b97STreehugger Robot return new CommonTree(token); 375*16467b97STreehugger Robot } 376*16467b97STreehugger Robot CreateToken(int type, string text)377*16467b97STreehugger Robot private IToken CreateToken(int type, string text) { 378*16467b97STreehugger Robot return new CommonToken(type, text); 379*16467b97STreehugger Robot } 380*16467b97STreehugger Robot CreateTokenList(int count)381*16467b97STreehugger Robot private IList<IToken> CreateTokenList(int count) { 382*16467b97STreehugger Robot IList<IToken> list = new List<IToken>(); 383*16467b97STreehugger Robot for (int i = 0; i < count; i++) { 384*16467b97STreehugger Robot list.Add(new CommonToken((i+1), "test token " + (i+1).ToString() + 385*16467b97STreehugger Robot " without any real context")); 386*16467b97STreehugger Robot } 387*16467b97STreehugger Robot return list; 388*16467b97STreehugger Robot } 389*16467b97STreehugger Robot 390*16467b97STreehugger Robot #endregion 391*16467b97STreehugger Robot } 392*16467b97STreehugger Robot }