Home | History | Annotate | Download | only in test
      1 package org.antlr.runtime.test {
      2 	import flexunit.framework.TestCase;
      3 	
      4 	import org.antlr.runtime.ANTLRStringStream;
      5 	import org.antlr.runtime.CharStream;
      6 	import org.antlr.runtime.CharStreamConstants;
      7 	
      8 	public class TestANTLRStringStream extends TestCase {
      9 		
     10 		public function TestANTLRStringStream()	{
     11 			super();
     12 		}
     13 		
     14 		public function testConsume():void {
     15 			var stream:CharStream = new ANTLRStringStream("abc");
     16 			assertEquals(stream.size, 3);
     17 			assertEquals(stream.charPositionInLine, 0);
     18 			assertEquals(stream.line, 1);
     19 			assertEquals(stream.index, 0);
     20 			
     21 			for (var i:int = 0; i < stream.size; i++) {
     22 				stream.consume();
     23 				
     24 				assertEquals(stream.size, 3); // invariant
     25 				assertEquals(stream.charPositionInLine, i + 1);  
     26 				assertEquals(stream.line, 1); // invariant
     27 				assertEquals(stream.index, i + 1);
     28 			}
     29 			
     30 			// now consume past EOF for a few ticks, nothing should change
     31 			for (i = 0; i < 5; i++) {
     32 				stream.consume();
     33 				
     34 				assertEquals(stream.size, 3); // invariant
     35 				assertEquals(stream.charPositionInLine, 3);  
     36 				assertEquals(stream.line, 1); // invariant
     37 				assertEquals(stream.index, 3);
     38 			}
     39 				
     40 		}
     41 		
     42 		public function testLA():void {
     43 			var stream:CharStream = new ANTLRStringStream("abc");
     44 			assertEquals(stream.LA(-1), CharStreamConstants.EOF);  // should be EOF
     45 			assertEquals(stream.LA(0), 0); // should be 0 (undefined)
     46 			assertEquals(stream.LA(1), "a".charCodeAt(0));
     47 			assertEquals(stream.LA(2), "b".charCodeAt(0));
     48 			assertEquals(stream.LA(3), "c".charCodeAt(0));
     49 			assertEquals(stream.LA(4), CharStreamConstants.EOF);
     50 			
     51 			// now consume() one byte and run some more tests.
     52 			stream.consume();
     53 			assertEquals(stream.LA(-2), CharStreamConstants.EOF);
     54 			assertEquals(stream.LA(-1), "a".charCodeAt(0));
     55 			assertEquals(stream.LA(0), 0); // should be 0 (undefined)
     56 			assertEquals(stream.LA(1), "b".charCodeAt(0));
     57 			assertEquals(stream.LA(2), "c".charCodeAt(0));
     58 			assertEquals(stream.LA(3), CharStreamConstants.EOF);
     59 		}
     60 		
     61 		public function testReset():void {
     62 			var stream:ANTLRStringStream = new ANTLRStringStream("abc");
     63 			assertEquals(stream.size, 3);
     64 			assertEquals(stream.charPositionInLine, 0);
     65 			assertEquals(stream.line, 1);
     66 			assertEquals(stream.index, 0);
     67 			
     68 			stream.consume();
     69 			stream.consume();
     70 			
     71 			assertEquals(stream.size, 3);
     72 			assertEquals(stream.charPositionInLine, 2);
     73 			assertEquals(stream.line, 1);
     74 			assertEquals(stream.index, 2);
     75 			
     76 			stream.reset();
     77 			
     78 			assertEquals(stream.size, 3);
     79 			assertEquals(stream.charPositionInLine, 0);
     80 			assertEquals(stream.line, 1);
     81 			assertEquals(stream.index, 0);
     82 			
     83 		}
     84 		
     85 		public function testMark():void {
     86 			var stream:ANTLRStringStream = new ANTLRStringStream("a\nbc");
     87 			
     88 			// setup a couple of markers
     89 			var mark1:int = stream.mark();
     90 			stream.consume();
     91 			stream.consume();
     92 			var mark2:int = stream.mark();
     93 			stream.consume();
     94 			
     95 			// make sure we are where we expect to be
     96 			assertEquals(stream.charPositionInLine, 1);
     97 			assertEquals(stream.line, 2);
     98 			assertEquals(stream.index, 3);
     99 			
    100 			assertEquals(mark1, 1);
    101 			assertTrue(mark1 != mark2);
    102 			
    103 			stream.rewindTo(mark2);
    104 			assertEquals(stream.charPositionInLine, 0);
    105 			assertEquals(stream.line, 2);
    106 			assertEquals(stream.index, 2);
    107 			
    108 			stream.rewindTo(mark1);
    109 			assertEquals(stream.index, 0);
    110 			assertEquals(stream.charPositionInLine, 0);
    111 			assertEquals(stream.line, 1);
    112 			
    113 			// test two-level rewind
    114 			mark1 = stream.mark();
    115 			stream.consume();
    116 			stream.consume();
    117 			stream.mark();
    118 			stream.consume();
    119 			
    120 			// make sure we are where we expect to be
    121 			assertEquals(stream.charPositionInLine, 1);
    122 			assertEquals(stream.line, 2);
    123 			assertEquals(stream.index, 3);
    124 			
    125 			stream.rewindTo(mark1);
    126 			assertEquals(stream.index, 0);
    127 			assertEquals(stream.charPositionInLine, 0);
    128 			assertEquals(stream.line, 1);	
    129 		}
    130 	}
    131 }