1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2005-2007 Kunle Odutola 4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met: 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. Redistributions of source code MUST RETAIN the above copyright 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer. 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. Redistributions in binary form MUST REPRODUCE the above copyright 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer in 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver the documentation and/or other materials provided with the 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver distribution. 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. The name of the author may not be used to endorse or promote products 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver derived from this software without specific prior WRITTEN permission. 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver4. Unless explicitly state otherwise, any contribution intentionally 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver submitted for inclusion in this work to the copyright owner or licensor 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shall be under the terms and conditions of this license, without any 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver additional terms or conditions. 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/ 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Tests 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using System; 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using StringBuilder = System.Text.StringBuilder; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using IToken = Antlr.Runtime.IToken; 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Token = Antlr.Runtime.TokenTypes; 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using CommonToken = Antlr.Runtime.CommonToken; 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using ITree = Antlr.Runtime.Tree.ITree; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using CommonTree = Antlr.Runtime.Tree.CommonTree; 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using CommonTreeNodeStream = Antlr.Runtime.Tree.CommonTreeNodeStream; 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using BufferedTreeNodeStream = Antlr.Runtime.Tree.BufferedTreeNodeStream; 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using MbUnit.Framework; 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [TestFixture] 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class ITreeNodeStreamFixture : TestFixtureBase 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region BufferedTreeNodeStream Tests 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testSingleNode() 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateCommonTreeNodeStream(t); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101"; 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101"; 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <summary> 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Test a tree with four nodes - ^(101 ^(102 103) 104) 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </summary> 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void test4Nodes() 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(102))); 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(104))); 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateBufferedTreeNodeStream(t); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101 102 103 104"; 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101 2 102 2 103 3 104 3"; 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testList() 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree root = new CommonTree((IToken)null); 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(102))); 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(104))); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree u = new CommonTree(new CommonToken(105)); 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(t); 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(u); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root); 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101 102 103 104 105"; 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101 2 102 2 103 3 104 3 105"; 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testFlatList() 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree root = new CommonTree((IToken)null); 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(new CommonTree(new CommonToken(101))); 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(new CommonTree(new CommonToken(102))); 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(new CommonTree(new CommonToken(103))); 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root); 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101 102 103"; 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101 102 103"; 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testListWithOneNode() 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree root = new CommonTree((IToken)null); 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver root.AddChild(new CommonTree(new CommonToken(101))); 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root); 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101"; 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101"; 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testAoverB() 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(102))); 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateBufferedTreeNodeStream(t); 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string expected = " 101 102"; 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected = " 101 2 102 3"; 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver actual = stream.ToString(); 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expected, actual); 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testLT() 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103) 104) 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(102))); 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(104))); 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateBufferedTreeNodeStream(t); 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(101, ((ITree)stream.LT(1)).Type); 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(2)).Type); 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(3)).Type); 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(4)).Type); 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(103, ((ITree)stream.LT(5)).Type); 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(6)).Type); 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(7)).Type); 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(8)).Type); 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(9)).Type); 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // check way ahead 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(100)).Type); 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testMarkRewindEntire() 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 7 real + 6 nav nodes 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(106)); 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(107))); 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(r2); 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(104))); 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(105))); 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int m = stream.Mark(); // MARK 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int k = 1; k <= 13; k++) 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume til end 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.LT(1); 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type); 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Rewind(m); // REWIND 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // consume til end again :) 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int k = 1; k <= 13; k++) 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume til end 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.LT(1); 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type); 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testMarkRewindInMiddle() 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 7 real + 6 nav nodes 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(106)); 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(107))); 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(r2); 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(104))); 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(105))); 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int k = 1; k <= 7; k++) 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume til middle 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //System.out.println(((ITree)stream.LT(1)).Type); 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int m = stream.Mark(); // MARK 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 107 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 104 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Rewind(m); // REWIND 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // now we're past rewind position 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type); 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testMarkRewindNested() 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 7 real + 6 nav nodes 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(106)); 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(107))); 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(r2); 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(104))); 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(105))); 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int m = stream.Mark(); // MARK at start 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 101 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int m2 = stream.Mark(); // MARK on 102 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 106 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Rewind(m2); // REWIND to 102 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stop at 103 and rewind to start 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Rewind(m); // REWIND to 101 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(101, ((ITree)stream.LT(1)).Type); 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testSeek() 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 7 real + 6 nav nodes 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(106)); 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(107))); 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(r2); 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(104))); 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(105))); 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 101 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Seek(7); // seek to 107 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 107 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testSeekFromStart() 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103 ^(106 107) ) 104 105) 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 7 real + 6 nav nodes 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(106)); 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(107))); 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(r2); 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(104))); 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(105))); 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Seek(7); // seek to 107 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 107 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume Up 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testPushPop() 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 9 real + 8 nav nodes 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(104)); 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(105))); 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r2); 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r3 = new CommonTree(new CommonToken(106)); 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.AddChild(new CommonTree(new CommonToken(107))); 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r3); 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(108))); 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(109))); 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = " 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3"; 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String found = stream.ToString(); 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expecting, found); 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Assume we want to hit node 107 and then "call 102" then return 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf102 = 2; 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf107 = 12; 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int k = 1; k <= indexOf107; k++) 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume til 107 node 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // CALL 102 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(indexOf102); 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // RETURN 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Pop(); 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testNestedPushPop() 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 9 real + 8 nav nodes 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(104)); 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(105))); 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r2); 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r3 = new CommonTree(new CommonToken(106)); 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.AddChild(new CommonTree(new CommonToken(107))); 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r3); 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(108))); 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(109))); 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Assume we want to hit node 107 and then "call 102", which 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // calls 104, then return 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf102 = 2; 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf107 = 12; 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int k = 1; k <= indexOf107; k++) 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume til 107 node 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // CALL 102 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(indexOf102); 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // CALL 104 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf104 = 6; 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(indexOf104); 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // RETURN (to Up node in 102 subtree) 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Pop(); 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // RETURN (to empty stack) 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Pop(); 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testPushPopFromEOF() 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // stream has 9 real + 8 nav nodes 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r1 = new CommonTree(new CommonToken(102)); 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1.AddChild(new CommonTree(new CommonToken(103))); 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r1); 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r2 = new CommonTree(new CommonToken(104)); 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2.AddChild(new CommonTree(new CommonToken(105))); 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r2); 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r3 = new CommonTree(new CommonToken(106)); 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3.AddChild(new CommonTree(new CommonToken(107))); 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(r3); 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(108))); 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r0.AddChild(new CommonTree(new CommonToken(109))); 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver while (stream.LA(1) != Token.EndOfFile) 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf102 = 2; 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int indexOf104 = 6; 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // CALL 102 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(indexOf102); 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // RETURN (to empty stack) 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Pop(); 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // CALL 104 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(indexOf104); 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 102 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type); 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume DN 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); // consume 103 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type); 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // RETURN (to empty stack) 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Pop(); 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type); 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testStackStretch() 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // make more than INITIAL_CALL_STACK_SIZE pushes 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree r0 = new CommonTree(new CommonToken(101)); 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0); 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // go 1 over initial size 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 1; i <= BufferedTreeNodeStream.INITIAL_CALL_STACK_SIZE + 1; i++) 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Push(i); 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(10, stream.Pop()); 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(9, stream.Pop()); 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region CommonTreeNodeStream Tests 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testBufferOverflow() 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringBuilder buf = new StringBuilder(); 556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringBuilder buf2 = new StringBuilder(); 557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // make ^(101 102 ... n) 558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree(new CommonToken(101)); 559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.Append(" 101"); 560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(" 101"); 561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(" "); 562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(Token.Down); 563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i <= CommonTreeNodeStream.DEFAULT_INITIAL_BUFFER_SIZE + 10; i++) 564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(102 + i))); 566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.Append(" "); 567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.Append(102 + i); 568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(" "); 569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(102 + i); 570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(" "); 572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf2.Append(Token.Up); 573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateCommonTreeNodeStream(t); 575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String expecting = buf.ToString(); 576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver String found = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); 577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expecting, found); 578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expecting = buf2.ToString(); 580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = stream.ToString(); 581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(expecting, found); 582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <summary> 585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Test what happens when tail hits the end of the buffer, but there 586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// is more room left. 587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </summary> 588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <remarks> 589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Specifically that would mean that head is not at 0 but has 590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// advanced somewhere to the middle of the lookahead buffer. 591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Use Consume() to advance N nodes into lookahead. Then use LT() 593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// to load at least INITIAL_LOOKAHEAD_BUFFER_SIZE-N nodes so the 594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// buffer has to wrap. 595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </remarks> 596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [Test] 597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void testBufferWrap() 598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int N = 10; 600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // make tree with types: 1 2 ... INITIAL_LOOKAHEAD_BUFFER_SIZE+N 601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree t = new CommonTree((IToken)null); 602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < CommonTreeNodeStream.DEFAULT_INITIAL_BUFFER_SIZE + N; i++) 603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.AddChild(new CommonTree(new CommonToken(i + 1))); 605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // move head to index N 608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITreeNodeStream stream = CreateCommonTreeNodeStream(t); 609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 1; i <= N; i++) 610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // consume N 611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree node = (ITree)stream.LT(1); 612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(i, node.Type); 613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.Consume(); 614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // now use LT to lookahead past end of buffer 617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int remaining = CommonTreeNodeStream.DEFAULT_INITIAL_BUFFER_SIZE - N; 618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int wrapBy = 4; // wrap around by 4 nodes 619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.IsTrue(wrapBy < N, "bad test code; wrapBy must be less than N"); 620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 1; i <= remaining + wrapBy; i++) 621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { // wrap past end of buffer 622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ITree node = (ITree)stream.LT(i); // look ahead to ith token 623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Assert.AreEqual(N + i, node.Type); 624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region Helper Methods 631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected ITreeNodeStream CreateBufferedTreeNodeStream(object t) 633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return new BufferedTreeNodeStream(t); 635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected ITreeNodeStream CreateCommonTreeNodeStream(object t) 638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return new CommonTreeNodeStream(t); 640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public string GetStringOfEntireStreamContentsWithNodeTypesOnly(ITreeNodeStream nodes) 643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringBuilder buf = new StringBuilder(); 645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < nodes.Count; i++) 646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver object t = nodes.LT(i + 1); 648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type = nodes.TreeAdaptor.GetType(t); 649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (!((type == Token.Down) || (type == Token.Up))) 650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.Append(" "); 652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver buf.Append(type); 653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return buf.ToString(); 656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}