1/* 2 * [The "BSD license"] 3 * Copyright (c) 2010 Terence Parr 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28package org.antlr.test; 29 30import org.antlr.runtime.tree.*; 31import org.junit.Test; 32 33import static org.junit.Assert.assertEquals; 34 35public class TestTreeIterator { 36 static final String[] tokens = new String[] { 37 "<invalid>", "<EOR>", "<DOWN>", "<UP>", "A", "B", "C", "D", "E", "F", "G" 38 }; 39 40 @Test public void testNode() { 41 TreeAdaptor adaptor = new CommonTreeAdaptor(); 42 TreeWizard wiz = new TreeWizard(adaptor, tokens); 43 CommonTree t = (CommonTree)wiz.create("A"); 44 TreeIterator it = new TreeIterator(t); 45 StringBuffer buf = toString(it); 46 String expecting = "A EOF"; 47 String found = buf.toString(); 48 assertEquals(expecting, found); 49 } 50 51 @Test public void testFlatAB() { 52 TreeAdaptor adaptor = new CommonTreeAdaptor(); 53 TreeWizard wiz = new TreeWizard(adaptor, tokens); 54 CommonTree t = (CommonTree)wiz.create("(nil A B)"); 55 TreeIterator it = new TreeIterator(t); 56 StringBuffer buf = toString(it); 57 String expecting = "nil DOWN A B UP EOF"; 58 String found = buf.toString(); 59 assertEquals(expecting, found); 60 } 61 62 @Test public void testAB() { 63 TreeAdaptor adaptor = new CommonTreeAdaptor(); 64 TreeWizard wiz = new TreeWizard(adaptor, tokens); 65 CommonTree t = (CommonTree)wiz.create("(A B)"); 66 TreeIterator it = new TreeIterator(t); 67 StringBuffer buf = toString(it); 68 String expecting = "A DOWN B UP EOF"; 69 String found = buf.toString(); 70 assertEquals(expecting, found); 71 } 72 73 @Test public void testABC() { 74 TreeAdaptor adaptor = new CommonTreeAdaptor(); 75 TreeWizard wiz = new TreeWizard(adaptor, tokens); 76 CommonTree t = (CommonTree)wiz.create("(A B C)"); 77 TreeIterator it = new TreeIterator(t); 78 StringBuffer buf = toString(it); 79 String expecting = "A DOWN B C UP EOF"; 80 String found = buf.toString(); 81 assertEquals(expecting, found); 82 } 83 84 @Test public void testVerticalList() { 85 TreeAdaptor adaptor = new CommonTreeAdaptor(); 86 TreeWizard wiz = new TreeWizard(adaptor, tokens); 87 CommonTree t = (CommonTree)wiz.create("(A (B C))"); 88 TreeIterator it = new TreeIterator(t); 89 StringBuffer buf = toString(it); 90 String expecting = "A DOWN B DOWN C UP UP EOF"; 91 String found = buf.toString(); 92 assertEquals(expecting, found); 93 } 94 95 @Test public void testComplex() { 96 TreeAdaptor adaptor = new CommonTreeAdaptor(); 97 TreeWizard wiz = new TreeWizard(adaptor, tokens); 98 CommonTree t = (CommonTree)wiz.create("(A (B (C D E) F) G)"); 99 TreeIterator it = new TreeIterator(t); 100 StringBuffer buf = toString(it); 101 String expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF"; 102 String found = buf.toString(); 103 assertEquals(expecting, found); 104 } 105 106 @Test public void testReset() { 107 TreeAdaptor adaptor = new CommonTreeAdaptor(); 108 TreeWizard wiz = new TreeWizard(adaptor, tokens); 109 CommonTree t = (CommonTree)wiz.create("(A (B (C D E) F) G)"); 110 TreeIterator it = new TreeIterator(t); 111 StringBuffer buf = toString(it); 112 String expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF"; 113 String found = buf.toString(); 114 assertEquals(expecting, found); 115 116 it.reset(); 117 buf = toString(it); 118 expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF"; 119 found = buf.toString(); 120 assertEquals(expecting, found); 121 } 122 123 protected static StringBuffer toString(TreeIterator it) { 124 StringBuffer buf = new StringBuffer(); 125 while ( it.hasNext() ) { 126 CommonTree n = (CommonTree)it.next(); 127 buf.append(n); 128 if ( it.hasNext() ) buf.append(" "); 129 } 130 return buf; 131 } 132} 133