Bladeren bron

Add matchers for Accepts, AcceptedTypes, and an override to Not that propagates describeMismatch()

Sam Jaffe 6 jaren geleden
bovenliggende
commit
baa2add52f

+ 47 - 0
src/test/java/org/leumasjaffe/json/schema/matcher/AcceptedTypes.java

@@ -0,0 +1,47 @@
+package org.leumasjaffe.json.schema.matcher;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.leumasjaffe.json.schema.Tester;
+
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+
+public class AcceptedTypes extends BaseMatcher<Tester> {
+	public static Matcher<Tester> acceptsTypes(JsonNodeType...types) {
+		return new AcceptedTypes(types);
+	}
+	
+	Set<JsonNodeType> typesAccepted;
+
+	private AcceptedTypes(JsonNodeType...types) {
+		typesAccepted = new HashSet<>(Arrays.asList(types));
+	}
+
+	@Override
+	public boolean matches(Object arg0) {
+		if (!(arg0 instanceof Tester)) {
+			return false;
+		}
+		return actualTypes((Tester) arg0).equals(typesAccepted);
+	}
+
+	private Set<JsonNodeType> actualTypes(Tester arg0) {
+		return new HashSet<>(Arrays.asList(arg0.acceptedTypes()));
+	}
+
+	@Override
+	public void describeTo(Description arg0) {
+		arg0.appendText("accepts types ").appendValue(typesAccepted);
+	}
+
+	@Override
+	public void describeMismatch(Object arg0, Description arg1) {
+		arg1.appendText("instead accepts ").appendValue(actualTypes((Tester) arg0));
+	}
+
+}

+ 35 - 0
src/test/java/org/leumasjaffe/json/schema/matcher/Accepts.java

@@ -0,0 +1,35 @@
+package org.leumasjaffe.json.schema.matcher;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.leumasjaffe.json.schema.Tester;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class Accepts extends BaseMatcher<Tester> {
+	public static Matcher<Tester> accepts(JsonNode json) {
+		return new Accepts(json);
+	}
+	
+	JsonNode jsonToMatch;
+
+	private Accepts(JsonNode json) {
+		jsonToMatch = json;
+	}
+
+	@Override
+	public boolean matches(Object arg0) {
+		if (!(arg0 instanceof Tester)) {
+			return false;
+		}
+		return ((Tester) arg0).accepts(jsonToMatch);
+	}
+
+	@Override
+	public void describeTo(Description arg0) {
+		arg0.appendText("the schema accepts JSON ");
+		arg0.appendValue(jsonToMatch);
+	}
+	
+}

+ 33 - 0
src/test/java/org/leumasjaffe/json/schema/matcher/Not.java

@@ -0,0 +1,33 @@
+package org.leumasjaffe.json.schema.matcher;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+public class Not<T> extends BaseMatcher<T> {
+	public static <T> BaseMatcher<T> not(Matcher<T> matcher) {
+		return new Not<>(matcher);
+	}
+	
+	private final Matcher<T> matcher;
+
+	public Not(Matcher<T> matcher) {
+		this.matcher = matcher;
+	}
+
+	@Override
+	public boolean matches(Object item) {
+		return !matcher.matches(item);
+	}
+
+	@Override
+	public void describeTo(Description description) {
+		description.appendText("not ");
+		matcher.describeTo(description);
+	}
+
+	@Override
+	public void describeMismatch(Object arg0, Description arg1) {
+		matcher.describeMismatch(arg0, arg1);
+	}
+}