forked from json-iterator/java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestString.java
More file actions
128 lines (109 loc) · 5.18 KB
/
TestString.java
File metadata and controls
128 lines (109 loc) · 5.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.jsoniter;
import com.jsoniter.spi.JsonException;
import junit.framework.TestCase;
import org.junit.experimental.categories.Category;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class TestString extends TestCase {
static {
// JsonIterator.enableStreamingSupport();
}
public void test_ascii_string() throws IOException {
JsonIterator iter = JsonIterator.parse("'hello''world'".replace('\'', '"'));
assertEquals("hello", iter.readString());
assertEquals("world", iter.readString());
iter = JsonIterator.parse("'hello''world'".replace('\'', '"'));
assertEquals("hello", iter.readStringAsSlice().toString());
assertEquals("world", iter.readStringAsSlice().toString());
}
public void test_ascii_string_with_escape() throws IOException {
JsonIterator iter = JsonIterator.parse("'he\\tllo'".replace('\'', '"'));
assertEquals("he\tllo", iter.readString());
}
public void test_utf8_string() throws IOException {
JsonIterator iter = JsonIterator.parse("'中文'".replace('\'', '"'));
assertEquals("中文", iter.readString());
}
public void test_incomplete_escape() throws IOException {
JsonIterator iter = JsonIterator.parse("\"\\");
try {
iter.readString();
fail();
} catch (JsonException e) {
}
}
public void test_surrogate() throws IOException {
JsonIterator iter = JsonIterator.parse("\"\ud83d\udc4a\"");
assertEquals("\ud83d\udc4a", iter.readString());
}
public void test_larger_than_buffer() throws IOException {
JsonIterator iter = JsonIterator.parse("'0123456789012345678901234567890123'".replace('\'', '"'));
assertEquals("0123456789012345678901234567890123", iter.readString());
}
@org.junit.experimental.categories.Category(StreamingCategory.class)
public void test_string_across_buffer() throws IOException {
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream("'hello''world'".replace('\'', '"').getBytes()), 2);
assertEquals("hello", iter.readString());
assertEquals("world", iter.readString());
iter = JsonIterator.parse(new ByteArrayInputStream("'hello''world'".replace('\'', '"').getBytes()), 2);
assertEquals("hello", iter.readStringAsSlice().toString());
assertEquals("world", iter.readStringAsSlice().toString());
}
@org.junit.experimental.categories.Category(StreamingCategory.class)
public void test_utf8() throws IOException {
byte[] bytes = {'"', (byte) 0xe4, (byte) 0xb8, (byte) 0xad, (byte) 0xe6, (byte) 0x96, (byte) 0x87, '"'};
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream(bytes), 2);
assertEquals("中文", iter.readString());
}
@org.junit.experimental.categories.Category(StreamingCategory.class)
public void test_normal_escape() throws IOException {
byte[] bytes = {'"', (byte) '\\', (byte) 't', '"'};
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream(bytes), 2);
assertEquals("\t", iter.readString());
}
@org.junit.experimental.categories.Category(StreamingCategory.class)
public void test_unicode_escape() throws IOException {
byte[] bytes = {'"', (byte) '\\', (byte) 'u', (byte) '4', (byte) 'e', (byte) '2', (byte) 'd', '"'};
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream(bytes), 2);
assertEquals("中", iter.readString());
}
public void test_null_string() throws IOException {
JsonIterator iter = JsonIterator.parse("null".replace('\'', '"'));
assertEquals(null, iter.readString());
}
public void test_incomplete_string() throws IOException {
try {
JsonIterator.deserialize("\"abc", String.class);
fail();
} catch (JsonException e) {
}
}
public void test_invalid_string() throws IOException {
for (String str : new String[]{
"\"\\x0008\"",
"\"\\u000Z\"",
"\"\\u000\"",
"\"\\u00\"",
"\"\\u0\"",
"\"\\\"",
"\"\\udd1e\"",
"\"\\ud834\"",
"\"\\ud834\\x\"",
"\"\\ud834\\ud834\"",
}) {
try {JsonIterator.deserialize(str, String.class);
} catch (JsonException e) {
} catch (IndexOutOfBoundsException e) {
}
}
}
public void test_long_string() throws IOException {
JsonIterator iter = JsonIterator.parse("\"[\\\"LL\\\",\\\"MM\\\\\\/LW\\\",\\\"JY\\\",\\\"S\\\",\\\"C\\\",\\\"IN\\\",\\\"ME \\\\\\/ LE\\\"]\"");
assertEquals("[\"LL\",\"MM\\/LW\",\"JY\",\"S\",\"C\",\"IN\",\"ME \\/ LE\"]", iter.readString());
}
@Category(StreamingCategory.class)
public void test_long_string_in_streaming() throws IOException {
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream("\"[\\\"LL\\\",\\\"MM\\\\\\/LW\\\",\\\"JY\\\",\\\"S\\\",\\\"C\\\",\\\"IN\\\",\\\"ME \\\\\\/ LE\\\"]\"".getBytes()), 2);
assertEquals("[\"LL\",\"MM\\/LW\",\"JY\",\"S\",\"C\",\"IN\",\"ME \\/ LE\"]", iter.readString());
}
}