2 * License : The MIT License
3 * Copyright(c) 2009 olyutorskii
6 package jp.sourceforge.jovsonz;
8 import java.io.IOException;
10 import java.io.StringReader;
11 import org.junit.After;
12 import org.junit.AfterClass;
13 import org.junit.Before;
14 import org.junit.BeforeClass;
15 import org.junit.Test;
16 import static org.junit.Assert.*;
21 public class JsonSourceTest {
23 public JsonSourceTest() {
27 public static void setUpClass() throws Exception{
31 public static void tearDownClass() throws Exception{
39 public void tearDown() {
43 * Test of constructor, of class JsonSource.
46 public void testConstructor() throws Exception{
47 System.out.println("constructor");
52 reader = new StringReader("abc");
53 source = new JsonSource(reader);
54 assertEquals('a', source.read());
55 assertEquals('b', source.read());
56 assertEquals('c', source.read());
57 assertEquals(-1, source.read());
59 source = new JsonSource("abc");
60 assertEquals('a', source.read());
61 assertEquals('b', source.read());
62 assertEquals('c', source.read());
63 assertEquals(-1, source.read());
66 source = new JsonSource((Reader)null);
68 }catch(NullPointerException e){
73 source = new JsonSource((String)null);
75 }catch(NullPointerException e){
83 * Test of getLineNumber method, of class JsonSource.
86 public void testGetLineNumber() throws Exception{
87 System.out.println("getLineNumber");
91 source = new JsonSource("a\nbc\r\nd\n\n");
92 assertEquals(1, source.getLineNumber());
93 assertEquals('a', source.read());
94 assertEquals(1, source.getLineNumber());
95 assertEquals('\n', source.read());
96 assertEquals(2, source.getLineNumber());
97 assertEquals('b', source.read());
98 assertEquals(2, source.getLineNumber());
99 assertEquals('c', source.read());
100 assertEquals(2, source.getLineNumber());
101 assertEquals('\r', source.read());
102 assertEquals(2, source.getLineNumber());
103 assertEquals('\n', source.read());
104 assertEquals(3, source.getLineNumber());
105 assertEquals('d', source.read());
106 assertEquals(3, source.getLineNumber());
107 assertEquals('\n', source.read());
108 assertEquals(4, source.getLineNumber());
109 assertEquals('\n', source.read());
110 assertEquals(5, source.getLineNumber());
111 assertEquals(-1, source.read());
112 assertEquals(5, source.getLineNumber());
114 source = new JsonSource("\nX");
115 assertEquals(1, source.getLineNumber());
116 assertEquals('\n', source.read());
117 assertEquals(2, source.getLineNumber());
118 assertEquals('X', source.read());
119 assertEquals(2, source.getLineNumber());
120 assertEquals(-1, source.read());
121 assertEquals(2, source.getLineNumber());
123 source = new JsonSource("");
124 assertEquals(1, source.getLineNumber());
125 assertEquals(-1, source.read());
131 * Test of read method, of class JsonSource.
134 public void testRead() throws Exception{
135 System.out.println("read");
140 reader = new StringReader("abc");
141 source = new JsonSource(reader);
142 assertEquals('a', source.read());
143 assertEquals('b', source.read());
144 assertEquals('c', source.read());
145 assertEquals(-1, source.read());
147 source = new JsonSource("abc");
148 assertEquals('a', source.read());
149 assertEquals('b', source.read());
150 assertEquals('c', source.read());
151 assertEquals(-1, source.read());
153 source = new JsonSource("X\u0000\u3000\uffffZ");
154 assertEquals('X', source.read());
155 assertEquals('\u0000', source.read());
156 assertEquals('\u3000', source.read());
157 assertEquals('\uffff', source.read());
158 assertEquals('Z', source.read());
159 assertEquals(-1, source.read());
161 // CJK UNIFIED IDEOGRAPH-2000B 𠀋
162 source = new JsonSource("X\ud840\udc0bZ");
163 assertEquals('X', source.read());
164 assertEquals('\ud840', source.read());
165 assertEquals('\udc0b', source.read());
166 assertEquals('Z', source.read());
167 assertEquals(-1, source.read());
169 source = new JsonSource("");
170 assertEquals(-1, source.read());
172 reader = new TroubleReader("abc", 1);
173 source = new JsonSource(reader);
174 assertEquals('a', source.read());
178 }catch(IOException e){
188 * Test of readOrDie method, of class JsonSource.
191 public void testReadOrDie() throws Exception{
192 System.out.println("readOrDie");
196 source = new JsonSource("ab\nc");
197 assertEquals('a', source.readOrDie());
198 assertEquals('b', source.readOrDie());
199 assertEquals('\n', source.readOrDie());
200 assertEquals('c', source.readOrDie());
204 }catch(JsParseException e){
205 assertEquals(2, e.getLineNumber());
206 assertEquals("We need but no more JSON data [line:2]",
212 Reader reader = new TroubleReader("abc", 1);
213 source = new JsonSource(reader);
214 assertEquals('a', source.readOrDie());
218 }catch(IOException e){
228 * Test of matchOrDie method, of class JsonSource.
231 public void testMatchOrDie() throws Exception{
232 System.out.println("matchOrDie");
236 source = new JsonSource("ABC");
237 assertTrue(source.matchOrDie("ABC"));
239 source = new JsonSource("ABC");
240 assertFalse(source.matchOrDie("XYZ"));
242 source = new JsonSource("ABC");
243 assertTrue(source.matchOrDie("A"));
245 source = new JsonSource("ABC");
246 assertTrue(source.matchOrDie(""));
248 source = new JsonSource("ABC");
250 source.matchOrDie("ABCD");
252 }catch(JsParseException e){
260 * Test of unread method, of class JsonSource.
263 public void testUnread() throws Exception{
264 System.out.println("unread");
269 reader = new StringReader("abc");
270 source = new JsonSource(reader);
271 assertEquals('a', source.read());
272 assertEquals('b', source.read());
275 assertEquals('Y', source.read());
276 assertEquals('X', source.read());
277 assertEquals('c', source.read());
278 assertEquals(-1, source.read());
280 reader = new StringReader("a\nb\nc");
281 source = new JsonSource(reader);
282 assertEquals('a', source.read());
283 assertEquals('\n', source.read());
284 assertEquals('b', source.read());
285 assertEquals('\n', source.read());
286 assertEquals(3, source.getLineNumber());
288 assertEquals(2, source.getLineNumber());
289 assertEquals('\n', source.read());
290 assertEquals(3, source.getLineNumber());
292 reader = new StringReader("abc");
293 source = new JsonSource(reader);
294 assertEquals('a', source.read());
295 assertEquals('b', source.read());
297 assertEquals((char)-1, source.read());
298 assertEquals('c', source.read());
299 assertEquals(-1, source.read());
301 reader = new StringReader("X");
302 source = new JsonSource(reader);
304 assertEquals('Y', source.read());
305 assertEquals('X', source.read());
306 assertEquals(-1, source.read());
308 reader = new StringReader("X");
309 source = new JsonSource(reader);
310 int spared = source.getPushBackSpared();
311 for(int ct = 1; ct <= spared; ct++){
314 for(int ct = 1; ct <= spared; ct++){
315 assertEquals('Y', source.read());
317 assertEquals('X', source.read());
318 assertEquals(-1, source.read());
320 reader = new StringReader("X");
321 source = new JsonSource(reader);
322 while(source.getPushBackSpared() > 0){
328 }catch(IOException e){
329 assertEquals("Pushback buffer overflow", e.getMessage());
338 * Test of unread method, of class JsonSource.
341 public void testUnread_int() throws Exception{
342 System.out.println("unread");
347 reader = new StringReader("abc");
348 source = new JsonSource(reader);
349 assertEquals('a', source.readOrDie());
350 assertEquals('b', source.readOrDie());
351 source.unread((int) 'X');
352 assertEquals('X', source.readOrDie());
353 assertEquals('c', source.readOrDie());
354 assertEquals(-1, source.read());
356 reader = new StringReader("");
357 source = new JsonSource(reader);
358 assertEquals(-1, source.read());
359 source.unread((int) 'X');
360 assertEquals('X', source.readOrDie());
362 reader = new StringReader("ab");
363 source = new JsonSource(reader);
364 assertEquals('a', source.readOrDie());
365 source.unread((int) 'X');
366 source.unread((int) 'Y');
367 assertEquals('Y', source.readOrDie());
368 assertEquals('X', source.readOrDie());
369 assertEquals('b', source.readOrDie());
370 assertEquals(-1, source.read());
372 reader = new StringReader("");
373 source = new JsonSource(reader);
374 source.unread((int) '\0');
375 assertEquals('\0', source.readOrDie());
376 source.unread(0xffff);
377 assertEquals('\uffff', source.readOrDie());
378 source.unread(0x1ffff);
379 assertEquals('\uffff', source.readOrDie());
380 source.unread(0x1ffff);
381 assertEquals(0xffff, source.read());
382 source.unread(0xffffffff);
383 assertEquals(0xffff, source.read());
385 assertEquals(0xffff, source.read());
388 assertEquals(0xffff, source.readOrDie());
394 * Test of unread method, of class JsonSource.
397 public void testUnread_char() throws Exception{
398 System.out.println("unread");
403 reader = new StringReader("abc");
404 source = new JsonSource(reader);
405 assertEquals('a', source.readOrDie());
406 assertEquals('b', source.readOrDie());
408 assertEquals('X', source.readOrDie());
409 assertEquals('c', source.readOrDie());
410 assertEquals(-1, source.read());
412 reader = new StringReader("");
413 source = new JsonSource(reader);
414 assertEquals(-1, source.read());
416 assertEquals('X', source.readOrDie());
418 reader = new StringReader("ab");
419 source = new JsonSource(reader);
420 assertEquals('a', source.readOrDie());
423 assertEquals('Y', source.readOrDie());
424 assertEquals('X', source.readOrDie());
425 assertEquals('b', source.readOrDie());
426 assertEquals(-1, source.read());
428 reader = new StringReader("");
429 source = new JsonSource(reader);
431 assertEquals('\0', source.readOrDie());
432 source.unread((char) 0xffff);
433 assertEquals('\uffff', source.readOrDie());
439 * Test of close method, of class JsonSource.
442 public void testClose() throws Exception{
443 System.out.println("close");
448 reader = new StringReader("abc");
449 source = new JsonSource(reader);
455 }catch(IOException e){
456 assertEquals("Stream closed", e.getMessage());
462 }catch(IOException e){
463 assertEquals("Stream closed", e.getMessage());
470 * Test of getPushBackSpared method, of class JsonSource.
473 public void testGetPushBackSpared() throws Exception{
474 System.out.println("getPushBackSpared");
479 reader = new StringReader("abc");
480 source = new JsonSource(reader);
482 assertTrue(source.getPushBackSpared() > 0);
484 while(source.getPushBackSpared() > 0){
491 }catch(IOException e){
495 assertEquals(0, source.getPushBackSpared());
497 assertTrue(source.getPushBackSpared() > 0);
503 * Test of isWhitespace method, of class JsonSource.
506 public void testIsWhitespace_char(){
507 System.out.println("isWhitespace");
509 assertTrue(JsonSource.isWhitespace('\t'));
510 assertTrue(JsonSource.isWhitespace('\r'));
511 assertTrue(JsonSource.isWhitespace('\n'));
512 assertTrue(JsonSource.isWhitespace('\u0020'));
514 assertFalse(JsonSource.isWhitespace('A'));
515 assertFalse(JsonSource.isWhitespace('\u3000'));
516 assertFalse(JsonSource.isWhitespace('\0'));
517 assertFalse(JsonSource.isWhitespace((char) -1));
523 * Test of isWhitespace method, of class JsonSource.
526 public void testIsWhitespace_int(){
527 System.out.println("isWhitespace");
529 assertTrue(JsonSource.isWhitespace((int) '\t'));
530 assertTrue(JsonSource.isWhitespace((int) '\r'));
531 assertTrue(JsonSource.isWhitespace((int) '\n'));
532 assertTrue(JsonSource.isWhitespace((int) '\u0020'));
533 assertTrue(JsonSource.isWhitespace(0x0020));
535 assertFalse(JsonSource.isWhitespace((int) 'A'));
536 assertFalse(JsonSource.isWhitespace((int) '\u3000'));
537 assertFalse(JsonSource.isWhitespace((int) '\0'));
538 assertFalse(JsonSource.isWhitespace(-1));
540 assertFalse(JsonSource.isWhitespace(0xffff));
541 assertFalse(JsonSource.isWhitespace(0x1ffff));
542 assertFalse(JsonSource.isWhitespace(0xffff0020));
548 * Test of skipWhiteSpace method, of class JsonSource.
551 public void testSkipWhiteSpace() throws Exception{
552 System.out.println("skipWhiteSpace");
557 reader = new StringReader("abc");
558 source = new JsonSource(reader);
559 source.skipWhiteSpace();
560 assertEquals('a', source.read());
562 reader = new StringReader(" abc");
563 source = new JsonSource(reader);
564 source.skipWhiteSpace();
565 assertEquals('a', source.read());
567 reader = new StringReader("\t\r\n\u0020abc");
568 source = new JsonSource(reader);
569 source.skipWhiteSpace();
570 assertEquals('a', source.read());
572 reader = new StringReader(" ");
573 source = new JsonSource(reader);
574 source.skipWhiteSpace();
575 assertEquals(-1, source.read());
577 reader = new StringReader("");
578 source = new JsonSource(reader);
579 source.skipWhiteSpace();
580 assertEquals(-1, source.read());
586 * Test of hasMore method, of class JsonSource.
589 public void testHasMore() throws Exception{
590 System.out.println("hasMore");
595 reader = new StringReader("abc");
596 source = new JsonSource(reader);
597 assertTrue(source.hasMore());
598 assertEquals('a', source.read());
599 assertTrue(source.hasMore());
600 assertEquals('b', source.read());
601 assertTrue(source.hasMore());
602 assertEquals('c', source.read());
603 assertFalse(source.hasMore());
605 assertTrue(source.hasMore());
606 assertEquals('X', source.read());
607 assertFalse(source.hasMore());
609 reader = new StringReader("");
610 source = new JsonSource(reader);
611 assertFalse(source.hasMore());