1
1
package com .fasterxml .jackson .core .sym ;
2
2
3
+ import java .io .ByteArrayInputStream ;
3
4
import java .io .IOException ;
4
5
import java .util .HashSet ;
5
6
@@ -12,28 +13,39 @@ public class SymbolsViaParserTest
12
13
extends com .fasterxml .jackson .core .BaseTest
13
14
{
14
15
// for [jackson-core#213]
15
- public void test17CharSymbols () throws Exception
16
- {
16
+ public void test17CharSymbols () throws Exception {
17
17
_test17Chars (false );
18
18
}
19
19
20
20
// for [jackson-core#213]
21
- public void test17ByteSymbols () throws Exception
22
- {
21
+ public void test17ByteSymbols () throws Exception {
23
22
_test17Chars (true );
24
23
}
25
24
25
+ // for [jackson-core#216]
26
+ public void testSymbolTableExpansionChars () throws Exception {
27
+ _testSymbolTableExpansion (false );
28
+ }
29
+
30
+ // for [jackson-core#216]
31
+ public void testSymbolTableExpansionBytes () throws Exception {
32
+ _testSymbolTableExpansion (true );
33
+ }
34
+
35
+ /*
36
+ /**********************************************************
37
+ /* Secondary test methods
38
+ /**********************************************************
39
+ */
40
+
26
41
private void _test17Chars (boolean useBytes ) throws IOException
27
42
{
28
- String doc = _createDoc ();
43
+ String doc = _createDoc17 ();
29
44
JsonFactory f = new JsonFactory ();
30
45
31
- JsonParser p ;
32
- if (useBytes ) {
33
- p = f .createParser (doc .getBytes ("UTF-8" ));
34
- } else {
35
- p = f .createParser (doc );
36
- }
46
+ JsonParser p = useBytes
47
+ ? f .createParser (doc .getBytes ("UTF-8" ))
48
+ : f .createParser (doc );
37
49
HashSet <String > syms = new HashSet <String >();
38
50
assertToken (JsonToken .START_OBJECT , p .nextToken ());
39
51
for (int i = 0 ; i < 50 ; ++i ) {
@@ -46,7 +58,7 @@ private void _test17Chars(boolean useBytes) throws IOException
46
58
p .close ();
47
59
}
48
60
49
- private String _createDoc () {
61
+ private String _createDoc17 () {
50
62
StringBuilder sb = new StringBuilder (1000 );
51
63
sb .append ("{\n " );
52
64
for (int i = 1 ; i <= 50 ; ++i ) {
@@ -60,4 +72,24 @@ private String _createDoc() {
60
72
sb .append ("\n }" );
61
73
return sb .toString ();
62
74
}
75
+
76
+ public void _testSymbolTableExpansion (boolean useBytes ) throws Exception
77
+ {
78
+ JsonFactory jsonFactory = new JsonFactory ();
79
+ // Important: must create separate documents to gradually build up symbol table
80
+ for (int i = 0 ; i < 200 ; i ++) {
81
+ String field = Integer .toString (i );
82
+ final String doc = "{ \" " + field + "\" : \" test\" }" ;
83
+ JsonParser parser = useBytes
84
+ ? jsonFactory .createParser (doc .getBytes ("UTF-8" ))
85
+ : jsonFactory .createParser (doc );
86
+ assertToken (JsonToken .START_OBJECT , parser .nextToken ());
87
+ assertToken (JsonToken .FIELD_NAME , parser .nextToken ());
88
+ assertEquals (field , parser .getCurrentName ());
89
+ assertToken (JsonToken .VALUE_STRING , parser .nextToken ());
90
+ assertToken (JsonToken .END_OBJECT , parser .nextToken ());
91
+ assertNull (parser .nextToken ());
92
+ parser .close ();
93
+ }
94
+ }
63
95
}
0 commit comments