|
|
@@ -1,5 +1,6 @@
|
|
|
package org.leumasjaffe.json.schema;
|
|
|
|
|
|
+import static com.fasterxml.jackson.databind.node.JsonNodeType.*;
|
|
|
import static org.hamcrest.core.Is.is;
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
|
@@ -8,11 +9,17 @@ import java.util.Map;
|
|
|
|
|
|
import org.junit.Test;
|
|
|
import org.leumasjaffe.json.schema.tester.EqualsTester;
|
|
|
+import org.leumasjaffe.json.schema.tester.FixedTester;
|
|
|
+import org.leumasjaffe.json.schema.tester.FormatTester;
|
|
|
+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 com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.node.DoubleNode;
|
|
|
import com.fasterxml.jackson.databind.node.NullNode;
|
|
|
+import com.fasterxml.jackson.databind.node.TextNode;
|
|
|
|
|
|
public class SchemaTest {
|
|
|
private Schema getConstSchema(JsonNode json) {
|
|
|
@@ -35,6 +42,15 @@ public class SchemaTest {
|
|
|
return new Schema(tests);
|
|
|
}
|
|
|
|
|
|
+ private Schema getStringSchema() {
|
|
|
+ Map<String, Tester> tests = new HashMap<>();
|
|
|
+ tests.put("maxLength", new SizeTester(STRING, s -> s <= 30));
|
|
|
+ tests.put("minLength", new SizeTester(STRING, s -> s >= 10));
|
|
|
+ tests.put("pattern", (StubTester) j -> j.asText().matches("^https://.*"));
|
|
|
+ tests.put("format", FormatTester.forCode("uri"));
|
|
|
+ return new Schema(tests);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testAcceptsAnyIfNoMatchers() {
|
|
|
assertThat(new Schema().acceptedTypes(), is(Tester.ANY));
|
|
|
@@ -42,7 +58,9 @@ public class SchemaTest {
|
|
|
|
|
|
@Test
|
|
|
public void testRejectsWrongType() {
|
|
|
- assertFalse(getNumberSchema().accepts(NullNode.getInstance()));
|
|
|
+ Map<String, Tester> tests = new HashMap<>();
|
|
|
+ tests.put("example", new MockTester(STRING, FixedTester.ACCEPT));
|
|
|
+ assertFalse(new Schema(tests).accepts(NullNode.getInstance()));
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
@@ -69,7 +87,7 @@ public class SchemaTest {
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void testHandlesUniversalChecks() {
|
|
|
+ public void testHandlesUniversalChecksForNumber() {
|
|
|
assertTrue(getConstSchema(new DoubleNode(0.0)).accepts(new DoubleNode(0.0)));
|
|
|
assertFalse(getConstSchema(new DoubleNode(0.0)).accepts(new DoubleNode(0.5)));
|
|
|
assertTrue(getEnumSchema(new DoubleNode(0.0), new DoubleNode(1.0))
|
|
|
@@ -79,5 +97,25 @@ public class SchemaTest {
|
|
|
assertFalse(getEnumSchema(new DoubleNode(0.0), new DoubleNode(1.0))
|
|
|
.accepts(new DoubleNode(0.5)));
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHandlesMultipleTestsForString() {
|
|
|
+ assertFalse(getStringSchema().accepts(new TextNode("https://a")));
|
|
|
+ assertTrue(getStringSchema().accepts(new TextNode("https://google.com")));
|
|
|
+ assertFalse(getStringSchema().accepts(new TextNode("http://google.com")));
|
|
|
+ assertFalse(getStringSchema().accepts(new TextNode("https://google.com/query?q=Hippopotomonstrosesquippedaliophobia")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHandlesUniversalChecksForString() {
|
|
|
+ assertTrue(getConstSchema(new TextNode("A")).accepts(new TextNode("A")));
|
|
|
+ assertFalse(getConstSchema(new TextNode("A")).accepts(new TextNode("C")));
|
|
|
+ assertTrue(getEnumSchema(new TextNode("A"), new TextNode("B"))
|
|
|
+ .accepts(new TextNode("A")));
|
|
|
+ assertTrue(getEnumSchema(new TextNode("A"), new TextNode("B"))
|
|
|
+ .accepts(new TextNode("B")));
|
|
|
+ assertFalse(getEnumSchema(new TextNode("A"), new TextNode("B"))
|
|
|
+ .accepts(new TextNode("C")));
|
|
|
+ }
|
|
|
|
|
|
}
|