1   ////////////////////////////////////////////////////////////////////////////////
2   // MillScript: an Open Spice interpreter and batch website creation tool
3   // Copyright (C) 2004 Kevin Rogers
4   //
5   // This file is part of MillScript.
6   //
7   // MillScript is free software; you can redistribute it and/or modify it under
8   // the terms of the GNU General Public License as published by the Free
9   // Software Foundation; either version 2 of the License, or (at your option)
10  // any later version.
11  //
12  // MillScript is distributed in the hope that it will be useful, but WITHOUT
13  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  // more details.
16  //
17  // You should have received a copy of the GNU General Public License along with
18  // MillScript; if not, write to the Free Software Foundation, Inc., 59 Temple
19  // Place, Suite 330, Boston, MA  02111-1307  USA
20  ////////////////////////////////////////////////////////////////////////////////
21  package org.millscript.tools;
22  
23  import java.io.IOException;
24  import java.io.StringReader;
25  
26  import junit.framework.TestCase;
27  
28  /**
29   * @
30   */
31  public class PushbackLinenumberReaderTest extends TestCase {
32  
33      /**
34       * Constructor for PushbackLinenumberReaderTest.
35       * @param arg0
36       */
37      public PushbackLinenumberReaderTest(String arg0) {
38          super( arg0 );
39      }
40  
41      public void testClose() {
42      }
43  
44      /*
45       * Test for int getLineNumber()
46       */
47      public void testGetLineNumber() {
48          final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
49              new StringReader( "hello\nthere\rThis\r\nis\n\ra test\n string" ),
50              8,
51              0
52          );
53          // Check line feed read
54          try {
55              assertEquals( 1, PLR.getLineNumber() );
56              int ch;
57              StringBuffer token = new StringBuffer();
58              while( ( ch = PLR.read() ) != '\n' ) {
59                  token.append( (char) ch );
60              }
61              assertEquals( "hello", token.toString() );
62              assertEquals( 2, PLR.getLineNumber() );
63          } catch ( IOException ex ) {
64              System.err.println( ex.getMessage() );
65          }
66          // Check carriage return read
67          // (Should be translated to a line feed)
68          try {
69              assertEquals( 2, PLR.getLineNumber() );
70              int ch;
71              StringBuffer token = new StringBuffer();
72              while( ( ch = PLR.read() ) != '\n' ) {
73                  token.append( (char) ch );
74              }
75              assertEquals( "there", token.toString() );
76              assertEquals( 3, PLR.getLineNumber() );
77          } catch ( IOException ex ) {
78              System.err.println( ex.getMessage() );
79          }
80          // Check Windows line thingy read
81          // (Should be translated to a single line feed)
82          try {
83              assertEquals( 3, PLR.getLineNumber() );
84              int ch;
85              StringBuffer token = new StringBuffer();
86              while( ( ch = PLR.read() ) != '\n' ) {
87                  token.append( (char) ch );
88              }
89              assertEquals( "This", token.toString() );
90              assertEquals( 4, PLR.getLineNumber() );
91          } catch ( IOException ex ) {
92              System.err.println( ex.getMessage() );
93          }
94          // Check a backwards Windows line thingy read
95          // (Should be translated into two separate line feeds)
96          try {
97              assertEquals( 4, PLR.getLineNumber() );
98              int ch;
99              // Read up to the first backward char
100             StringBuffer token = new StringBuffer();
101             while( ( ch = PLR.read() ) != '\n' ) {
102                 token.append( (char) ch );
103             }
104             assertEquals( "is", token.toString() );
105             assertEquals( 5, PLR.getLineNumber() );
106             // reset the token buffer
107             token.setLength( 0 );
108             // now read the second backward char.
109             // the token should remain empty
110             while( ( ch = PLR.read() ) != '\n' ) {
111                 token.append( (char) ch );
112             }
113             assertEquals( "", token.toString() );
114             assertEquals( 6, PLR.getLineNumber() );
115         } catch ( IOException ex ) {
116             System.err.println( ex.getMessage() );
117         }
118         // A few last checks, no particular purpose
119         try {
120             assertEquals( 6, PLR.getLineNumber() );
121             int ch;
122             StringBuffer token = new StringBuffer();
123             while( ( ch = PLR.read() ) != '\n' ) {
124                 token.append( (char) ch );
125             }
126             assertEquals( "a test", token.toString() );
127             assertEquals( 7, PLR.getLineNumber() );
128             token.setLength( 0 );
129             while( ( ch = PLR.read() ) != '\n' && ch != -1 ) {
130                 token.append( (char) ch );
131             }
132             assertEquals( " string", token.toString() );
133             assertEquals( 7, PLR.getLineNumber() );
134         } catch ( IOException ex ) {
135             System.err.println( ex.getMessage() );
136         }
137     }
138 
139     public void testMark() {
140     }
141 
142     public void testMarkSupported() {
143     }
144 
145     /*
146      * Test for int read()
147      */
148     public void testRead() {
149         final PushbackLinenumberReader PLR = new PushbackLinenumberReader( new StringReader( "hello" ) );
150         StringBuffer buffer = new StringBuffer();
151         int ch;
152         try {
153             while( ( ch = PLR.read() ) != -1 ) {
154                 buffer.append( (char) ch );
155             }
156             assertEquals( "hello", buffer.toString() );
157         } catch ( IOException ex ) {
158             System.err.println( ex.getMessage() );
159         }
160     }
161 
162     /*
163      * Test for int read(char[])
164      */
165     public void testReadcharArray() {
166     }
167 
168     /*
169      * Test for int read(char[], int, int)
170      */
171     public void testReadcharArrayintint() {
172         final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
173             new StringReader( "hello there. This is a test string" ),
174             8,
175             0
176         );
177         // Try to read into a buffer shorter than the readers buffer.
178         char[] buffer = new char[5];
179         try {
180             PLR.read( buffer, 0, 5 );
181             assertEquals( "hello", new String( buffer ) );
182         } catch ( IOException ex ) {
183             System.err.println( ex.getMessage() );
184         }
185         // Now try to read into a buffer a few times longer than the readers
186         // buffer.
187         char[] newbuffer = new char[25];
188         // Copy the previously read characters into the new buffer
189         System.arraycopy( buffer, 0, newbuffer, 0, 5 );
190         try {
191             PLR.read( newbuffer, 5, 20 );
192             assertEquals( "hello there. This is a te", new String( newbuffer ) );
193         } catch ( IOException ex ) {
194             System.err.println( ex.getMessage() );
195         }
196         // Now try to read past the end of file.
197         char[] lastbuffer = new char[25];
198         try {
199             PLR.read( lastbuffer, 0, 25 );
200             // We have to remember the trim() here as otherwise we get a String
201             // with 0 characters at the end.
202             assertEquals( "st string", new String( lastbuffer ).trim() );
203         } catch ( IOException ex ) {
204             System.err.println( ex.getMessage() );
205         }
206     }
207 
208     /*
209      * Test for String readLine()
210      */
211     public void testReadLine() {
212         final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
213             new StringReader( "hello\nthere\rThis\r\nis\n\ra test\n string" ),
214             8,
215             0
216         );
217         // Check line feed read
218         try {
219             assertEquals( 1, PLR.getLineNumber() );
220             String line = PLR.readLine();
221             assertEquals( "hello", line );
222             assertEquals( 2, PLR.getLineNumber() );
223             line = PLR.readLine();
224             assertEquals( "there", line );
225             assertEquals( 3, PLR.getLineNumber() );
226             line = PLR.readLine();
227             assertEquals( "This", line );
228             assertEquals( 4, PLR.getLineNumber() );
229             while( ( line = PLR.readLine() ) != null ) {
230             }
231             assertEquals( 7, PLR.getLineNumber() );
232         } catch ( IOException ex ) {
233             System.err.println( ex.getMessage() );
234         }
235     }
236 
237     public void testReady() {
238     }
239 
240     /*
241      * Test for void reset()
242      */
243     public void testReset() {
244     }
245 
246     /*
247      * Test for void setLineNumber()
248      */
249     public void testSetLineNumber() {
250     }
251 
252     /*
253      * Test for long skip()
254      */
255     public void testSkip() {
256         final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
257             new StringReader( "hello there. This is a test string" ),
258             8,
259             0
260         );
261         // Try to read into a buffer a few times longer than the readers buffer
262         char[] newbuffer = new char[25];
263         try {
264             PLR.skip( 3 );
265             PLR.read( newbuffer, 0, 5 );
266             assertEquals( "lo th", new String( newbuffer ).trim() );
267         } catch ( IOException ex ) {
268             System.err.println( ex.getMessage() );
269         }
270         try {
271             PLR.skip( 10 );
272             PLR.read( newbuffer, 2, 9 );
273             assertEquals( "lois a test", new String( newbuffer ).trim() );
274         } catch ( IOException ex ) {
275             System.err.println( ex.getMessage() );
276         }
277     }
278 
279     /*
280      * Test for void unread()
281      */
282     public void testUnread() {
283         try {
284             final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
285                 new StringReader( "hello there. This is a test string" ),
286                 8,
287                 0
288             );
289             char[] newbuffer = new char[5];
290             PLR.skip( 3 );
291             PLR.unread( 'X' );
292             PLR.read( newbuffer, 0, 5 );
293             assertEquals( "Xlo t", new String( newbuffer ) );
294         } catch ( IOException ex ) {
295             System.err.println( ex.getMessage() );
296             assertFalse( true );
297         }
298         try {
299             final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
300                 new StringReader( "hello there. This is a test string" ),
301                 8,
302                 1
303             );
304             char[] newbuffer = new char[5];
305             PLR.unread( 'X' );
306             PLR.read( newbuffer, 0, 5 );
307             assertEquals( "Xhell", new String( newbuffer ) );
308         } catch ( IOException ex ) {
309             System.err.println( ex.getMessage() );
310             assertFalse( true );
311         }
312     }
313 
314     /*
315      * Test for void unread(char[])
316      */
317     public void testUnreadcharArray() {
318     }
319 
320     /*
321      * Test for void unread(char[], int, int)
322      */
323     public void testUnreadcharArrayintint() {
324         try {
325             final PushbackLinenumberReader PLR = new PushbackLinenumberReader(
326                 new StringReader( "hello there. This is a test string" ),
327                 12,
328                 12
329             );
330             char[] newbuffer = new char[5];
331             PLR.read( newbuffer, 0, 5 );
332             PLR.unread( new char[] { 'r','u','b','b','i','s','h' } );
333             PLR.read( newbuffer, 0, 5 );
334             assertEquals( "rubbi", new String( newbuffer ) );
335         } catch ( IOException ex ) {
336             System.err.println( ex.getMessage() );
337             assertFalse( true );
338         }
339     }
340 
341     /*
342      * Test for void PushbackLinenumberReader(Reader)
343      */
344     public void testPushbackLinenumberReaderReader() {
345         new PushbackLinenumberReader( new StringReader( "" ) );
346     }
347 
348     /*
349      * Test for void PushbackLinenumberReader(Reader, int, int)
350      */
351     public void testPushbackLinenumberReaderReaderintint() {
352         new PushbackLinenumberReader( new StringReader( "" ), 4192, 1024 );
353     }
354 
355 }