Skip to content

Commit 1e66baa

Browse files
committed
Add unit test for #126
1 parent 3d0e5ec commit 1e66baa

File tree

2 files changed

+109
-33
lines changed

2 files changed

+109
-33
lines changed

protobuf/src/test/java/com/fasterxml/jackson/dataformat/protobuf/ReadNestedUnknownFieldsTest.java

+97-20
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.fasterxml.jackson.dataformat.protobuf;
22

3-
import com.fasterxml.jackson.annotation.JsonProperty;
3+
import java.util.Arrays;
4+
import java.util.List;
45

6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
58
import com.fasterxml.jackson.core.JsonParser;
6-
79
import com.fasterxml.jackson.dataformat.protobuf.schema.ProtobufSchema;
810

9-
// [dataformats-binary#108]
1011
public class ReadNestedUnknownFieldsTest extends ProtobufTestBase
1112
{
13+
// [dataformats-binary#108]
1214
public static class LessNestedField {
1315
@JsonProperty(value = "f1", index = 1)
1416
private NestedOneField f1;
@@ -75,32 +77,107 @@ public void setNested2(int nested2) {
7577
}
7678
}
7779

80+
// [dataformats-binary#126]
81+
@JsonPropertyOrder({"embed", "state"})
82+
public static class OuterV2 {
83+
@JsonProperty("embed")
84+
public EmbedV2 embed;
85+
@JsonProperty("state")
86+
public String state;
87+
}
88+
89+
@JsonPropertyOrder({"embed", "state"})
90+
public static class Outer {
91+
@JsonProperty("embed")
92+
public Embed embed;
93+
@JsonProperty("state")
94+
public String state;
95+
}
96+
97+
@JsonPropertyOrder({"a", "b", "c", "extraField"})
98+
public static class EmbedV2 {
99+
@JsonProperty("a")
100+
public String a;
101+
@JsonProperty("b")
102+
public String b;
103+
@JsonProperty("c")
104+
public List<String> c;
105+
@JsonProperty("extraField")
106+
public String extraField;
107+
}
108+
109+
@JsonPropertyOrder({"a", "b", "c"})
110+
public static class Embed {
111+
@JsonProperty("a")
112+
public String a;
113+
@JsonProperty("b")
114+
public String b;
115+
@JsonProperty("c")
116+
public List<String> c;
117+
}
118+
78119
/*
79120
/**********************************************************
80121
/* Test methods
81122
/**********************************************************
82123
*/
83124

84-
final ProtobufMapper MAPPER = new ProtobufMapper();
125+
private final ProtobufMapper MAPPER = new ProtobufMapper();
126+
127+
// [dataformats-binary#108]
128+
public void testMultipleUnknown() throws Exception
129+
{
130+
MoreNestedField moreNestedField = new MoreNestedField();
131+
NestedTwoField nestedTwoField = new NestedTwoField();
132+
nestedTwoField.setNested1(1);
133+
nestedTwoField.setNested2(2);
134+
moreNestedField.setF1(nestedTwoField);
135+
136+
byte[] in = MAPPER.writerFor(MoreNestedField.class)
137+
.with(MAPPER.generateSchemaFor(MoreNestedField.class))
138+
.writeValueAsBytes(moreNestedField);
139+
140+
LessNestedField lesser = MAPPER.readerFor(LessNestedField.class)
141+
.with(MAPPER.generateSchemaFor(LessNestedField.class))
142+
// important: skip through unknown
143+
.with(JsonParser.Feature.IGNORE_UNDEFINED)
144+
.readValue(in);
145+
146+
assertEquals(moreNestedField.getF1().getNested2(), lesser.getF1().getNested2());
147+
}
148+
149+
// [dataformats-binary#126]
150+
public void testCheckEndAfterSkip() throws Exception
151+
{
152+
ProtobufMapper mapper = new ProtobufMapper();
153+
mapper.enable(JsonParser.Feature.IGNORE_UNDEFINED);
154+
ProtobufSchema schema = MAPPER.generateSchemaFor(Outer.class);
155+
ProtobufSchema schemaV2 = MAPPER.generateSchemaFor(OuterV2.class);
156+
157+
EmbedV2 embedV2 = new EmbedV2();
158+
embedV2.c = Arrays.asList("c");
159+
embedV2.extraField = "extra";
160+
161+
OuterV2 v2Expected = new OuterV2();
162+
v2Expected.embed = embedV2;
163+
v2Expected.state="state";
164+
165+
// serialize type with extra field
166+
byte[] doc = mapper.writer(schemaV2).writeValueAsBytes(v2Expected);
85167

86-
public void testMultipleUnknown() throws Exception
87-
{
88-
MoreNestedField moreNestedField = new MoreNestedField();
89-
NestedTwoField nestedTwoField = new NestedTwoField();
90-
nestedTwoField.setNested1(1);
91-
nestedTwoField.setNested2(2);
92-
moreNestedField.setF1(nestedTwoField);
168+
// showBytes(bout.toByteArray());
93169

94-
byte[] in = MAPPER.writerFor(MoreNestedField.class)
95-
.with(MAPPER.generateSchemaFor(MoreNestedField.class))
96-
.writeValueAsBytes(moreNestedField);
170+
// deserialize type with extra field
171+
OuterV2 v2Actual = mapper.readerFor(OuterV2.class)
172+
.with(schemaV2).readValue(doc);
173+
// this is ok
174+
assertEquals(v2Expected.state, v2Actual.state);
97175

98-
LessNestedField lesser = MAPPER.readerFor(LessNestedField.class)
99-
.with(MAPPER.generateSchemaFor(LessNestedField.class))
100-
// important: skip through unknown
101-
.with(JsonParser.Feature.IGNORE_UNDEFINED)
102-
.readValue(in);
176+
// deserialize type without extra field
177+
Outer v1Actual = mapper.readerFor(Outer.class).with(schema)
178+
.readValue(doc);
103179

104-
assertEquals(moreNestedField.getF1().getNested2(), lesser.getF1().getNested2());
180+
// Outer.state is skipped when skipping Embed.extraField
181+
assertEquals(v2Expected.state, v1Actual.state);
105182
}
106183
}

protobuf/src/test/java/com/fasterxml/jackson/dataformat/protobuf/schema/SchemaGenTest.java

+12-13
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
import java.util.List;
88

99
import com.fasterxml.jackson.annotation.JsonProperty;
10+
1011
import com.fasterxml.jackson.databind.ObjectMapper;
11-
import com.fasterxml.jackson.dataformat.protobuf.ProtobufFactory;
12+
1213
import com.fasterxml.jackson.dataformat.protobuf.ProtobufMapper;
1314
import com.fasterxml.jackson.dataformat.protobuf.ProtobufTestBase;
1415
import com.fasterxml.jackson.dataformat.protobuf.schema.ProtobufMessage;
@@ -73,22 +74,20 @@ public static class Employee {
7374
/**********************************************************
7475
*/
7576

76-
public void testWithNestedClass() throws Exception {
77-
ObjectMapper mapper = new ObjectMapper(new ProtobufFactory());
78-
ProtobufSchemaGenerator gen = new ProtobufSchemaGenerator();
79-
mapper.acceptJsonFormatVisitor(WithNestedClass.class, gen);
80-
ProtobufSchema schemaWrapper = gen.getGeneratedSchema();
77+
private final ProtobufMapper MAPPER = new ProtobufMapper();
78+
79+
public void testWithNestedClass() throws Exception
80+
{
81+
ProtobufSchema schemaWrapper = MAPPER.generateSchemaFor(WithNestedClass.class);
8182

8283
assertNotNull(schemaWrapper);
8384

8485
// System.out.println(schemaWrapper.getSource().toString());
8586
}
8687

87-
public void testWithIndexAnnotation() throws Exception {
88-
ObjectMapper mapper = new ProtobufMapper();
89-
ProtobufSchemaGenerator gen = new ProtobufSchemaGenerator();
90-
mapper.acceptJsonFormatVisitor(WithIndexAnnotation.class, gen);
91-
ProtobufSchema schemaWrapper = gen.getGeneratedSchema();
88+
public void testWithIndexAnnotation() throws Exception
89+
{
90+
ProtobufSchema schemaWrapper = MAPPER.generateSchemaFor(WithIndexAnnotation.class);
9291

9392
assertNotNull(schemaWrapper);
9493

@@ -102,10 +101,10 @@ public void testWithIndexAnnotation() throws Exception {
102101
}
103102

104103
public void testSelfRefPojoGenProtobufSchema() throws Exception {
105-
ObjectMapper mapper = new ProtobufMapper();
104+
ProtobufMapper mapper = new ProtobufMapper();
106105
ProtobufSchemaGenerator gen = new ProtobufSchemaGenerator();
107106
mapper.acceptJsonFormatVisitor(Employee.class, gen);
108-
ProtobufSchema schemaWrapper = gen.getGeneratedSchema();
107+
ProtobufSchema schemaWrapper = mapper.generateSchemaFor(Employee.class);
109108

110109
assertNotNull(schemaWrapper);
111110

0 commit comments

Comments
 (0)