|
|
@@ -8,6 +8,7 @@ import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import org.junit.Test;
|
|
|
+import org.leumasjaffe.json.schema.tester.ContainsTester;
|
|
|
import org.leumasjaffe.json.schema.tester.EqualsTester;
|
|
|
import org.leumasjaffe.json.schema.tester.FixedTester;
|
|
|
import org.leumasjaffe.json.schema.tester.FormatTester;
|
|
|
@@ -16,6 +17,7 @@ import org.leumasjaffe.json.schema.tester.MockTester;
|
|
|
import org.leumasjaffe.json.schema.tester.NumberTester;
|
|
|
import org.leumasjaffe.json.schema.tester.SizeTester;
|
|
|
import org.leumasjaffe.json.schema.tester.StubTester;
|
|
|
+import org.leumasjaffe.json.schema.tester.UniqueItemTester;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
@@ -55,6 +57,15 @@ public class SchemaTest {
|
|
|
return new Schema(tests);
|
|
|
}
|
|
|
|
|
|
+ private Schema getArraySchema() {
|
|
|
+ Map<String, Tester> tests = new HashMap<>();
|
|
|
+ tests.put("maxItems", new SizeTester(ARRAY, s -> s <= 3));
|
|
|
+ tests.put("minItems", new SizeTester(ARRAY, s -> s >= 1));
|
|
|
+ tests.put("uniqueItems", new UniqueItemTester());
|
|
|
+ tests.put("contains", new ContainsTester(getNumberSchema()));
|
|
|
+ return new Schema(tests);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testAcceptsAnyIfNoMatchers() {
|
|
|
assertThat(new Schema().acceptedTypes().length, is(Tester.ANY.length));
|
|
|
@@ -134,6 +145,22 @@ public class SchemaTest {
|
|
|
.accepts(new TextNode("C")));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testHandlesMultipleTestsForArray() {
|
|
|
+ final ArrayNode array = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertFalse(getArraySchema().accepts(array));
|
|
|
+ array.add("Test");
|
|
|
+ assertFalse(getArraySchema().accepts(array));
|
|
|
+ array.add(0.5);
|
|
|
+ assertTrue(getArraySchema().accepts(array));
|
|
|
+ array.add(0.5);
|
|
|
+ assertFalse(getArraySchema().accepts(array));
|
|
|
+ array.remove(2);
|
|
|
+ array.add(true);
|
|
|
+ array.add(false);
|
|
|
+ assertFalse(getArraySchema().accepts(array));
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testHandlesAdditionalItemsMatcherWhenArrayItems() {
|
|
|
Map<String, Tester> tests = new HashMap<>();
|
|
|
@@ -155,4 +182,33 @@ public class SchemaTest {
|
|
|
assertTrue(new Schema(tests).accepts(node));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testHandlesAdditionalItemsNotCalledIfFailsInItems() {
|
|
|
+ Map<String, Tester> tests = new HashMap<>();
|
|
|
+ tests.put("items", new ItemsTester(getNumberSchema(), getStringSchema()));
|
|
|
+ tests.put("additionalItems", FixedTester.ACCEPT);
|
|
|
+ Schema schema = new Schema(tests);
|
|
|
+
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ node.add(0.5);
|
|
|
+ node.add("https://a");
|
|
|
+ node.add(true);
|
|
|
+ assertFalse(schema.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHandlesUniversalChecksForArray() {
|
|
|
+ final ArrayNode expected = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ expected.add(true);
|
|
|
+
|
|
|
+ Map<String, Tester> tests = new HashMap<>();
|
|
|
+ tests.put("const", new EqualsTester(expected));
|
|
|
+ Schema schema = new Schema(tests);
|
|
|
+
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertFalse(schema.accepts(node));
|
|
|
+ node.add(true);
|
|
|
+ assertTrue(schema.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
}
|