瀏覽代碼

Move ACCEPT/REJECT out of Tester

Sam Jaffe 6 年之前
父節點
當前提交
c4054d9a76

+ 0 - 2
src/main/lombok/org/leumasjaffe/json/schema/Tester.java

@@ -3,7 +3,5 @@ package org.leumasjaffe.json.schema;
 import com.fasterxml.jackson.databind.JsonNode;
 
 public interface Tester {
-	static final Tester ACCEPT = j -> true;
-	static final Tester REJECT = j -> false;
 	boolean accepts(final JsonNode node);
 }

+ 2 - 1
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaFactory.java

@@ -6,6 +6,7 @@ import java.util.regex.Pattern;
 import org.leumasjaffe.json.JsonHelper;
 import org.leumasjaffe.json.schema.Schema;
 import org.leumasjaffe.json.schema.Tester;
+import org.leumasjaffe.json.schema.tester.FixedTester;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
@@ -13,7 +14,7 @@ public class SchemaFactory {
 	public final Tester create(final JsonNode object) {
 		switch (object.getNodeType()) {
 		case BOOLEAN:
-			return new Schema(object.asBoolean() ? Tester.ACCEPT : Tester.REJECT);
+			return new Schema(object.asBoolean() ? FixedTester.ACCEPT : FixedTester.REJECT);
 		case OBJECT:
 			final SchemaFactory versioned = getVersionFactory(object.path("$ref").asText());
 			return new Schema(JsonHelper.fields(object, versioned::createMapping));

+ 8 - 7
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaV6Factory.java

@@ -8,6 +8,7 @@ import org.leumasjaffe.json.schema.tester.AllItemsTester;
 import org.leumasjaffe.json.schema.tester.AllOfTester;
 import org.leumasjaffe.json.schema.tester.AnyOfTester;
 import org.leumasjaffe.json.schema.tester.ContainsTester;
+import org.leumasjaffe.json.schema.tester.FixedTester;
 import org.leumasjaffe.json.schema.tester.FormatTester;
 import org.leumasjaffe.json.schema.tester.ItemsTester;
 import org.leumasjaffe.json.schema.tester.NotTester;
@@ -31,13 +32,13 @@ class SchemaV6Factory extends SchemaFactory {
 	@Override
 	protected Tester createMapping(final String key, final JsonNode value) {
 		switch (key) {
-		case "$id": return Tester.ACCEPT;
-		case "$schema": return Tester.ACCEPT;
+		case "$id": return FixedTester.ACCEPT;
+		case "$schema": return FixedTester.ACCEPT;
 		// case "$ref": ; // TODO Implement reference propagating
-		case "title": return Tester.ACCEPT;
-		case "description": return Tester.ACCEPT;
-		case "default": return Tester.ACCEPT;
-		case "examples": return Tester.ACCEPT;
+		case "title": return FixedTester.ACCEPT;
+		case "description": return FixedTester.ACCEPT;
+		case "default": return FixedTester.ACCEPT;
+		case "examples": return FixedTester.ACCEPT;
 		case "multipleOf": return new NumberTester(d -> d % value.asDouble() == 0);
 		case "maximum": return new NumberTester(d -> d <= value.asDouble());
 		case "exclusiveMaximum": return new NumberTester(d -> d < value.asDouble());
@@ -50,7 +51,7 @@ class SchemaV6Factory extends SchemaFactory {
 		case "items": return value.isArray() ? new ItemsTester(createArray(value)) : new AllItemsTester(create(value));
 		case "maxItems": return new SizeTester(JsonNodeType.ARRAY, i -> i < value.asInt());
 		case "minItems": return new SizeTester(JsonNodeType.ARRAY, i -> i >= value.asInt(0));
-		case "uniqueItems": return value.asBoolean() ? UniqueItemTester.INSTANCE : Tester.ACCEPT;
+		case "uniqueItems": return value.asBoolean() ? UniqueItemTester.INSTANCE : FixedTester.ACCEPT;
 		case "contains": return new ContainsTester(create(value));
 		case "maxProperties": return new SizeTester(JsonNodeType.OBJECT, i -> i < value.asInt());
 		case "minProperties": return new SizeTester(JsonNodeType.OBJECT, i -> i >= value.asInt(0));

+ 30 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/FixedTester.java

@@ -0,0 +1,30 @@
+package org.leumasjaffe.json.schema.tester;
+
+import org.leumasjaffe.json.schema.Tester;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.FieldDefaults;
+
+@RequiredArgsConstructor
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class FixedTester implements Tester {
+	public static final FixedTester ACCEPT = new FixedTester(true);
+	public static final FixedTester REJECT = new FixedTester(false);
+	
+	static final JsonNodeType[] ANY = {
+			JsonNodeType.ARRAY, JsonNodeType.OBJECT, JsonNodeType.STRING,
+			JsonNodeType.NUMBER, JsonNodeType.BOOLEAN, JsonNodeType.NULL
+	};
+	boolean returns;
+
+
+	@Override
+	public boolean accepts(JsonNode node) {
+		return returns;
+	}
+
+}

+ 3 - 4
src/test/java/org/leumasjaffe/json/schema/tester/AllItemsTesterTest.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.json.schema.tester;
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.leumasjaffe.json.schema.Tester;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -14,13 +13,13 @@ public class AllItemsTesterTest {
 
 	@Test
 	public void testRejectsNonArray() {
-		assertFalse(new AllItemsTester(Tester.ACCEPT).accepts(NullNode.getInstance()));
+		assertFalse(new AllItemsTester(FixedTester.ACCEPT).accepts(NullNode.getInstance()));
 	}
 
 	@Test
 	public void testAcceptsEmptyArray() {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
-		assertTrue(new AllItemsTester(Tester.ACCEPT).accepts(node));
+		assertTrue(new AllItemsTester(FixedTester.ACCEPT).accepts(node));
 	}
 	
 	@Test
@@ -28,7 +27,7 @@ public class AllItemsTesterTest {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
 		node.add(false);
 		node.add(true);
-		assertFalse(new AllItemsTester(Tester.REJECT).accepts(node));
+		assertFalse(new AllItemsTester(FixedTester.REJECT).accepts(node));
 	}
 	
 	@Test

+ 3 - 4
src/test/java/org/leumasjaffe/json/schema/tester/ContainsTesterTest.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.json.schema.tester;
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.leumasjaffe.json.schema.Tester;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -14,13 +13,13 @@ public class ContainsTesterTest {
 
 	@Test
 	public void testRejectsNonArray() {
-		assertFalse(new ContainsTester(Tester.ACCEPT).accepts(NullNode.getInstance()));
+		assertFalse(new ContainsTester(FixedTester.ACCEPT).accepts(NullNode.getInstance()));
 	}
 
 	@Test
 	public void testRejectsEmptyArray() {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
-		assertFalse(new ContainsTester(Tester.ACCEPT).accepts(node));
+		assertFalse(new ContainsTester(FixedTester.ACCEPT).accepts(node));
 	}
 	
 	@Test
@@ -28,7 +27,7 @@ public class ContainsTesterTest {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
 		node.add(false);
 		node.add(true);
-		assertFalse(new ContainsTester(Tester.REJECT).accepts(node));
+		assertFalse(new ContainsTester(FixedTester.REJECT).accepts(node));
 	}
 	
 	@Test

+ 4 - 5
src/test/java/org/leumasjaffe/json/schema/tester/ItemsTesterTest.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.json.schema.tester;
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.leumasjaffe.json.schema.Tester;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -14,13 +13,13 @@ public class ItemsTesterTest {
 
 	@Test
 	public void testRejectsNonArray() {
-		assertFalse(new ItemsTester(Tester.ACCEPT).accepts(NullNode.getInstance()));
+		assertFalse(new ItemsTester(FixedTester.ACCEPT).accepts(NullNode.getInstance()));
 	}
 
 	@Test
 	public void testAcceptsEmptyArray() {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
-		assertTrue(new ItemsTester(Tester.ACCEPT).accepts(node));
+		assertTrue(new ItemsTester(FixedTester.ACCEPT).accepts(node));
 	}
 	
 	@Test
@@ -28,7 +27,7 @@ public class ItemsTesterTest {
 		final ArrayNode node = new ArrayNode(JsonNodeFactory.instance);
 		node.add(false);
 		node.add(true);
-		assertFalse(new ItemsTester(Tester.REJECT).accepts(node));
+		assertFalse(new ItemsTester(FixedTester.REJECT).accepts(node));
 	}
 	
 	@Test
@@ -45,6 +44,6 @@ public class ItemsTesterTest {
 		node.add(true);
 		node.add(false);
 		assertTrue(new ItemsTester(JsonNode::asBoolean,
-				Tester.ACCEPT, Tester.REJECT).accepts(node));
+				FixedTester.ACCEPT, FixedTester.REJECT).accepts(node));
 	}
 }

+ 2 - 3
src/test/java/org/leumasjaffe/json/schema/tester/PropertyNameTesterTest.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.json.schema.tester;
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.leumasjaffe.json.schema.Tester;
 
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.NullNode;
@@ -13,14 +12,14 @@ public class PropertyNameTesterTest {
 
 	@Test
 	public void testPassesEmptyObject() {
-		PropertyNameTester test = new PropertyNameTester(Tester.REJECT);
+		PropertyNameTester test = new PropertyNameTester(FixedTester.REJECT);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		assertTrue(test.accepts(node));
 	}
 	
 	@Test
 	public void testRejectsIfNameFails() {
-		PropertyNameTester test = new PropertyNameTester(Tester.REJECT);
+		PropertyNameTester test = new PropertyNameTester(FixedTester.REJECT);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());
 		assertFalse(test.accepts(node));

+ 10 - 10
src/test/java/org/leumasjaffe/json/schema/tester/PropertyTesterTest.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.json.schema.tester;
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.leumasjaffe.json.schema.Tester;
 import org.leumasjaffe.json.schema.tester.PropertyTester.Pair;
 
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
@@ -22,7 +21,8 @@ public class PropertyTesterTest {
 
 	@Test
 	public void testFailsIfMatchFails() {
-		PropertyTester test = new PropertyTester(new Pair(s -> s.equals("A"), Tester.REJECT));
+		PropertyTester test = new PropertyTester(new Pair(s -> s.equals("A"),
+				FixedTester.REJECT));
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());
 		assertFalse(test.accepts(node));
@@ -31,8 +31,8 @@ public class PropertyTesterTest {
 	@Test
 	public void testFailsIfAnyMatchFails() {
 		PropertyTester test = new PropertyTester(
-				new Pair(s -> s.equals("A"), Tester.ACCEPT),
-				new Pair(s -> s.equals("B"), Tester.REJECT)
+				new Pair(s -> s.equals("A"), FixedTester.ACCEPT),
+				new Pair(s -> s.equals("B"), FixedTester.REJECT)
 				);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());
@@ -43,8 +43,8 @@ public class PropertyTesterTest {
 	@Test
 	public void testFailsIfMoreThanOneMatcherForKey() {
 		PropertyTester test = new PropertyTester(
-				new Pair(s -> s.equals("A"), Tester.ACCEPT),
-				new Pair(s -> s.equals("A"), Tester.REJECT)
+				new Pair(s -> s.equals("A"), FixedTester.ACCEPT),
+				new Pair(s -> s.equals("A"), FixedTester.REJECT)
 				);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());
@@ -55,8 +55,8 @@ public class PropertyTesterTest {
 	@Test
 	public void testPassesIfAllPass() {
 		PropertyTester test = new PropertyTester(
-				new Pair(s -> s.equals("A"), Tester.ACCEPT),
-				new Pair(s -> s.equals("B"), Tester.ACCEPT)
+				new Pair(s -> s.equals("A"), FixedTester.ACCEPT),
+				new Pair(s -> s.equals("B"), FixedTester.ACCEPT)
 				);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());
@@ -67,8 +67,8 @@ public class PropertyTesterTest {
 	@Test
 	public void testPairMatcherCanOperateOnMultipleKeys() {
 		PropertyTester test = new PropertyTester(
-				new Pair(s -> s.length() == 1, Tester.ACCEPT),
-				new Pair(s -> s.equals("B"), Tester.ACCEPT)
+				new Pair(s -> s.length() == 1, FixedTester.ACCEPT),
+				new Pair(s -> s.equals("B"), FixedTester.ACCEPT)
 				);
 		final ObjectNode node = new ObjectNode(JsonNodeFactory.instance);
 		node.set("A", NullNode.getInstance());