Skip to content

Commit b50ac1f

Browse files
committed
Beef up tests wrt FasterXML#312
1 parent eabb42c commit b50ac1f

File tree

2 files changed

+129
-20
lines changed

2 files changed

+129
-20
lines changed

cbor/src/test/java/com/fasterxml/jackson/dataformat/cbor/failing/SymbolTable312Test.java

Lines changed: 64 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,58 @@
11
package com.fasterxml.jackson.dataformat.cbor.failing;
22

3+
import java.nio.charset.StandardCharsets;
4+
35
import com.fasterxml.jackson.core.JsonParser;
46
import com.fasterxml.jackson.core.JsonToken;
57
import com.fasterxml.jackson.databind.ObjectMapper;
68
import com.fasterxml.jackson.dataformat.cbor.CBORTestBase;
79

10+
// For [dataformats-binary#312]: null handling
811
public class SymbolTable312Test extends CBORTestBase
912
{
1013
private final ObjectMapper MAPPER = cborMapper();
1114

12-
// [dataformats-binary#312]: null handling
13-
public void testNullHandling() throws Exception
15+
public void testNullHandling1Quad() throws Exception
1416
{
15-
final String FIELD1 = "\u0000";
16-
final String FIELD2 = FIELD1 + FIELD1;
17-
final String FIELD3 = FIELD2 + FIELD1;
17+
_testNullHandling(1);
18+
_testNullHandling(2);
19+
}
1820

19-
final String QUOTED_NULL = "\\u0000";
21+
public void testNullHandling2Quads() throws Exception
22+
{
23+
_testNullHandling(5);
24+
_testNullHandling(6);
25+
}
26+
27+
public void testNullHandling3Quads() throws Exception
28+
{
29+
_testNullHandling(9);
30+
_testNullHandling(10);
31+
}
32+
33+
public void testNullHandlingNQuads() throws Exception
34+
{
35+
_testNullHandling(13);
36+
_testNullHandling(14);
37+
_testNullHandling(17);
38+
_testNullHandling(18);
39+
_testNullHandling(21);
40+
}
41+
42+
public void _testNullHandling(int minNulls) throws Exception
43+
{
44+
final String FIELD1 = _nulls(minNulls);
45+
final String FIELD2 = _nulls(minNulls+1);
46+
final String FIELD3 = _nulls(minNulls+2);
47+
final String FIELD4 = _nulls(minNulls+3);
48+
final String FIELD5 = _nulls(minNulls+4);
2049

21-
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c'}",
22-
QUOTED_NULL, QUOTED_NULL+QUOTED_NULL, QUOTED_NULL+QUOTED_NULL+QUOTED_NULL));
50+
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c','%s':'d','%s':'e'}",
51+
_quotedNulls(minNulls),
52+
_quotedNulls(minNulls+1),
53+
_quotedNulls(minNulls+2),
54+
_quotedNulls(minNulls+3),
55+
_quotedNulls(minNulls+4)));
2356
byte[] DOC = cborDoc(SRC);
2457

2558
try (JsonParser p = MAPPER.createParser(DOC)) {
@@ -40,13 +73,35 @@ public void testNullHandling() throws Exception
4073
assertToken(JsonToken.VALUE_STRING, p.nextToken());
4174
assertEquals("c", p.getText());
4275

76+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
77+
_assertNullStrings(FIELD4, p.currentName());
78+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
79+
assertEquals("d", p.getText());
80+
81+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
82+
_assertNullStrings(FIELD5, p.currentName());
83+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
84+
assertEquals("e", p.getText());
85+
4386
assertToken(JsonToken.END_OBJECT, p.nextToken());
4487
}
4588
}
4689

90+
private String _nulls(int len) {
91+
return new String(new byte[len], StandardCharsets.US_ASCII);
92+
}
93+
94+
private String _quotedNulls(int len) {
95+
StringBuilder sb = new StringBuilder();
96+
while (--len >= 0) {
97+
sb.append("\\u0000");
98+
}
99+
return sb.toString();
100+
}
101+
47102
private void _assertNullStrings(String exp, String actual) {
48103
if (exp.length() != actual.length()) {
49-
fail("Expected "+exp.length()+" nulls, got "+actual.length());
104+
fail("Expected name with "+exp.length()+" null chars, got "+actual.length());
50105
}
51106
assertEquals(exp, actual);
52107
}

smile/src/test/java/com/fasterxml/jackson/dataformat/smile/failing/SymbolTable312Test.java

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.fasterxml.jackson.dataformat.smile.failing;
22

3+
import java.nio.charset.StandardCharsets;
4+
35
import com.fasterxml.jackson.core.JsonParser;
46
import com.fasterxml.jackson.core.JsonToken;
57
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -9,17 +11,47 @@ public class SymbolTable312Test extends BaseTestForSmile
911
{
1012
private final ObjectMapper MAPPER = smileMapper();
1113

12-
// [dataformats-binary#312]: null handling
13-
public void testNullHandling() throws Exception
14+
public void testNullHandling1Quad() throws Exception
15+
{
16+
_testNullHandling(1);
17+
_testNullHandling(2);
18+
}
19+
20+
public void testNullHandling2Quads() throws Exception
21+
{
22+
_testNullHandling(5);
23+
_testNullHandling(6);
24+
}
25+
26+
public void testNullHandling3Quads() throws Exception
27+
{
28+
_testNullHandling(9);
29+
_testNullHandling(10);
30+
}
31+
32+
public void testNullHandlingNQuads() throws Exception
33+
{
34+
_testNullHandling(13);
35+
_testNullHandling(14);
36+
_testNullHandling(17);
37+
_testNullHandling(18);
38+
_testNullHandling(21);
39+
}
40+
41+
public void _testNullHandling(int minNulls) throws Exception
1442
{
15-
final String FIELD1 = "\u0000";
16-
final String FIELD2 = FIELD1 + FIELD1;
17-
final String FIELD3 = FIELD2 + FIELD1;
18-
19-
final String QUOTED_NULL = "\\u0000";
20-
21-
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c'}",
22-
QUOTED_NULL, QUOTED_NULL+QUOTED_NULL, QUOTED_NULL+QUOTED_NULL+QUOTED_NULL));
43+
final String FIELD1 = _nulls(minNulls);
44+
final String FIELD2 = _nulls(minNulls+1);
45+
final String FIELD3 = _nulls(minNulls+2);
46+
final String FIELD4 = _nulls(minNulls+3);
47+
final String FIELD5 = _nulls(minNulls+4);
48+
49+
final String SRC = a2q(String.format("{'%s':'a','%s':'b','%s':'c','%s':'d','%s':'e'}",
50+
_quotedNulls(minNulls),
51+
_quotedNulls(minNulls+1),
52+
_quotedNulls(minNulls+2),
53+
_quotedNulls(minNulls+3),
54+
_quotedNulls(minNulls+4)));
2355
byte[] DOC = _smileDoc(SRC);
2456

2557
try (JsonParser p = MAPPER.createParser(DOC)) {
@@ -40,13 +72,35 @@ public void testNullHandling() throws Exception
4072
assertToken(JsonToken.VALUE_STRING, p.nextToken());
4173
assertEquals("c", p.getText());
4274

75+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
76+
_assertNullStrings(FIELD4, p.currentName());
77+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
78+
assertEquals("d", p.getText());
79+
80+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
81+
_assertNullStrings(FIELD5, p.currentName());
82+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
83+
assertEquals("e", p.getText());
84+
4385
assertToken(JsonToken.END_OBJECT, p.nextToken());
4486
}
4587
}
4688

89+
private String _nulls(int len) {
90+
return new String(new byte[len], StandardCharsets.US_ASCII);
91+
}
92+
93+
private String _quotedNulls(int len) {
94+
StringBuilder sb = new StringBuilder();
95+
while (--len >= 0) {
96+
sb.append("\\u0000");
97+
}
98+
return sb.toString();
99+
}
100+
47101
private void _assertNullStrings(String exp, String actual) {
48102
if (exp.length() != actual.length()) {
49-
fail("Expected "+exp.length()+" nulls, got "+actual.length());
103+
fail("Expected name with "+exp.length()+" null chars, got "+actual.length());
50104
}
51105
assertEquals(exp, actual);
52106
}

0 commit comments

Comments
 (0)