浏览代码

Add tests and impl that Number tests will perform universal checks as well

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

+ 12 - 2
src/main/lombok/org/leumasjaffe/json/schema/Schema.java

@@ -20,10 +20,11 @@ import lombok.experimental.FieldDefaults;
 @FieldDefaults(level=AccessLevel.PRIVATE)
 public class Schema implements Tester {
 	private static final String SELF = "$self";
+	private static final List<String> UNIVERSAL_MATCHERS = Arrays.asList(
+			"const", "enum");
 	private static final List<String> NUMBER_MATCHERS = Arrays.asList(
 		"multipleOf", "minimum", "exclusiveMinimum", "maximum",
-		"exclusiveMaximum"
-	);
+		"exclusiveMaximum");
 	Map<String, Tester> children = new HashMap<>();
 	
 	public Schema(Tester self) {
@@ -66,6 +67,15 @@ public class Schema implements Tester {
 				return false;
 			}
 		}
+		return acceptsUniversal(node);
+	}
+
+	private boolean acceptsUniversal(JsonNode node) {
+		for (String key : getKeys(UNIVERSAL_MATCHERS)) {
+			if (!children.get(key).accepts(node)) {
+				return false;
+			}
+		}
 		return true;
 	}
 

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

@@ -7,12 +7,26 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.junit.Test;
+import org.leumasjaffe.json.schema.tester.EqualsTester;
 import org.leumasjaffe.json.schema.tester.NumberTester;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.DoubleNode;
 import com.fasterxml.jackson.databind.node.NullNode;
 
 public class SchemaTest {
+	private Schema getConstSchema(JsonNode json) {
+		Map<String, Tester> tests = new HashMap<>();
+		tests.put("const", new EqualsTester(json));
+		return new Schema(tests);
+	}
+	
+	private Schema getEnumSchema(JsonNode... jsons) {
+		Map<String, Tester> tests = new HashMap<>();
+		tests.put("enum", new EqualsTester(jsons));
+		return new Schema(tests);
+	}
+
 	private Schema getNumberSchema() {
 		Map<String, Tester> tests = new HashMap<>();
 		tests.put("minimum", new NumberTester(d -> d >= 0.0));
@@ -54,4 +68,16 @@ public class SchemaTest {
 		assertFalse(schema.accepts(new DoubleNode(1.1)));
 	}
 
+	@Test
+	public void testHandlesUniversalChecks() {		
+		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))
+				.accepts(new DoubleNode(0.0)));
+		assertTrue(getEnumSchema(new DoubleNode(0.0), new DoubleNode(1.0))
+				.accepts(new DoubleNode(1.0)));
+		assertFalse(getEnumSchema(new DoubleNode(0.0), new DoubleNode(1.0))
+				.accepts(new DoubleNode(0.5)));
+	}
+
 }