From 5a08861fcb8c5bc5831a6b99c192aba0a7933952 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 4 Oct 2014 11:46:20 -0400 Subject: test: New sangria-test project. --- .../sangria/test/BestPracticesMatcher.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 sangria-test/src/main/java/com/tavianator/sangria/test/BestPracticesMatcher.java (limited to 'sangria-test/src/main/java/com/tavianator/sangria/test/BestPracticesMatcher.java') diff --git a/sangria-test/src/main/java/com/tavianator/sangria/test/BestPracticesMatcher.java b/sangria-test/src/main/java/com/tavianator/sangria/test/BestPracticesMatcher.java new file mode 100644 index 0000000..36eea97 --- /dev/null +++ b/sangria-test/src/main/java/com/tavianator/sangria/test/BestPracticesMatcher.java @@ -0,0 +1,42 @@ +package com.tavianator.sangria.test; + +import com.google.inject.AbstractModule; +import com.google.inject.CreationException; +import com.google.inject.Guice; +import com.google.inject.Module; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeDiagnosingMatcher; + +/** + * Matcher that checks whether a {@link Module} follows Guice best practices. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.2 + * @since 1.2 + */ +final class BestPracticesMatcher extends TypeSafeDiagnosingMatcher { + private static final class EnforcerModule extends AbstractModule { + @Override + protected void configure() { + binder().requireAtInjectOnConstructors(); + binder().requireExactBindingAnnotations(); + binder().requireExplicitBindings(); + } + } + + @Override + protected boolean matchesSafely(Module item, Description mismatchDescription) { + try { + Guice.createInjector(item, new EnforcerModule()); + return true; + } catch (CreationException e) { + mismatchDescription.appendValue(e); + return false; + } + } + + @Override + public void describeTo(Description description) { + description.appendText("a Module following Guice best practices"); + } +} -- cgit v1.2.3