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 namespace Antlr.Runtime.Tests 36*16467b97STreehugger Robot { 37*16467b97STreehugger Robot using System; 38*16467b97STreehugger Robot using StringBuilder = System.Text.StringBuilder; 39*16467b97STreehugger Robot 40*16467b97STreehugger Robot using IToken = Antlr.Runtime.IToken; 41*16467b97STreehugger Robot using CommonToken = Antlr.Runtime.CommonToken; 42*16467b97STreehugger Robot using ITree = Antlr.Runtime.Tree.ITree; 43*16467b97STreehugger Robot using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; 44*16467b97STreehugger Robot using CommonTree = Antlr.Runtime.Tree.CommonTree; 45*16467b97STreehugger Robot using CommonTreeAdaptor = Antlr.Runtime.Tree.CommonTreeAdaptor; 46*16467b97STreehugger Robot 47*16467b97STreehugger Robot using MbUnit.Framework; 48*16467b97STreehugger Robot 49*16467b97STreehugger Robot [TestFixture] 50*16467b97STreehugger Robot public class ITreeFixture : TestFixtureBase 51*16467b97STreehugger Robot { 52*16467b97STreehugger Robot #region CommonTree Tests 53*16467b97STreehugger Robot 54*16467b97STreehugger Robot [Test] testSingleNode()55*16467b97STreehugger Robot public void testSingleNode() 56*16467b97STreehugger Robot { 57*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(101)); 58*16467b97STreehugger Robot Assert.IsNull(t.Parent); 59*16467b97STreehugger Robot Assert.AreEqual(-1, t.ChildIndex); 60*16467b97STreehugger Robot } 61*16467b97STreehugger Robot 62*16467b97STreehugger Robot [Test] test4Nodes()63*16467b97STreehugger Robot public void test4Nodes() 64*16467b97STreehugger Robot { 65*16467b97STreehugger Robot // ^(101 ^(102 103) 104) 66*16467b97STreehugger Robot CommonTree r0 = new CommonTree(new CommonToken(101)); 67*16467b97STreehugger Robot r0.AddChild(new CommonTree(new CommonToken(102))); 68*16467b97STreehugger Robot r0.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); 69*16467b97STreehugger Robot r0.AddChild(new CommonTree(new CommonToken(104))); 70*16467b97STreehugger Robot 71*16467b97STreehugger Robot Assert.IsNull(r0.Parent); 72*16467b97STreehugger Robot Assert.AreEqual(-1, r0.ChildIndex); 73*16467b97STreehugger Robot } 74*16467b97STreehugger Robot 75*16467b97STreehugger Robot [Test] testList()76*16467b97STreehugger Robot public void testList() 77*16467b97STreehugger Robot { 78*16467b97STreehugger Robot // ^(nil 101 102 103) 79*16467b97STreehugger Robot CommonTree r0 = new CommonTree((IToken)null); 80*16467b97STreehugger Robot CommonTree c0, c1, c2; 81*16467b97STreehugger Robot r0.AddChild(c0 = new CommonTree(new CommonToken(101))); 82*16467b97STreehugger Robot r0.AddChild(c1 = new CommonTree(new CommonToken(102))); 83*16467b97STreehugger Robot r0.AddChild(c2 = new CommonTree(new CommonToken(103))); 84*16467b97STreehugger Robot 85*16467b97STreehugger Robot Assert.IsNull(r0.Parent); 86*16467b97STreehugger Robot Assert.AreEqual(-1, r0.ChildIndex); 87*16467b97STreehugger Robot Assert.AreEqual(r0, c0.Parent); 88*16467b97STreehugger Robot Assert.AreEqual(0, c0.ChildIndex); 89*16467b97STreehugger Robot Assert.AreEqual(r0, c1.Parent); 90*16467b97STreehugger Robot Assert.AreEqual(1, c1.ChildIndex); 91*16467b97STreehugger Robot Assert.AreEqual(r0, c2.Parent); 92*16467b97STreehugger Robot Assert.AreEqual(2, c2.ChildIndex); 93*16467b97STreehugger Robot } 94*16467b97STreehugger Robot 95*16467b97STreehugger Robot [Test] testList2()96*16467b97STreehugger Robot public void testList2() 97*16467b97STreehugger Robot { 98*16467b97STreehugger Robot // Add child ^(nil 101 102 103) to root 5 99*16467b97STreehugger Robot // should pull 101 102 103 directly to become 5's child list 100*16467b97STreehugger Robot CommonTree root = new CommonTree(new CommonToken(5)); 101*16467b97STreehugger Robot 102*16467b97STreehugger Robot // child tree 103*16467b97STreehugger Robot CommonTree r0 = new CommonTree((IToken)null); 104*16467b97STreehugger Robot CommonTree c0, c1, c2; 105*16467b97STreehugger Robot r0.AddChild(c0 = new CommonTree(new CommonToken(101))); 106*16467b97STreehugger Robot r0.AddChild(c1 = new CommonTree(new CommonToken(102))); 107*16467b97STreehugger Robot r0.AddChild(c2 = new CommonTree(new CommonToken(103))); 108*16467b97STreehugger Robot 109*16467b97STreehugger Robot root.AddChild(r0); 110*16467b97STreehugger Robot 111*16467b97STreehugger Robot Assert.IsNull(root.Parent); 112*16467b97STreehugger Robot Assert.AreEqual(-1, root.ChildIndex); 113*16467b97STreehugger Robot // check children of root all point at root 114*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 115*16467b97STreehugger Robot Assert.AreEqual(0, c0.ChildIndex); 116*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 117*16467b97STreehugger Robot Assert.AreEqual(1, c1.ChildIndex); 118*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 119*16467b97STreehugger Robot Assert.AreEqual(2, c2.ChildIndex); 120*16467b97STreehugger Robot } 121*16467b97STreehugger Robot 122*16467b97STreehugger Robot [Test] testAddListToExistChildren()123*16467b97STreehugger Robot public void testAddListToExistChildren() 124*16467b97STreehugger Robot { 125*16467b97STreehugger Robot // Add child ^(nil 101 102 103) to root ^(5 6) 126*16467b97STreehugger Robot // should add 101 102 103 to end of 5's child list 127*16467b97STreehugger Robot CommonTree root = new CommonTree(new CommonToken(5)); 128*16467b97STreehugger Robot root.AddChild(new CommonTree(new CommonToken(6))); 129*16467b97STreehugger Robot 130*16467b97STreehugger Robot // child tree 131*16467b97STreehugger Robot CommonTree r0 = new CommonTree((IToken)null); 132*16467b97STreehugger Robot CommonTree c0, c1, c2; 133*16467b97STreehugger Robot r0.AddChild(c0 = new CommonTree(new CommonToken(101))); 134*16467b97STreehugger Robot r0.AddChild(c1 = new CommonTree(new CommonToken(102))); 135*16467b97STreehugger Robot r0.AddChild(c2 = new CommonTree(new CommonToken(103))); 136*16467b97STreehugger Robot 137*16467b97STreehugger Robot root.AddChild(r0); 138*16467b97STreehugger Robot 139*16467b97STreehugger Robot Assert.IsNull(root.Parent); 140*16467b97STreehugger Robot Assert.AreEqual(-1, root.ChildIndex); 141*16467b97STreehugger Robot // check children of root all point at root 142*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 143*16467b97STreehugger Robot Assert.AreEqual(1, c0.ChildIndex); 144*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 145*16467b97STreehugger Robot Assert.AreEqual(2, c1.ChildIndex); 146*16467b97STreehugger Robot Assert.AreEqual(root, c0.Parent); 147*16467b97STreehugger Robot Assert.AreEqual(3, c2.ChildIndex); 148*16467b97STreehugger Robot } 149*16467b97STreehugger Robot 150*16467b97STreehugger Robot [Test] testDupTree()151*16467b97STreehugger Robot public void testDupTree() 152*16467b97STreehugger Robot { 153*16467b97STreehugger Robot // ^(101 ^(102 103 ^(106 107) ) 104 105) 154*16467b97STreehugger Robot CommonTree r0 = new CommonTree(new CommonToken(101)); 155*16467b97STreehugger Robot CommonTree r1 = new CommonTree(new CommonToken(102)); 156*16467b97STreehugger Robot r0.AddChild(r1); 157*16467b97STreehugger Robot r1.AddChild(new CommonTree(new CommonToken(103))); 158*16467b97STreehugger Robot ITree r2 = new CommonTree(new CommonToken(106)); 159*16467b97STreehugger Robot r2.AddChild(new CommonTree(new CommonToken(107))); 160*16467b97STreehugger Robot r1.AddChild(r2); 161*16467b97STreehugger Robot r0.AddChild(new CommonTree(new CommonToken(104))); 162*16467b97STreehugger Robot r0.AddChild(new CommonTree(new CommonToken(105))); 163*16467b97STreehugger Robot 164*16467b97STreehugger Robot CommonTree dup = (CommonTree)(new CommonTreeAdaptor()).DupTree(r0); 165*16467b97STreehugger Robot 166*16467b97STreehugger Robot Assert.IsNull(dup.Parent); 167*16467b97STreehugger Robot Assert.AreEqual(-1, dup.ChildIndex); 168*16467b97STreehugger Robot dup.SanityCheckParentAndChildIndexes(); 169*16467b97STreehugger Robot } 170*16467b97STreehugger Robot 171*16467b97STreehugger Robot [Test] testBecomeRoot()172*16467b97STreehugger Robot public void testBecomeRoot() 173*16467b97STreehugger Robot { 174*16467b97STreehugger Robot // 5 becomes new root of ^(nil 101 102 103) 175*16467b97STreehugger Robot CommonTree newRoot = new CommonTree(new CommonToken(5)); 176*16467b97STreehugger Robot 177*16467b97STreehugger Robot CommonTree oldRoot = new CommonTree((IToken)null); 178*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(101))); 179*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(102))); 180*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(103))); 181*16467b97STreehugger Robot 182*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 183*16467b97STreehugger Robot adaptor.BecomeRoot(newRoot, oldRoot); 184*16467b97STreehugger Robot newRoot.SanityCheckParentAndChildIndexes(); 185*16467b97STreehugger Robot } 186*16467b97STreehugger Robot 187*16467b97STreehugger Robot [Test] testBecomeRoot2()188*16467b97STreehugger Robot public void testBecomeRoot2() 189*16467b97STreehugger Robot { 190*16467b97STreehugger Robot // 5 becomes new root of ^(101 102 103) 191*16467b97STreehugger Robot CommonTree newRoot = new CommonTree(new CommonToken(5)); 192*16467b97STreehugger Robot 193*16467b97STreehugger Robot CommonTree oldRoot = new CommonTree(new CommonToken(101)); 194*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(102))); 195*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(103))); 196*16467b97STreehugger Robot 197*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 198*16467b97STreehugger Robot adaptor.BecomeRoot(newRoot, oldRoot); 199*16467b97STreehugger Robot newRoot.SanityCheckParentAndChildIndexes(); 200*16467b97STreehugger Robot } 201*16467b97STreehugger Robot 202*16467b97STreehugger Robot [Test] testBecomeRoot3()203*16467b97STreehugger Robot public void testBecomeRoot3() 204*16467b97STreehugger Robot { 205*16467b97STreehugger Robot // ^(nil 5) becomes new root of ^(nil 101 102 103) 206*16467b97STreehugger Robot CommonTree newRoot = new CommonTree((IToken)null); 207*16467b97STreehugger Robot newRoot.AddChild(new CommonTree(new CommonToken(5))); 208*16467b97STreehugger Robot 209*16467b97STreehugger Robot CommonTree oldRoot = new CommonTree((IToken)null); 210*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(101))); 211*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(102))); 212*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(103))); 213*16467b97STreehugger Robot 214*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 215*16467b97STreehugger Robot adaptor.BecomeRoot(newRoot, oldRoot); 216*16467b97STreehugger Robot newRoot.SanityCheckParentAndChildIndexes(); 217*16467b97STreehugger Robot } 218*16467b97STreehugger Robot 219*16467b97STreehugger Robot [Test] testBecomeRoot5()220*16467b97STreehugger Robot public void testBecomeRoot5() 221*16467b97STreehugger Robot { 222*16467b97STreehugger Robot // ^(nil 5) becomes new root of ^(101 102 103) 223*16467b97STreehugger Robot CommonTree newRoot = new CommonTree((IToken)null); 224*16467b97STreehugger Robot newRoot.AddChild(new CommonTree(new CommonToken(5))); 225*16467b97STreehugger Robot 226*16467b97STreehugger Robot CommonTree oldRoot = new CommonTree(new CommonToken(101)); 227*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(102))); 228*16467b97STreehugger Robot oldRoot.AddChild(new CommonTree(new CommonToken(103))); 229*16467b97STreehugger Robot 230*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 231*16467b97STreehugger Robot adaptor.BecomeRoot(newRoot, oldRoot); 232*16467b97STreehugger Robot newRoot.SanityCheckParentAndChildIndexes(); 233*16467b97STreehugger Robot } 234*16467b97STreehugger Robot 235*16467b97STreehugger Robot [Test] testBecomeRoot6()236*16467b97STreehugger Robot public void testBecomeRoot6() 237*16467b97STreehugger Robot { 238*16467b97STreehugger Robot // emulates construction of ^(5 6) 239*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 240*16467b97STreehugger Robot CommonTree root_0 = (CommonTree)adaptor.Nil(); 241*16467b97STreehugger Robot CommonTree root_1 = (CommonTree)adaptor.Nil(); 242*16467b97STreehugger Robot root_1 = (CommonTree)adaptor.BecomeRoot(new CommonTree(new CommonToken(5)), root_1); 243*16467b97STreehugger Robot 244*16467b97STreehugger Robot adaptor.AddChild(root_1, new CommonTree(new CommonToken(6))); 245*16467b97STreehugger Robot 246*16467b97STreehugger Robot adaptor.AddChild(root_0, root_1); 247*16467b97STreehugger Robot 248*16467b97STreehugger Robot root_0.SanityCheckParentAndChildIndexes(); 249*16467b97STreehugger Robot } 250*16467b97STreehugger Robot 251*16467b97STreehugger Robot // Test replaceChildren 252*16467b97STreehugger Robot 253*16467b97STreehugger Robot [Test] testReplaceWithNoChildren()254*16467b97STreehugger Robot public void testReplaceWithNoChildren() 255*16467b97STreehugger Robot { 256*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(101)); 257*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(5)); 258*16467b97STreehugger Robot bool error = false; 259*16467b97STreehugger Robot try 260*16467b97STreehugger Robot { 261*16467b97STreehugger Robot t.ReplaceChildren(0, 0, newChild); 262*16467b97STreehugger Robot } 263*16467b97STreehugger Robot catch (Exception) 264*16467b97STreehugger Robot { 265*16467b97STreehugger Robot error = true; 266*16467b97STreehugger Robot } 267*16467b97STreehugger Robot Assert.IsTrue(error); 268*16467b97STreehugger Robot } 269*16467b97STreehugger Robot 270*16467b97STreehugger Robot [Test] testReplaceWithOneChildren()271*16467b97STreehugger Robot public void testReplaceWithOneChildren() 272*16467b97STreehugger Robot { 273*16467b97STreehugger Robot // assume token type 99 and use text 274*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 275*16467b97STreehugger Robot CommonTree c0 = new CommonTree(new CommonToken(99, "b")); 276*16467b97STreehugger Robot t.AddChild(c0); 277*16467b97STreehugger Robot 278*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "c")); 279*16467b97STreehugger Robot t.ReplaceChildren(0, 0, newChild); 280*16467b97STreehugger Robot String expected = "(a c)"; 281*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 282*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 283*16467b97STreehugger Robot } 284*16467b97STreehugger Robot 285*16467b97STreehugger Robot [Test] testReplaceInMiddle()286*16467b97STreehugger Robot public void testReplaceInMiddle() 287*16467b97STreehugger Robot { 288*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 289*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 290*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); // index 1 291*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 292*16467b97STreehugger Robot 293*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 294*16467b97STreehugger Robot t.ReplaceChildren(1, 1, newChild); 295*16467b97STreehugger Robot String expected = "(a b x d)"; 296*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 297*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 298*16467b97STreehugger Robot } 299*16467b97STreehugger Robot 300*16467b97STreehugger Robot [Test] testReplaceAtLeft()301*16467b97STreehugger Robot public void testReplaceAtLeft() 302*16467b97STreehugger Robot { 303*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 304*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); // index 0 305*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 306*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 307*16467b97STreehugger Robot 308*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 309*16467b97STreehugger Robot t.ReplaceChildren(0, 0, newChild); 310*16467b97STreehugger Robot String expected = "(a x c d)"; 311*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 312*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 313*16467b97STreehugger Robot } 314*16467b97STreehugger Robot 315*16467b97STreehugger Robot [Test] testReplaceAtRight()316*16467b97STreehugger Robot public void testReplaceAtRight() 317*16467b97STreehugger Robot { 318*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 319*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 320*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 321*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); // index 2 322*16467b97STreehugger Robot 323*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 324*16467b97STreehugger Robot t.ReplaceChildren(2, 2, newChild); 325*16467b97STreehugger Robot String expected = "(a b c x)"; 326*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 327*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 328*16467b97STreehugger Robot } 329*16467b97STreehugger Robot 330*16467b97STreehugger Robot [Test] testReplaceOneWithTwoAtLeft()331*16467b97STreehugger Robot public void testReplaceOneWithTwoAtLeft() 332*16467b97STreehugger Robot { 333*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 334*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 335*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 336*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 337*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 338*16467b97STreehugger Robot 339*16467b97STreehugger Robot CommonTree newChildren = (CommonTree)adaptor.Nil(); 340*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); 341*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); 342*16467b97STreehugger Robot 343*16467b97STreehugger Robot t.ReplaceChildren(0, 0, newChildren); 344*16467b97STreehugger Robot String expected = "(a x y c d)"; 345*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 346*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 347*16467b97STreehugger Robot } 348*16467b97STreehugger Robot 349*16467b97STreehugger Robot [Test] testReplaceOneWithTwoAtRight()350*16467b97STreehugger Robot public void testReplaceOneWithTwoAtRight() 351*16467b97STreehugger Robot { 352*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 353*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 354*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 355*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 356*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 357*16467b97STreehugger Robot 358*16467b97STreehugger Robot CommonTree newChildren = (CommonTree)adaptor.Nil(); 359*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); 360*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); 361*16467b97STreehugger Robot 362*16467b97STreehugger Robot t.ReplaceChildren(2, 2, newChildren); 363*16467b97STreehugger Robot String expected = "(a b c x y)"; 364*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 365*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 366*16467b97STreehugger Robot } 367*16467b97STreehugger Robot 368*16467b97STreehugger Robot [Test] testReplaceOneWithTwoInMiddle()369*16467b97STreehugger Robot public void testReplaceOneWithTwoInMiddle() 370*16467b97STreehugger Robot { 371*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 372*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 373*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 374*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 375*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 376*16467b97STreehugger Robot 377*16467b97STreehugger Robot CommonTree newChildren = (CommonTree)adaptor.Nil(); 378*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); 379*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); 380*16467b97STreehugger Robot 381*16467b97STreehugger Robot t.ReplaceChildren(1, 1, newChildren); 382*16467b97STreehugger Robot String expected = "(a b x y d)"; 383*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 384*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 385*16467b97STreehugger Robot } 386*16467b97STreehugger Robot 387*16467b97STreehugger Robot [Test] testReplaceTwoWithOneAtLeft()388*16467b97STreehugger Robot public void testReplaceTwoWithOneAtLeft() 389*16467b97STreehugger Robot { 390*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 391*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 392*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 393*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 394*16467b97STreehugger Robot 395*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 396*16467b97STreehugger Robot 397*16467b97STreehugger Robot t.ReplaceChildren(0, 1, newChild); 398*16467b97STreehugger Robot String expected = "(a x d)"; 399*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 400*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 401*16467b97STreehugger Robot } 402*16467b97STreehugger Robot 403*16467b97STreehugger Robot [Test] testReplaceTwoWithOneAtRight()404*16467b97STreehugger Robot public void testReplaceTwoWithOneAtRight() 405*16467b97STreehugger Robot { 406*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 407*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 408*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 409*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 410*16467b97STreehugger Robot 411*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 412*16467b97STreehugger Robot 413*16467b97STreehugger Robot t.ReplaceChildren(1, 2, newChild); 414*16467b97STreehugger Robot String expected = "(a b x)"; 415*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 416*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 417*16467b97STreehugger Robot } 418*16467b97STreehugger Robot 419*16467b97STreehugger Robot [Test] testReplaceAllWithOne()420*16467b97STreehugger Robot public void testReplaceAllWithOne() 421*16467b97STreehugger Robot { 422*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 423*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 424*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 425*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 426*16467b97STreehugger Robot 427*16467b97STreehugger Robot CommonTree newChild = new CommonTree(new CommonToken(99, "x")); 428*16467b97STreehugger Robot 429*16467b97STreehugger Robot t.ReplaceChildren(0, 2, newChild); 430*16467b97STreehugger Robot String expected = "(a x)"; 431*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 432*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 433*16467b97STreehugger Robot } 434*16467b97STreehugger Robot 435*16467b97STreehugger Robot [Test] testReplaceAllWithTwo()436*16467b97STreehugger Robot public void testReplaceAllWithTwo() 437*16467b97STreehugger Robot { 438*16467b97STreehugger Robot ITreeAdaptor adaptor = new CommonTreeAdaptor(); 439*16467b97STreehugger Robot CommonTree t = new CommonTree(new CommonToken(99, "a")); 440*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "b"))); 441*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "c"))); 442*16467b97STreehugger Robot t.AddChild(new CommonTree(new CommonToken(99, "d"))); 443*16467b97STreehugger Robot 444*16467b97STreehugger Robot CommonTree newChildren = (CommonTree)adaptor.Nil(); 445*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); 446*16467b97STreehugger Robot newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); 447*16467b97STreehugger Robot 448*16467b97STreehugger Robot t.ReplaceChildren(0, 2, newChildren); 449*16467b97STreehugger Robot String expected = "(a x y)"; 450*16467b97STreehugger Robot Assert.AreEqual(expected, t.ToStringTree()); 451*16467b97STreehugger Robot t.SanityCheckParentAndChildIndexes(); 452*16467b97STreehugger Robot } 453*16467b97STreehugger Robot 454*16467b97STreehugger Robot #endregion 455*16467b97STreehugger Robot } 456*16467b97STreehugger Robot }