1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD license"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2010 Terence Parr 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Redistribution and use in source and binary forms, with or without 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * modification, are permitted provided that the following conditions 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * are met: 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. Redistributions of source code must retain the above copyright 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer. 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. Redistributions in binary form must reproduce the above copyright 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer in the 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * documentation and/or other materials provided with the distribution. 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. The name of the author may not be used to endorse or promote products 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * derived from this software without specific prior written permission. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage org.antlr.test; 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.CommonToken; 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.Token; 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.tree.CommonTree; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.tree.CommonTreeAdaptor; 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.tree.Tree; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.tree.TreeAdaptor; 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.junit.Test; 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic class TestTrees extends BaseTest { 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeAdaptor adaptor = new CommonTreeAdaptor(); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected boolean debug = false; 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver static class V extends CommonTree { 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int x; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public V(Token t) { this.token = t;} 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public V(int ttype, int x) { this.x=x; token=new CommonToken(ttype); } 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public V(int ttype, Token t, int x) { token=t; this.x=x;} 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public String toString() { return (token!=null?token.getText():"")+"<V>";} 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testSingleNode() throws Exception { 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(101)); 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(t.parent); 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, t.childIndex); 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testTwoChildrenOfNilRoot() throws Exception { 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree root_0 = (CommonTree)adaptor.nil(); 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new V(101, 2); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree u = new V(new CommonToken(102,"102")); 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.addChild(root_0, t); 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.addChild(root_0, u); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(root_0.parent); 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, root_0.childIndex); 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(0, t.childIndex); 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(1, u.childIndex); 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void test4Nodes() throws Exception { 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103) 104) 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r0 = new CommonTree(new CommonToken(101)); 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(new CommonTree(new CommonToken(102))); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.getChild(0).addChild(new CommonTree(new CommonToken(103))); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(new CommonTree(new CommonToken(104))); 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(r0.parent); 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, r0.childIndex); 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testList() throws Exception { 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(nil 101 102 103) 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r0 = new CommonTree((Token)null); 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree c0, c1, c2; 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0=new CommonTree(new CommonToken(101))); 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1=new CommonTree(new CommonToken(102))); 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2=new CommonTree(new CommonToken(103))); 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(r0.parent); 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, r0.childIndex); 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(r0, c0.parent); 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(0, c0.childIndex); 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(r0, c1.parent); 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(1, c1.childIndex); 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(r0, c2.parent); 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(2, c2.childIndex); 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testList2() throws Exception { 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Add child ^(nil 101 102 103) to root 5 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // should pull 101 102 103 directly to become 5's child list 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree root = new CommonTree(new CommonToken(5)); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // child tree 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r0 = new CommonTree((Token)null); 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree c0, c1, c2; 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0=new CommonTree(new CommonToken(101))); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1=new CommonTree(new CommonToken(102))); 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2=new CommonTree(new CommonToken(103))); 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(r0); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(root.parent); 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, root.childIndex); 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // check children of root all point at root 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(0, c0.childIndex); 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(1, c1.childIndex); 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(2, c2.childIndex); 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testAddListToExistChildren() throws Exception { 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Add child ^(nil 101 102 103) to root ^(5 6) 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // should add 101 102 103 to end of 5's child list 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree root = new CommonTree(new CommonToken(5)); 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(new CommonTree(new CommonToken(6))); 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // child tree 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r0 = new CommonTree((Token)null); 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree c0, c1, c2; 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c0=new CommonTree(new CommonToken(101))); 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c1=new CommonTree(new CommonToken(102))); 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(c2=new CommonTree(new CommonToken(103))); 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.addChild(r0); 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(root.parent); 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, root.childIndex); 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // check children of root all point at root 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(1, c0.childIndex); 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(2, c1.childIndex); 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(root, c0.parent); 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(3, c2.childIndex); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testDupTree() throws Exception { 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r0 = new CommonTree(new CommonToken(101)); 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree r1 = new CommonTree(new CommonToken(102)); 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(r1); 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(new CommonTree(new CommonToken(103))); 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Tree r2 = new CommonTree(new CommonToken(106)); 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.addChild(new CommonTree(new CommonToken(107))); 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.addChild(r2); 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(new CommonTree(new CommonToken(104))); 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.addChild(new CommonTree(new CommonToken(105))); 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree dup = (CommonTree)(new CommonTreeAdaptor()).dupTree(r0); 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertNull(dup.parent); 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(-1, dup.childIndex); 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dup.sanityCheckParentAndChildIndexes(); 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testBecomeRoot() throws Exception { 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // 5 becomes new root of ^(nil 101 102 103) 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newRoot = new CommonTree(new CommonToken(5)); 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree oldRoot = new CommonTree((Token)null); 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(101))); 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(102))); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(103))); 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeAdaptor adaptor = new CommonTreeAdaptor(); 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.becomeRoot(newRoot, oldRoot); 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes(); 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testBecomeRoot2() throws Exception { 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // 5 becomes new root of ^(101 102 103) 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newRoot = new CommonTree(new CommonToken(5)); 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree oldRoot = new CommonTree(new CommonToken(101)); 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(102))); 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(103))); 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeAdaptor adaptor = new CommonTreeAdaptor(); 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.becomeRoot(newRoot, oldRoot); 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes(); 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testBecomeRoot3() throws Exception { 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(nil 5) becomes new root of ^(nil 101 102 103) 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newRoot = new CommonTree((Token)null); 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.addChild(new CommonTree(new CommonToken(5))); 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree oldRoot = new CommonTree((Token)null); 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(101))); 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(102))); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(103))); 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeAdaptor adaptor = new CommonTreeAdaptor(); 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.becomeRoot(newRoot, oldRoot); 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes(); 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testBecomeRoot5() throws Exception { 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(nil 5) becomes new root of ^(101 102 103) 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newRoot = new CommonTree((Token)null); 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.addChild(new CommonTree(new CommonToken(5))); 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree oldRoot = new CommonTree(new CommonToken(101)); 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(102))); 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver oldRoot.addChild(new CommonTree(new CommonToken(103))); 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TreeAdaptor adaptor = new CommonTreeAdaptor(); 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.becomeRoot(newRoot, oldRoot); 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newRoot.sanityCheckParentAndChildIndexes(); 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testBecomeRoot6() throws Exception { 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // emulates construction of ^(5 6) 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree root_0 = (CommonTree)adaptor.nil(); 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree root_1 = (CommonTree)adaptor.nil(); 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_1 = (CommonTree)adaptor.becomeRoot(new CommonTree(new CommonToken(5)), root_1); 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.addChild(root_1, new CommonTree(new CommonToken(6))); 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor.addChild(root_0, root_1); 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root_0.sanityCheckParentAndChildIndexes(); 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Test replaceChildren 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceWithNoChildren() throws Exception { 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(101)); 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(5)); 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver boolean error = false; 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try { 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild); 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch (IllegalArgumentException iae) { 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver error = true; 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertTrue(error); 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceWithOneChildren() throws Exception { 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // assume token type 99 and use text 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99,"a")); 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree c0 = new CommonTree(new CommonToken(99, "b")); 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(c0); 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99, "c")); 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild); 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a c)"; 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceInMiddle() throws Exception { 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); // index 1 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 1, newChild); 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a b x d)"; 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceAtLeft() throws Exception { 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); // index 0 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChild); 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a x c d)"; 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceAtRight() throws Exception { 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); // index 2 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(2, 2, newChild); 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a b c x)"; 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceOneWithTwoAtLeft() throws Exception { 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChildren = (CommonTree)adaptor.nil(); 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"x"))); 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"y"))); 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 0, newChildren); 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a x y c d)"; 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceOneWithTwoAtRight() throws Exception { 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChildren = (CommonTree)adaptor.nil(); 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"x"))); 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"y"))); 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(2, 2, newChildren); 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a b c x y)"; 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceOneWithTwoInMiddle() throws Exception { 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChildren = (CommonTree)adaptor.nil(); 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"x"))); 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"y"))); 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 1, newChildren); 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a b x y d)"; 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceTwoWithOneAtLeft() throws Exception { 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 1, newChild); 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a x d)"; 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceTwoWithOneAtRight() throws Exception { 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(1, 2, newChild); 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a b x)"; 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceAllWithOne() throws Exception { 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChild = new CommonTree(new CommonToken(99,"x")); 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 2, newChild); 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a x)"; 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @Test public void testReplaceAllWithTwo() throws Exception { 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree t = new CommonTree(new CommonToken(99, "a")); 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "b"))); 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "c"))); 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.addChild(new CommonTree(new CommonToken(99, "d"))); 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CommonTree newChildren = (CommonTree)adaptor.nil(); 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"x"))); 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver newChildren.addChild(new CommonTree(new CommonToken(99,"y"))); 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.replaceChildren(0, 2, newChildren); 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = "(a x y)"; 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(expecting, t.toStringTree()); 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.sanityCheckParentAndChildIndexes(); 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 409