aboutsummaryrefslogtreecommitdiff
path: root/hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java')
-rw-r--r--hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java b/hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java
new file mode 100644
index 0000000..85c6657
--- /dev/null
+++ b/hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java
@@ -0,0 +1,44 @@
+package org.hamcrest.core;
+
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeMatcher;
+
+public abstract class SubstringMatcher extends TypeSafeMatcher<String> {
+
+ // TODO: Replace String with CharSequence to allow for easy interoperability between
+ // String, StringBuffer, StringBuilder, CharBuffer, etc (joe).
+
+ private final String relationship;
+ private final boolean ignoringCase;
+ protected final String substring;
+
+ protected SubstringMatcher(String relationship, boolean ignoringCase, String substring) {
+ this.relationship = relationship;
+ this.ignoringCase = ignoringCase;
+ this.substring = substring;
+ }
+
+ @Override
+ public boolean matchesSafely(String item) {
+ return evalSubstringOf(ignoringCase ? item.toLowerCase() :item);
+ }
+ @Override
+ public void describeMismatchSafely(String item, Description mismatchDescription) {
+ mismatchDescription.appendText("was \"").appendText(item).appendText("\"");
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("a string ")
+ .appendText(relationship)
+ .appendText(" ")
+ .appendValue(substring);
+ if (ignoringCase) {
+ description.appendText(" ignoring case");
+ }
+ }
+
+ protected String converted(String arg) { return ignoringCase ? arg.toLowerCase() : arg; }
+ protected abstract boolean evalSubstringOf(String string);
+
+}