| /* |
| * [The "BSD license"] |
| * Copyright (c) 2010 Terence Parr |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. The name of the author may not be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| package org.antlr.test; |
| |
| import org.antlr.runtime.CommonToken; |
| import org.antlr.runtime.tree.BufferedTreeNodeStream; |
| import org.antlr.runtime.tree.CommonTree; |
| import org.antlr.runtime.tree.Tree; |
| import org.antlr.runtime.tree.TreeNodeStream; |
| import org.junit.Test; |
| |
| public class TestBufferedTreeNodeStream extends TestTreeNodeStream { |
| // inherits tests; these methods make it use a new buffer |
| |
| public TreeNodeStream newStream(Object t) { |
| return new BufferedTreeNodeStream(t); |
| } |
| |
| public String toTokenTypeString(TreeNodeStream stream) { |
| return ((BufferedTreeNodeStream)stream).toTokenTypeString(); |
| } |
| |
| @Test public void testSeek() throws Exception { |
| // ^(101 ^(102 103 ^(106 107) ) 104 105) |
| // stream has 7 real + 6 nav nodes |
| // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF |
| Tree r0 = new CommonTree(new CommonToken(101)); |
| Tree r1 = new CommonTree(new CommonToken(102)); |
| r0.addChild(r1); |
| r1.addChild(new CommonTree(new CommonToken(103))); |
| Tree r2 = new CommonTree(new CommonToken(106)); |
| r2.addChild(new CommonTree(new CommonToken(107))); |
| r1.addChild(r2); |
| r0.addChild(new CommonTree(new CommonToken(104))); |
| r0.addChild(new CommonTree(new CommonToken(105))); |
| |
| TreeNodeStream stream = newStream(r0); |
| stream.consume(); // consume 101 |
| stream.consume(); // consume DN |
| stream.consume(); // consume 102 |
| stream.seek(7); // seek to 107 |
| assertEquals(107, ((Tree)stream.LT(1)).getType()); |
| stream.consume(); // consume 107 |
| stream.consume(); // consume UP |
| stream.consume(); // consume UP |
| assertEquals(104, ((Tree)stream.LT(1)).getType()); |
| } |
| } |