浏览代码

Start writing tests for Schema...

Sam Jaffe 6 年之前
父节点
当前提交
598942021e

+ 9 - 0
src/main/lombok/org/leumasjaffe/json/schema/Schema.java

@@ -1,5 +1,7 @@
 package org.leumasjaffe.json.schema;
 
+import static org.leumasjaffe.json.schema.tester.FixedTester.ACCEPT;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -29,6 +31,7 @@ public class Schema implements Tester {
 
 	@Override
 	public JsonNodeType[] acceptedTypes() {
+		if (children.isEmpty()) return ANY;
 		final Set<JsonNodeType> set = new HashSet<>();
 		children.values().stream().map(Tester::acceptedTypes)
 				.forEach(a -> set.addAll(Arrays.asList(a)));
@@ -41,8 +44,14 @@ public class Schema implements Tester {
 			return true;
 		} else if (children.containsKey(SELF)) {
 			return children.get(SELF).accepts(node);
+		} else if (!canProcess(node)) {
+			return false;
 		}
 		// TODO
 		return false;
 	}
+
+	private boolean canProcess(JsonNode node) {
+		return Arrays.asList(acceptedTypes()).contains(node.getNodeType());
+	}
 }

+ 2 - 1
src/test/java/org/leumasjaffe/json/schema/JsonSchemaSuite.java

@@ -6,7 +6,8 @@ import org.junit.runners.Suite;
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
 	JsonFactorySuite.class,
-	JsonTesterSuite.class
+	JsonTesterSuite.class,
+	SchemaTest.class
 })
 public class JsonSchemaSuite {
 

+ 38 - 0
src/test/java/org/leumasjaffe/json/schema/SchemaTest.java

@@ -0,0 +1,38 @@
+package org.leumasjaffe.json.schema;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.leumasjaffe.json.schema.tester.NumberTester;
+
+import com.fasterxml.jackson.databind.node.DoubleNode;
+import com.fasterxml.jackson.databind.node.NullNode;
+
+public class SchemaTest {
+	private Schema getNumberSchema() {
+		Map<String, Tester> tests = new HashMap<>();
+		tests.put("minimum", new NumberTester(d -> d >= 0.0));
+		tests.put("exclusiveMaximum", new NumberTester(d -> d < 1.0));
+		return new Schema(tests);
+	}
+	
+	@Test
+	public void testAcceptsAnyIfNoMatchers() {
+		assertThat(new Schema().acceptedTypes(), is(Tester.ANY));
+	}
+
+	@Test
+	public void testRejectsWrongType() {
+		assertFalse(getNumberSchema().accepts(NullNode.getInstance()));
+	}
+
+	@Test
+	public void testHandlesMultipleTestsForNumber() {
+		assertTrue(getNumberSchema().accepts(new DoubleNode(0.5)));
+		assertFalse(getNumberSchema().accepts(new DoubleNode(1.0)));
+	}
+}