|
|
@@ -0,0 +1,329 @@
|
|
|
+package org.leumasjaffe.json.schema.factory;
|
|
|
+
|
|
|
+import static org.junit.Assert.*;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.junit.Before;
|
|
|
+import org.junit.Test;
|
|
|
+import org.leumasjaffe.json.schema.Tester;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
+import com.fasterxml.jackson.databind.node.BooleanNode;
|
|
|
+import com.fasterxml.jackson.databind.node.DoubleNode;
|
|
|
+import com.fasterxml.jackson.databind.node.IntNode;
|
|
|
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
|
+import com.fasterxml.jackson.databind.node.NullNode;
|
|
|
+import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
+import com.fasterxml.jackson.databind.node.TextNode;
|
|
|
+
|
|
|
+public class SchemaV6FactoryTest {
|
|
|
+ SchemaV6Factory factory;
|
|
|
+ ObjectMapper mapper;
|
|
|
+
|
|
|
+ @Before
|
|
|
+ public void setUp() {
|
|
|
+ factory = new SchemaV6Factory();
|
|
|
+ mapper = new ObjectMapper();
|
|
|
+ }
|
|
|
+
|
|
|
+ private JsonNode readTree(String data) {
|
|
|
+ try {
|
|
|
+ return mapper.readTree(data);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Tester fromSingleElement(String data) {
|
|
|
+ final JsonNode schema = readTree(data);
|
|
|
+ final Map.Entry<String, JsonNode> pair = schema.fields().next();
|
|
|
+ return factory.createMapping(pair.getKey(), pair.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testIDSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"$id\": \"test.json\" }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSchemaSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"$schema\": \"http://json-schema.org/draft-06/schema#\" }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testTitleSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"title\": \"This is a schema\" }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testDescriptionSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"description\": \"This is a schema\" }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testDefaultSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"default\": {} }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExamplesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"examples\": [] }");
|
|
|
+ assertTrue(test.accepts(NullNode.getInstance()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMultipleOfSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"multipleOf\": 1.5 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(3.0)));
|
|
|
+ assertTrue(test.accepts(new IntNode(3)));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(2.5)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMaximumSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"maximum\": 2.5 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(3.0)));
|
|
|
+ assertTrue(test.accepts(new IntNode(2)));
|
|
|
+ assertFalse(test.accepts(new IntNode(3)));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(2.5)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExclusiveMaximumSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"exclusiveMaximum\": 2.5 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(3.0)));
|
|
|
+ assertTrue(test.accepts(new IntNode(2)));
|
|
|
+ assertFalse(test.accepts(new IntNode(3)));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(2.5)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMinimumSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"minimum\": 2.5 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(3.0)));
|
|
|
+ assertFalse(test.accepts(new IntNode(2)));
|
|
|
+ assertTrue(test.accepts(new IntNode(3)));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(2.5)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testExclusiveMinimumSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"exclusiveMinimum\": 2.5 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertTrue(test.accepts(new DoubleNode(3.0)));
|
|
|
+ assertFalse(test.accepts(new IntNode(2)));
|
|
|
+ assertTrue(test.accepts(new IntNode(3)));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(2.5)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMaxLengthSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"maxLength\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertTrue(test.accepts(new TextNode("")));
|
|
|
+ assertFalse(test.accepts(new TextNode(" ")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMinLengthSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"minLength\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ assertFalse(test.accepts(new TextNode("")));
|
|
|
+ assertTrue(test.accepts(new TextNode(" ")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testPatternSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"pattern\": \"^\\\\s.*\" }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new TextNode("S ")));
|
|
|
+ assertTrue(test.accepts(new TextNode(" S")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAdditionalItemsSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"additionalItems\": false }");
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testItemsSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"items\": [ true, false ] }");
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testItemsSchemaSingle() {
|
|
|
+ Tester test = fromSingleElement("{ \"items\": true }");
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMaxItemsSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"maxItems\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ node.add(false);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMinItemsSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"minItems\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ node.add(false);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testUniqueItemsSchema() {
|
|
|
+ Tester uniq = fromSingleElement("{ \"uniqueItems\": true }");
|
|
|
+ Tester any = fromSingleElement("{ \"uniqueItems\": false }");
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+ node.add(false);
|
|
|
+ assertTrue(uniq.accepts(node));
|
|
|
+ assertTrue(any.accepts(node));
|
|
|
+ node.add(false);
|
|
|
+ assertFalse(uniq.accepts(node));
|
|
|
+ assertTrue(any.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testContainsSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"contains\": { } }");
|
|
|
+ final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
|
|
|
+
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+
|
|
|
+ node.add(new ObjectNode(JsonNodeFactory.instance));
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMaxPropertiesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"maxProperties\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ node.set("A", BooleanNode.FALSE);
|
|
|
+ node.set("B", BooleanNode.FALSE);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testMinPropertiesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"minProperties\": 2 }");
|
|
|
+ assertFalse(test.accepts(NullNode.getInstance()));
|
|
|
+ assertFalse(test.accepts(new DoubleNode(1.5)));
|
|
|
+ final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ node.set("A", BooleanNode.FALSE);
|
|
|
+ node.set("B", BooleanNode.FALSE);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testRequiredSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"required\": [ \"A\", \"B\" ] }");
|
|
|
+ final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
|
|
|
+ node.set("A", BooleanNode.FALSE);
|
|
|
+ node.set("C", BooleanNode.FALSE);
|
|
|
+ assertFalse(test.accepts(node));
|
|
|
+ node.set("B", BooleanNode.FALSE);
|
|
|
+ assertTrue(test.accepts(node));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAdditionalPropertiesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"additionalProperties\": false }");
|
|
|
+ assertTrue(test.accepts(readTree("{ }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"A\": {} }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"B\": {} }")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testPropertiesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"properties\": { \"A\": true, \"B\": false } }");
|
|
|
+ assertTrue(test.accepts(readTree("{ }")));
|
|
|
+ assertTrue(test.accepts(readTree("{ \"A\": {} }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"B\": {} }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"A\": {}, \"B\": {} }")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testPatternPropertiesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"patternProperties\": { \"A\": true, \"A.\": false } }");
|
|
|
+ assertTrue(test.accepts(readTree("{ }")));
|
|
|
+ assertTrue(test.accepts(readTree("{ \"A\": {} }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"A.\": {} }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"A_\": {} }")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testPropertyNamesSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"propertyNames\": false }");
|
|
|
+ assertTrue(test.accepts(readTree("{ }")));
|
|
|
+ assertFalse(test.accepts(readTree("{ \"A\": {} }")));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testConstSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"const\": { \"nice\": \"meme\" } }");
|
|
|
+ JsonNode matching = readTree("{ \"nice\": \"meme\" }");
|
|
|
+ assertTrue(test.accepts(matching));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testEnumSchema() {
|
|
|
+ Tester test = fromSingleElement("{ \"enum\": [ \"A\", \"B\", \"D\" ] }");
|
|
|
+ assertTrue(test.accepts(new TextNode("A")));
|
|
|
+ assertFalse(test.accepts(new TextNode("a")));
|
|
|
+ assertTrue(test.accepts(new TextNode("B")));
|
|
|
+ assertFalse(test.accepts(new TextNode("AB")));
|
|
|
+ assertFalse(test.accepts(new TextNode("C")));
|
|
|
+ assertTrue(test.accepts(new TextNode("D")));
|
|
|
+ }
|
|
|
+}
|