xref: /aosp_15_r20/external/antlr/runtime/CSharp2/Sources/Antlr3.Runtime.Tests/ITreeFixture.cs (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
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 }