1   package org.codehaus.groovy.syntax.lexer;
2   
3   import groovy.util.GroovyTestCase;
4   
5   import org.codehaus.groovy.syntax.ReadException;
6   
7   public class AbstractCharStreamTest
8       extends GroovyTestCase
9   {
10      public static class MockCharStream
11          extends AbstractCharStream
12      {
13          private int cur;
14          private String text;
15  
16          public MockCharStream(String text)
17          {
18              this.text = text;
19              this.cur  = 0;
20          }
21  
22          public MockCharStream(String text,
23                                String description)
24          {
25              super( description );
26              this.text = text;
27              this.cur  = 0;
28          }
29  
30          public char consume()
31              throws ReadException
32          {
33              if ( this.cur >= this.text.length() )
34              {
35                  return (char) -1;
36              }
37  
38              char c = this.text.charAt( this.cur );
39  
40              ++this.cur;
41  
42              return c;
43          }
44  
45          public void close()
46              throws ReadException
47          {
48  
49          }
50      }
51  
52      public void testConstruct_Default()
53      {
54          assertEquals( "<unknown>",
55                        new MockCharStream( "cheddar" ).getDescription() );
56      }
57  
58      public void testConstruct_WithDescription()
59      {
60          assertEquals( "/path/to/Cheddar.groovy",
61                        new MockCharStream( "cheddar",
62                                            "/path/to/Cheddar.groovy" ).getDescription() );
63      }
64  
65      public void testconsume()
66          throws Exception
67      {
68          MockCharStream in = new MockCharStream( "cheddar" );
69  
70          assertEquals( 'c',
71                        in.consume() );
72  
73          assertEquals( 'h',
74                        in.consume() );
75  
76          assertEquals( 'e',
77                        in.consume() );
78  
79          assertEquals( 'd',
80                        in.consume() );
81  
82          assertEquals( 'd',
83                        in.consume() );
84  
85          assertEquals( 'a',
86                        in.consume() );
87  
88          assertEquals( 'r',
89                        in.consume() );
90  
91          assertEquals( (char) -1,
92                        in.consume() );
93      }
94  
95      public void testConsume()
96          throws Exception
97      {
98          MockCharStream in = new MockCharStream( "cheddar" );
99  
100         assertEquals( 'c',
101                       in.consume() );
102 
103         assertEquals( 'h',
104                       in.consume() );
105 
106         assertEquals( 'e',
107                       in.consume() );
108         
109         assertEquals( 'd',
110                       in.consume() );
111 
112         assertEquals( 'd',
113                       in.consume() );
114         
115         assertEquals( 'a',
116                       in.consume() );
117 
118         assertEquals( 'r',
119                       in.consume() );
120 
121         assertEquals( (char) -1,
122                       in.consume() );
123         
124     }
125 
126     public void testConsumeAtEnd()
127         throws Exception
128     {
129         MockCharStream in = new MockCharStream( "" );
130 
131         assertEquals( (char) -1,
132                       in.consume() );
133 
134         assertEquals( (char) -1,
135                       in.consume() );
136     }
137 }