1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage org.antlr.runtime.test { 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import flexunit.framework.TestCase; 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import org.antlr.runtime.ANTLRStringStream; 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import org.antlr.runtime.CharStream; 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import org.antlr.runtime.CharStreamConstants; 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class TestANTLRStringStream extends TestCase { 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public function TestANTLRStringStream() { 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super(); 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public function testConsume():void { 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var stream:CharStream = new ANTLRStringStream("abc"); 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 0); 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (var i:int = 0; i < stream.size; i++) { 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); // invariant 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, i + 1); 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); // invariant 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, i + 1); 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // now consume past EOF for a few ticks, nothing should change 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (i = 0; i < 5; i++) { 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); // invariant 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 3); 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); // invariant 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 3); 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public function testLA():void { 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var stream:CharStream = new ANTLRStringStream("abc"); 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(-1), CharStreamConstants.EOF); // should be EOF 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(0), 0); // should be 0 (undefined) 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(1), "a".charCodeAt(0)); 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(2), "b".charCodeAt(0)); 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(3), "c".charCodeAt(0)); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(4), CharStreamConstants.EOF); 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // now consume() one byte and run some more tests. 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(-2), CharStreamConstants.EOF); 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(-1), "a".charCodeAt(0)); 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(0), 0); // should be 0 (undefined) 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(1), "b".charCodeAt(0)); 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(2), "c".charCodeAt(0)); 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.LA(3), CharStreamConstants.EOF); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public function testReset():void { 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var stream:ANTLRStringStream = new ANTLRStringStream("abc"); 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 0); 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 2); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 2); 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.reset(); 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.size, 3); 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 0); 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public function testMark():void { 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var stream:ANTLRStringStream = new ANTLRStringStream("a\nbc"); 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // setup a couple of markers 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var mark1:int = stream.mark(); 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var mark2:int = stream.mark(); 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // make sure we are where we expect to be 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 1); 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 2); 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 3); 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(mark1, 1); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertTrue(mark1 != mark2); 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewindTo(mark2); 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 2); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 2); 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewindTo(mark1); 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 0); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // test two-level rewind 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver mark1 = stream.mark(); 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.mark(); 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.consume(); 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // make sure we are where we expect to be 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 1); 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 2); 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 3); 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver stream.rewindTo(mark1); 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.index, 0); 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.charPositionInLine, 0); 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assertEquals(stream.line, 1); 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}