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;
17 import static org.junit.Assert.*;
22 public class JsonSourceTest {
24 public JsonSourceTest() {
28 public static void setUpClass() throws Exception{
32 public static void tearDownClass() throws Exception{
40 public void tearDown() {
44 * Test of constructor, of class JsonSource.
47 public void testConstructor() throws Exception{
48 System.out.println("constructor");
53 reader = new StringReader("abc");
54 source = new JsonSource(reader);
55 assertEquals('a', source.read());
56 assertEquals('b', source.read());
57 assertEquals('c', source.read());
58 assertEquals(-1, source.read());
60 source = new JsonSource("abc");
61 assertEquals('a', source.read());
62 assertEquals('b', source.read());
63 assertEquals('c', source.read());
64 assertEquals(-1, source.read());
67 source = new JsonSource((Reader)null);
69 }catch(NullPointerException e){
74 source = new JsonSource((String)null);
76 }catch(NullPointerException e){
84 * Test of getLineNumber method, of class JsonSource.
87 public void testGetLineNumber() throws Exception{
88 System.out.println("getLineNumber");
92 source = new JsonSource("a\nbc\r\nd\n\n");
93 assertEquals(1, source.getLineNumber());
94 assertEquals('a', source.read());
95 assertEquals(1, source.getLineNumber());
96 assertEquals('\n', source.read());
97 assertEquals(2, source.getLineNumber());
98 assertEquals('b', source.read());
99 assertEquals(2, source.getLineNumber());
100 assertEquals('c', source.read());
101 assertEquals(2, source.getLineNumber());
102 assertEquals('\r', source.read());
103 assertEquals(2, source.getLineNumber());
104 assertEquals('\n', source.read());
105 assertEquals(3, source.getLineNumber());
106 assertEquals('d', source.read());
107 assertEquals(3, source.getLineNumber());
108 assertEquals('\n', source.read());
109 assertEquals(4, source.getLineNumber());
110 assertEquals('\n', source.read());
111 assertEquals(5, source.getLineNumber());
112 assertEquals(-1, source.read());
113 assertEquals(5, source.getLineNumber());
115 source = new JsonSource("\nX");
116 assertEquals(1, source.getLineNumber());
117 assertEquals('\n', source.read());
118 assertEquals(2, source.getLineNumber());
119 assertEquals('X', source.read());
120 assertEquals(2, source.getLineNumber());
121 assertEquals(-1, source.read());
122 assertEquals(2, source.getLineNumber());
124 source = new JsonSource("");
125 assertEquals(1, source.getLineNumber());
126 assertEquals(-1, source.read());
132 * Test of read method, of class JsonSource.
135 public void testRead() throws Exception{
136 System.out.println("read");
141 reader = new StringReader("abc");
142 source = new JsonSource(reader);
143 assertEquals('a', source.read());
144 assertEquals('b', source.read());
145 assertEquals('c', source.read());
146 assertEquals(-1, source.read());
148 source = new JsonSource("abc");
149 assertEquals('a', source.read());
150 assertEquals('b', source.read());
151 assertEquals('c', source.read());
152 assertEquals(-1, source.read());
154 source = new JsonSource("X\u0000\u3000\uffffZ");
155 assertEquals('X', source.read());
156 assertEquals('\u0000', source.read());
157 assertEquals('\u3000', source.read());
158 assertEquals('\uffff', source.read());
159 assertEquals('Z', source.read());
160 assertEquals(-1, source.read());
162 // CJK UNIFIED IDEOGRAPH-2000B 𠀋
163 source = new JsonSource("X\ud840\udc0bZ");
164 assertEquals('X', source.read());
165 assertEquals('\ud840', source.read());
166 assertEquals('\udc0b', source.read());
167 assertEquals('Z', source.read());
168 assertEquals(-1, source.read());
170 source = new JsonSource("");
171 assertEquals(-1, source.read());
173 reader = new TroubleReader("abc", 1);
174 source = new JsonSource(reader);
175 assertEquals('a', source.read());
179 }catch(IOException e){
189 * Test of readOrDie method, of class JsonSource.
192 public void testReadOrDie() throws Exception{
193 System.out.println("readOrDie");
197 source = new JsonSource("ab\nc");
198 assertEquals('a', source.readOrDie());
199 assertEquals('b', source.readOrDie());
200 assertEquals('\n', source.readOrDie());
201 assertEquals('c', source.readOrDie());
205 }catch(JsParseException e){
206 assertEquals(2, e.getLineNumber());
207 assertEquals("We need but no more JSON data [line:2]",
213 Reader reader = new TroubleReader("abc", 1);
214 source = new JsonSource(reader);
215 assertEquals('a', source.readOrDie());
219 }catch(IOException e){
229 * Test of matchOrDie method, of class JsonSource.
232 public void testMatchOrDie() throws Exception{
233 System.out.println("matchOrDie");
237 source = new JsonSource("ABC");
238 assertTrue(source.matchOrDie("ABC"));
240 source = new JsonSource("ABC");
241 assertFalse(source.matchOrDie("XYZ"));
243 source = new JsonSource("ABC");
244 assertTrue(source.matchOrDie("A"));
246 source = new JsonSource("ABC");
247 assertTrue(source.matchOrDie(""));
249 source = new JsonSource("ABC");
251 source.matchOrDie("ABCD");
253 }catch(JsParseException e){
261 * Test of unread method, of class JsonSource.
264 public void testUnread() throws Exception{
265 System.out.println("unread");
270 reader = new StringReader("abc");
271 source = new JsonSource(reader);
272 assertEquals('a', source.read());
273 assertEquals('b', source.read());
276 assertEquals('Y', source.read());
277 assertEquals('X', source.read());
278 assertEquals('c', source.read());
279 assertEquals(-1, source.read());
281 reader = new StringReader("a\nb\nc");
282 source = new JsonSource(reader);
283 assertEquals('a', source.read());
284 assertEquals('\n', source.read());
285 assertEquals('b', source.read());
286 assertEquals('\n', source.read());
287 assertEquals(3, source.getLineNumber());
289 assertEquals(2, source.getLineNumber());
290 assertEquals('\n', source.read());
291 assertEquals(3, source.getLineNumber());
293 reader = new StringReader("abc");
294 source = new JsonSource(reader);
295 assertEquals('a', source.read());
296 assertEquals('b', source.read());
298 assertEquals((char)-1, source.read());
299 assertEquals('c', source.read());
300 assertEquals(-1, source.read());
302 reader = new StringReader("X");
303 source = new JsonSource(reader);
305 assertEquals('Y', source.read());
306 assertEquals('X', source.read());
307 assertEquals(-1, source.read());
309 reader = new StringReader("X");
310 source = new JsonSource(reader);
311 int spared = source.getPushBackSpared();
312 for(int ct = 1; ct <= spared; ct++){
315 for(int ct = 1; ct <= spared; ct++){
316 assertEquals('Y', source.read());
318 assertEquals('X', source.read());
319 assertEquals(-1, source.read());
321 reader = new StringReader("X");
322 source = new JsonSource(reader);
323 while(source.getPushBackSpared() > 0){
329 }catch(IOException e){
330 assertEquals("Pushback buffer overflow", e.getMessage());
339 * Test of unread method, of class JsonSource.
342 public void testUnread_int() throws Exception{
343 System.out.println("unread");
348 reader = new StringReader("abc");
349 source = new JsonSource(reader);
350 assertEquals('a', source.readOrDie());
351 assertEquals('b', source.readOrDie());
352 source.unread((int) 'X');
353 assertEquals('X', source.readOrDie());
354 assertEquals('c', source.readOrDie());
355 assertEquals(-1, source.read());
357 reader = new StringReader("");
358 source = new JsonSource(reader);
359 assertEquals(-1, source.read());
360 source.unread((int) 'X');
361 assertEquals('X', source.readOrDie());
363 reader = new StringReader("ab");
364 source = new JsonSource(reader);
365 assertEquals('a', source.readOrDie());
366 source.unread((int) 'X');
367 source.unread((int) 'Y');
368 assertEquals('Y', source.readOrDie());
369 assertEquals('X', source.readOrDie());
370 assertEquals('b', source.readOrDie());
371 assertEquals(-1, source.read());
373 reader = new StringReader("");
374 source = new JsonSource(reader);
375 source.unread((int) '\0');
376 assertEquals('\0', source.readOrDie());
377 source.unread(0xffff);
378 assertEquals('\uffff', source.readOrDie());
379 source.unread(0x1ffff);
380 assertEquals('\uffff', source.readOrDie());
381 source.unread(0x1ffff);
382 assertEquals(0xffff, source.read());
383 source.unread(0xffffffff);
384 assertEquals(0xffff, source.read());
386 assertEquals(0xffff, source.read());
389 assertEquals(0xffff, source.readOrDie());
395 * Test of unread method, of class JsonSource.
398 public void testUnread_char() throws Exception{
399 System.out.println("unread");
404 reader = new StringReader("abc");
405 source = new JsonSource(reader);
406 assertEquals('a', source.readOrDie());
407 assertEquals('b', source.readOrDie());
409 assertEquals('X', source.readOrDie());
410 assertEquals('c', source.readOrDie());
411 assertEquals(-1, source.read());
413 reader = new StringReader("");
414 source = new JsonSource(reader);
415 assertEquals(-1, source.read());
417 assertEquals('X', source.readOrDie());
419 reader = new StringReader("ab");
420 source = new JsonSource(reader);
421 assertEquals('a', source.readOrDie());
424 assertEquals('Y', source.readOrDie());
425 assertEquals('X', source.readOrDie());
426 assertEquals('b', source.readOrDie());
427 assertEquals(-1, source.read());
429 reader = new StringReader("");
430 source = new JsonSource(reader);
432 assertEquals('\0', source.readOrDie());
433 source.unread((char) 0xffff);
434 assertEquals('\uffff', source.readOrDie());
440 * Test of close method, of class JsonSource.
443 public void testClose() throws Exception{
444 System.out.println("close");
449 reader = new StringReader("abc");
450 source = new JsonSource(reader);
456 }catch(IOException e){
457 assertEquals("Stream closed", e.getMessage());
463 }catch(IOException e){
464 assertEquals("Stream closed", e.getMessage());
471 * Test of getPushBackSpared method, of class JsonSource.
474 public void testGetPushBackSpared() throws Exception{
475 System.out.println("getPushBackSpared");
480 reader = new StringReader("abc");
481 source = new JsonSource(reader);
483 assertTrue(source.getPushBackSpared() > 0);
485 while(source.getPushBackSpared() > 0){
492 }catch(IOException e){
496 assertEquals(0, source.getPushBackSpared());
498 assertTrue(source.getPushBackSpared() > 0);
504 * Test of isWhitespace method, of class JsonSource.
507 public void testIsWhitespace_char(){
508 System.out.println("isWhitespace");
510 assertTrue(JsonSource.isWhitespace('\t'));
511 assertTrue(JsonSource.isWhitespace('\r'));
512 assertTrue(JsonSource.isWhitespace('\n'));
513 assertTrue(JsonSource.isWhitespace('\u0020'));
515 assertFalse(JsonSource.isWhitespace('A'));
516 assertFalse(JsonSource.isWhitespace('\u3000'));
517 assertFalse(JsonSource.isWhitespace('\0'));
518 assertFalse(JsonSource.isWhitespace((char) -1));
524 * Test of isWhitespace method, of class JsonSource.
527 public void testIsWhitespace_int(){
528 System.out.println("isWhitespace");
530 assertTrue(JsonSource.isWhitespace((int) '\t'));
531 assertTrue(JsonSource.isWhitespace((int) '\r'));
532 assertTrue(JsonSource.isWhitespace((int) '\n'));
533 assertTrue(JsonSource.isWhitespace((int) '\u0020'));
534 assertTrue(JsonSource.isWhitespace(0x0020));
536 assertFalse(JsonSource.isWhitespace((int) 'A'));
537 assertFalse(JsonSource.isWhitespace((int) '\u3000'));
538 assertFalse(JsonSource.isWhitespace((int) '\0'));
539 assertFalse(JsonSource.isWhitespace(-1));
541 assertFalse(JsonSource.isWhitespace(0xffff));
542 assertFalse(JsonSource.isWhitespace(0x1ffff));
543 assertFalse(JsonSource.isWhitespace(0xffff0020));
549 * Test of skipWhiteSpace method, of class JsonSource.
552 public void testSkipWhiteSpace() throws Exception{
553 System.out.println("skipWhiteSpace");
558 reader = new StringReader("abc");
559 source = new JsonSource(reader);
560 source.skipWhiteSpace();
561 assertEquals('a', source.read());
563 reader = new StringReader(" abc");
564 source = new JsonSource(reader);
565 source.skipWhiteSpace();
566 assertEquals('a', source.read());
568 reader = new StringReader("\t\r\n\u0020abc");
569 source = new JsonSource(reader);
570 source.skipWhiteSpace();
571 assertEquals('a', source.read());
573 reader = new StringReader(" ");
574 source = new JsonSource(reader);
575 source.skipWhiteSpace();
576 assertEquals(-1, source.read());
578 reader = new StringReader("");
579 source = new JsonSource(reader);
580 source.skipWhiteSpace();
581 assertEquals(-1, source.read());
587 * Test of hasMore method, of class JsonSource.
590 public void testHasMore() throws Exception{
591 System.out.println("hasMore");
596 reader = new StringReader("abc");
597 source = new JsonSource(reader);
598 assertTrue(source.hasMore());
599 assertEquals('a', source.read());
600 assertTrue(source.hasMore());
601 assertEquals('b', source.read());
602 assertTrue(source.hasMore());
603 assertEquals('c', source.read());
604 assertFalse(source.hasMore());
606 assertTrue(source.hasMore());
607 assertEquals('X', source.read());
608 assertFalse(source.hasMore());
610 reader = new StringReader("");
611 source = new JsonSource(reader);
612 assertFalse(source.hasMore());