Skip to content

Commit 7240523

Browse files
committed
Validate against json schema
1 parent ec0725c commit 7240523

File tree

3 files changed

+347
-16
lines changed

3 files changed

+347
-16
lines changed

java/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,11 @@
109109
<version>1.5.3</version>
110110
<scope>test</scope>
111111
</dependency>
112+
113+
<dependency>
114+
<groupId>com.networknt</groupId>
115+
<artifactId>json-schema-validator</artifactId>
116+
<version>1.5.8</version>
117+
</dependency>
112118
</dependencies>
113119
</project>

java/src/test/java/io/cucumber/jsonformatter/MessagesToJsonWriterAcceptanceTest.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.cucumber.jsonformatter;
22

3+
import com.networknt.schema.InputFormat;
4+
import com.networknt.schema.JsonSchema;
5+
import com.networknt.schema.JsonSchemaFactory;
6+
import com.networknt.schema.ValidationMessage;
37
import io.cucumber.messages.NdjsonToMessageIterable;
48
import io.cucumber.messages.types.Envelope;
59
import org.json.JSONException;
@@ -15,32 +19,31 @@
1519
import java.nio.file.Files;
1620
import java.nio.file.Path;
1721
import java.nio.file.Paths;
22+
import java.util.ArrayList;
1823
import java.util.Comparator;
1924
import java.util.List;
2025
import java.util.Objects;
26+
import java.util.Set;
2127
import java.util.stream.Collectors;
2228
import java.util.stream.Stream;
2329

30+
import static com.networknt.schema.SpecVersion.VersionFlag.*;
2431
import static io.cucumber.jsonformatter.Jackson.OBJECT_MAPPER;
2532
import static io.cucumber.jsonformatter.Jackson.PRETTY_PRINTER;
2633
import static java.nio.charset.StandardCharsets.UTF_8;
34+
import static org.assertj.core.api.Assertions.assertThat;
2735

2836

2937
class MessagesToJsonWriterAcceptanceTest {
3038
private static final NdjsonToMessageIterable.Deserializer deserializer = (json) -> OBJECT_MAPPER.readValue(json, Envelope.class);
3139
private static final MessagesToJsonWriter.Serializer serializer = OBJECT_MAPPER.writer(PRETTY_PRINTER)::writeValue;
3240

33-
static List<TestCase> compatibilityKit() throws IOException {
34-
return TestCase.fromDirectory("../testdata/compatibility-kit");
35-
}
36-
37-
static List<TestCase> dialectsCucumberJvm726Java() throws IOException {
38-
return TestCase.fromDirectory("../testdata/cucumber-jvm/7.26.0-java/testdata");
39-
}
40-
41-
42-
static List<TestCase> dialectsCucumberJvm726Java8() throws IOException {
43-
return TestCase.fromDirectory("../testdata/cucumber-jvm/7.26.0-java8/testdata");
41+
static List<TestCase> all() throws IOException {
42+
List<TestCase> cases = new ArrayList<>();
43+
cases.addAll(TestCase.fromDirectory("../testdata/compatibility-kit"));
44+
cases.addAll(TestCase.fromDirectory("../testdata/cucumber-jvm/7.26.0-java/testdata"));
45+
cases.addAll(TestCase.fromDirectory("../testdata/cucumber-jvm/7.26.0-java8/testdata"));
46+
return cases;
4447
}
4548

4649
private static <T extends OutputStream> T writeJsonReport(TestCase testCase, T out) throws IOException {
@@ -62,19 +65,28 @@ private static void assertJsonEquals(String expected, String actual) throws JSON
6265
}
6366

6467
@ParameterizedTest
65-
@MethodSource("compatibilityKit")
66-
@MethodSource("dialectsCucumberJvm726Java")
67-
@MethodSource("dialectsCucumberJvm726Java8")
68+
@MethodSource("all")
6869
void testCompatibilityKit(TestCase testCase) throws IOException, JSONException {
6970
ByteArrayOutputStream actual = writeJsonReport(testCase, new ByteArrayOutputStream());
7071
byte[] expected = Files.readAllBytes(testCase.expected);
7172
assertJsonEquals(new String(expected, UTF_8), new String(actual.toByteArray(), UTF_8));
7273
}
7374

7475
@ParameterizedTest
75-
@MethodSource("compatibilityKit")
76+
@MethodSource("all")
7677
void validateAgainstJsonSchema(TestCase testCase) throws IOException {
77-
// TODO:
78+
JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.getInstance(V202012);
79+
80+
InputStream resourceAsStream = MessagesToJsonWriterAcceptanceTest.class.getResourceAsStream("/cucumber-jvm.json");
81+
JsonSchema schema = jsonSchemaFactory.getSchema(resourceAsStream);
82+
ByteArrayOutputStream actual = writeJsonReport(testCase, new ByteArrayOutputStream());
83+
84+
Set<ValidationMessage> assertions = schema.validate(
85+
new String(actual.toByteArray(), UTF_8),
86+
InputFormat.JSON,
87+
// By default, since Draft 2019-09 the format keyword only generates annotations and not assertions
88+
executionContext -> executionContext.getExecutionConfig().setFormatAssertionsEnabled(true));
89+
assertThat(assertions).isEmpty();
7890
}
7991

8092
@ParameterizedTest

0 commit comments

Comments
 (0)