Skip to content

Commit 04f18cc

Browse files
committed
add more tests
1 parent efbbe07 commit 04f18cc

16 files changed

+204
-205
lines changed

src/main/java/com/jsoniter/Any.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ public ValueType getValueType(Object... keys) {
4242
}
4343
}
4444

45+
46+
public Map<String, Object> getMap(Object... keys) {
47+
return get(keys);
48+
}
49+
50+
public List<Object> getList(Object... keys) {
51+
return get(keys);
52+
}
53+
4554
public <T> T get(Object... keys) {
4655
try {
4756
return (T) (lastAccessed = getPath(val, keys));
@@ -202,13 +211,13 @@ private static Object getPath(Object val, Object... keys) {
202211
}
203212
}
204213
if (key instanceof Integer) {
205-
Object nextVal = getFromArrayOrList(val, (Integer)key);
214+
Object nextVal = getFromArrayOrList(val, (Integer) key);
206215
Object[] nextKeys = new Object[keys.length - 1];
207216
System.arraycopy(keys, 1, nextKeys, 0, nextKeys.length);
208217
return getPath(nextVal, nextKeys);
209218
}
210219
if (key instanceof String) {
211-
Object nextVal = getFromMap(val, (String)key);
220+
Object nextVal = getFromMap(val, (String) key);
212221
Object[] nextKeys = new Object[keys.length - 1];
213222
System.arraycopy(keys, 1, nextKeys, 0, nextKeys.length);
214223
return getPath(nextVal, nextKeys);
@@ -218,6 +227,9 @@ private static Object getPath(Object val, Object... keys) {
218227

219228
private static Object getFromMap(Object val, String key) {
220229
Map map = (Map) val;
230+
if (!map.containsKey(key)) {
231+
throw new IndexOutOfBoundsException(key + " not in " + map);
232+
}
221233
return map.get(key);
222234
}
223235

src/main/java/com/jsoniter/CodegenAccess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static boolean readArrayStart(Jsoniter iter) throws IOException {
5555
public static boolean readObjectStart(Jsoniter iter) throws IOException {
5656
byte c = iter.nextToken();
5757
if (c != '{') {
58-
throw iter.reportError("readObjectStart", "expect { or n");
58+
throw iter.reportError("readObjectStart", "expect { or n, found: " + (char)c);
5959
}
6060
c = iter.nextToken();
6161
if (c == '}') {

src/main/java/com/jsoniter/TypeLiteral.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.jsoniter;
22

3-
import java.io.IOException;
43
import java.lang.reflect.ParameterizedType;
54
import java.lang.reflect.Type;
65

src/test/java/com/jsoniter/TestArray.java

Lines changed: 96 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import junit.framework.TestCase;
44

55
import java.io.IOException;
6+
import java.util.Arrays;
7+
import java.util.List;
68

79
import static org.junit.Assert.assertArrayEquals;
810

@@ -11,61 +13,136 @@ public class TestArray extends TestCase {
1113
public void test_empty_array() throws IOException {
1214
Jsoniter iter = Jsoniter.parse("[]");
1315
assertFalse(iter.readArray());
16+
iter.reset();
17+
int[] array = iter.read(int[].class);
18+
assertEquals(0, array.length);
19+
iter.reset();
20+
List<String> list = iter.read(new TypeLiteral<List<String>>() {
21+
});
22+
assertEquals(0, list.size());
23+
iter.reset();
24+
Any any = iter.readAny();
25+
assertEquals(0, any.getList().size());
1426
}
1527

1628
public void test_one_element() throws IOException {
1729
Jsoniter iter = Jsoniter.parse("[1]");
1830
assertTrue(iter.readArray());
1931
assertEquals(1, iter.readInt());
2032
assertFalse(iter.readArray());
33+
iter.reset();
34+
int[] array = iter.read(int[].class);
35+
assertArrayEquals(new int[]{1}, array);
36+
iter.reset();
37+
List<Integer> list = iter.read(new TypeLiteral<List<Integer>>() {
38+
});
39+
assertEquals(Arrays.asList(1), list);
40+
iter.reset();
41+
assertArrayEquals(new Object[]{1.0}, iter.read(Object[].class));
42+
iter.reset();
43+
assertEquals(1, iter.read(Any[].class)[0].toInt());
44+
iter.reset();
45+
assertEquals(1, iter.readAny().toInt(0));
2146
}
2247

2348
public void test_two_elements() throws IOException {
24-
Jsoniter iter = Jsoniter.parse("[1,2]");
49+
Jsoniter iter = Jsoniter.parse(" [ 1 , 2 ] ");
2550
assertTrue(iter.readArray());
2651
assertEquals(1, iter.readInt());
2752
assertTrue(iter.readArray());
2853
assertEquals(2, iter.readInt());
2954
assertFalse(iter.readArray());
55+
iter.reset();
56+
int[] array = iter.read(int[].class);
57+
assertArrayEquals(new int[]{1, 2}, array);
58+
iter.reset();
59+
List<Integer> list = iter.read(new TypeLiteral<List<Integer>>() {
60+
});
61+
assertEquals(Arrays.asList(1, 2), list);
62+
iter.reset();
63+
assertArrayEquals(new Object[]{1.0, 2.0}, iter.read(Object[].class));
64+
iter.reset();
65+
assertEquals(1, iter.read(Any[].class)[0].toInt());
66+
iter.reset();
67+
assertEquals(1, iter.readAny().toInt(0));
3068
}
3169

32-
public void test_whitespace_in_head() throws IOException {
33-
Jsoniter iter = Jsoniter.parse(" [1]");
70+
public void test_three_elements() throws IOException {
71+
Jsoniter iter = Jsoniter.parse(" [ 1 , 2, 3 ] ");
3472
assertTrue(iter.readArray());
3573
assertEquals(1, iter.readInt());
36-
assertFalse(iter.readArray());
37-
}
38-
39-
public void test_whitespace_after_array_start() throws IOException {
40-
Jsoniter iter = Jsoniter.parse("[ 1]");
4174
assertTrue(iter.readArray());
42-
assertEquals(1, iter.readInt());
43-
assertFalse(iter.readArray());
44-
}
45-
46-
public void test_whitespace_before_array_end() throws IOException {
47-
Jsoniter iter = Jsoniter.parse("[1 ]");
75+
assertEquals(2, iter.readInt());
4876
assertTrue(iter.readArray());
49-
assertEquals(1, iter.readInt());
77+
assertEquals(3, iter.readInt());
5078
assertFalse(iter.readArray());
79+
iter.reset();
80+
int[] array = iter.read(int[].class);
81+
assertArrayEquals(new int[]{1, 2, 3}, array);
82+
iter.reset();
83+
List<Integer> list = iter.read(new TypeLiteral<List<Integer>>() {
84+
});
85+
assertEquals(Arrays.asList(1, 2, 3), list);
86+
iter.reset();
87+
assertArrayEquals(new Object[]{1.0, 2.0, 3.0}, iter.read(Object[].class));
88+
iter.reset();
89+
assertEquals(1, iter.read(Any[].class)[0].toInt());
90+
iter.reset();
91+
assertEquals(1, iter.readAny().toInt(0));
5192
}
5293

53-
public void test_whitespace_before_comma() throws IOException {
54-
Jsoniter iter = Jsoniter.parse("[1 ,2]");
94+
public void test_four_elements() throws IOException {
95+
Jsoniter iter = Jsoniter.parse(" [ 1 , 2, 3, 4 ] ");
5596
assertTrue(iter.readArray());
5697
assertEquals(1, iter.readInt());
5798
assertTrue(iter.readArray());
5899
assertEquals(2, iter.readInt());
100+
assertTrue(iter.readArray());
101+
assertEquals(3, iter.readInt());
102+
assertTrue(iter.readArray());
103+
assertEquals(4, iter.readInt());
59104
assertFalse(iter.readArray());
105+
iter.reset();
106+
int[] array = iter.read(int[].class);
107+
assertArrayEquals(new int[]{1, 2, 3, 4}, array);
108+
iter.reset();
109+
List<Integer> list = iter.read(new TypeLiteral<List<Integer>>() {
110+
});
111+
assertEquals(Arrays.asList(1, 2, 3, 4), list);
112+
iter.reset();
113+
assertArrayEquals(new Object[]{1.0, 2.0, 3.0, 4.0}, iter.read(Object[].class));
114+
iter.reset();
115+
assertEquals(1, iter.read(Any[].class)[0].toInt());
116+
iter.reset();
117+
assertEquals(1, iter.readAny().toInt(0));
60118
}
61119

62-
public void test_whitespace_after_comma() throws IOException {
63-
Jsoniter iter = Jsoniter.parse("[1, 2]");
120+
public void test_five_elements() throws IOException {
121+
Jsoniter iter = Jsoniter.parse(" [ 1 , 2, 3, 4, 5 ] ");
64122
assertTrue(iter.readArray());
65123
assertEquals(1, iter.readInt());
66124
assertTrue(iter.readArray());
67125
assertEquals(2, iter.readInt());
126+
assertTrue(iter.readArray());
127+
assertEquals(3, iter.readInt());
128+
assertTrue(iter.readArray());
129+
assertEquals(4, iter.readInt());
130+
assertTrue(iter.readArray());
131+
assertEquals(5, iter.readInt());
68132
assertFalse(iter.readArray());
133+
iter.reset();
134+
int[] array = iter.read(int[].class);
135+
assertArrayEquals(new int[]{1, 2, 3, 4, 5}, array);
136+
iter.reset();
137+
List<Integer> list = iter.read(new TypeLiteral<List<Integer>>() {
138+
});
139+
assertEquals(Arrays.asList(1, 2, 3, 4, 5), list);
140+
iter.reset();
141+
assertArrayEquals(new Object[]{1.0, 2.0, 3.0, 4.0, 5.0}, iter.read(Object[].class));
142+
iter.reset();
143+
assertEquals(1, iter.read(Any[].class)[0].toInt());
144+
iter.reset();
145+
assertEquals(1, iter.readAny().toInt(0));
69146
}
70147

71148
public void test_null() throws IOException {

src/test/java/com/jsoniter/TestBigDecimal.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/test/java/com/jsoniter/TestGenerics.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import junit.framework.TestCase;
44

55
import java.io.IOException;
6-
import java.util.ArrayList;
7-
import java.util.List;
8-
import java.util.Map;
9-
import java.util.Set;
6+
import java.util.*;
107

118
import static org.junit.Assert.assertArrayEquals;
129

@@ -26,6 +23,13 @@ public void test_string_list() throws IOException {
2623
assertArrayEquals(new String[]{"hello", "world"}, val.toArray(new String[0]));
2724
}
2825

26+
public void test_linked_list() throws IOException {
27+
Jsoniter iter = Jsoniter.parse("['hello', 'world']".replace('\'', '"'));
28+
List<String> val = iter.read(new TypeLiteral<LinkedList<String>>() {
29+
});
30+
assertArrayEquals(new String[]{"hello", "world"}, val.toArray(new String[0]));
31+
}
32+
2933
public void test_string_set() throws IOException {
3034
Jsoniter iter = Jsoniter.parse("['hello']".replace('\'', '"'));
3135
Set<String> val = iter.read(new TypeLiteral<Set<String>>() {

src/test/java/com/jsoniter/TestIO.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.jsoniter;
22

3-
import com.jsoniter.Jsoniter;
43
import junit.framework.TestCase;
54

65
import java.io.ByteArrayInputStream;

src/test/java/com/jsoniter/TestInheritance.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/test/java/com/jsoniter/TestNested.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@ public void test_array_of_objects() throws IOException {
2020
field2 = "22";
2121
}}
2222
}, objects);
23+
iter.reset();
24+
Any any = iter.readAny();
25+
assertEquals("22", any.toString(1, "field2"));
2326
}
2427
}

src/test/java/com/jsoniter/TestNull.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)