Skip to content

Commit 7ca3d1c

Browse files
committed
Add a failing test for #216 (and #207)
1 parent cfeaed0 commit 7ca3d1c

File tree

1 file changed

+44
-12
lines changed

1 file changed

+44
-12
lines changed

src/test/java/com/fasterxml/jackson/core/sym/SymbolsViaParserTest.java

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.fasterxml.jackson.core.sym;
22

3+
import java.io.ByteArrayInputStream;
34
import java.io.IOException;
45
import java.util.HashSet;
56

@@ -12,28 +13,39 @@ public class SymbolsViaParserTest
1213
extends com.fasterxml.jackson.core.BaseTest
1314
{
1415
// for [jackson-core#213]
15-
public void test17CharSymbols() throws Exception
16-
{
16+
public void test17CharSymbols() throws Exception {
1717
_test17Chars(false);
1818
}
1919

2020
// for [jackson-core#213]
21-
public void test17ByteSymbols() throws Exception
22-
{
21+
public void test17ByteSymbols() throws Exception {
2322
_test17Chars(true);
2423
}
2524

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+
2641
private void _test17Chars(boolean useBytes) throws IOException
2742
{
28-
String doc = _createDoc();
43+
String doc = _createDoc17();
2944
JsonFactory f = new JsonFactory();
3045

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);
3749
HashSet<String> syms = new HashSet<String>();
3850
assertToken(JsonToken.START_OBJECT, p.nextToken());
3951
for (int i = 0; i < 50; ++i) {
@@ -46,7 +58,7 @@ private void _test17Chars(boolean useBytes) throws IOException
4658
p.close();
4759
}
4860

49-
private String _createDoc() {
61+
private String _createDoc17() {
5062
StringBuilder sb = new StringBuilder(1000);
5163
sb.append("{\n");
5264
for (int i = 1; i <= 50; ++i) {
@@ -60,4 +72,24 @@ private String _createDoc() {
6072
sb.append("\n}");
6173
return sb.toString();
6274
}
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+
}
6395
}

0 commit comments

Comments
 (0)