diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2014-10-04 12:52:32 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2014-10-04 12:52:32 -0400 |
commit | 3fd5777a58f59218e3229c9ea11d816ecc6ae367 (patch) | |
tree | 53f937505806e010d2bc3134fa5507d0ff78d32c /sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java | |
parent | b0bb30831a334ff30e3e6a13790bbc324db89de5 (diff) | |
parent | 8e24a47b69f940c31ac95451b4584b95de7c8670 (diff) | |
download | sangria-3fd5777a58f59218e3229c9ea11d816ecc6ae367.tar.xz |
Merge branch 'test'
Diffstat (limited to 'sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java')
-rw-r--r-- | sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java b/sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java new file mode 100644 index 0000000..03c897e --- /dev/null +++ b/sangria-test/src/main/java/com/tavianator/sangria/test/AtomicMatcher.java @@ -0,0 +1,38 @@ +package com.tavianator.sangria.test; + +import com.google.inject.CreationException; +import com.google.inject.Guice; +import com.google.inject.Module; +import com.google.inject.spi.Elements; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeDiagnosingMatcher; + +/** + * Matcher that checks whether a {@link Module} can be installed multiple times. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.2 + * @since 1.2 + */ +final class AtomicMatcher extends TypeSafeDiagnosingMatcher<Module> { + @Override + protected boolean matchesSafely(Module item, Description mismatchDescription) { + // Pass through the SPI to make sure the Module is atomic regardless of its equals() implementation + // This ensures atomicity even through Modules.override(), for example + Module copy1 = Elements.getModule(Elements.getElements(item)); + Module copy2 = Elements.getModule(Elements.getElements(item)); + + try { + Guice.createInjector(copy1, copy2); + return true; + } catch (CreationException e) { + mismatchDescription.appendValue(e); + return false; + } + } + + @Override + public void describeTo(Description description) { + description.appendText("an atomic Module"); + } +} |