Skip to content

Commit 639b99e

Browse files
committed
started introducing ignore case
1 parent 5466739 commit 639b99e

File tree

5 files changed

+32
-15
lines changed

5 files changed

+32
-15
lines changed

hamcrest-core/src/main/java/org/hamcrest/core/StringContains.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
* Tests if the argument is a string that contains a substring.
1010
*/
1111
public class StringContains extends SubstringMatcher {
12-
public StringContains(String substring) {
13-
super("containing", substring);
12+
public StringContains(boolean ignoringCase, String substring) {
13+
super("containing", ignoringCase, substring);
1414
}
1515

1616
@Override
1717
protected boolean evalSubstringOf(String s) {
18-
return s.contains(substring);
18+
return s.toLowerCase().contains(substring.toLowerCase());
1919
}
2020

2121
/**
@@ -31,7 +31,11 @@ protected boolean evalSubstringOf(String s) {
3131
*/
3232
@Factory
3333
public static Matcher<String> containsString(String substring) {
34-
return new StringContains(substring);
34+
return new StringContains(false, substring);
35+
}
36+
@Factory
37+
public static Matcher<String> containsStringIgnoringCase(String substring) {
38+
return new StringContains(true, substring);
3539
}
3640

3741
}

hamcrest-core/src/main/java/org/hamcrest/core/StringEndsWith.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Tests if the argument is a string that contains a substring.
1010
*/
1111
public class StringEndsWith extends SubstringMatcher {
12-
public StringEndsWith(String substring) { super("ending with", substring); }
12+
public StringEndsWith(boolean ignoringCase, String substring) { super("ending with", ignoringCase, substring); }
1313

1414
@Override
1515
protected boolean evalSubstringOf(String s) {
@@ -28,7 +28,7 @@ protected boolean evalSubstringOf(String s) {
2828
*/
2929
@Factory
3030
public static Matcher<String> endsWith(String suffix) {
31-
return new StringEndsWith(suffix);
31+
return new StringEndsWith(false, suffix);
3232
}
3333

3434
}

hamcrest-core/src/main/java/org/hamcrest/core/StringStartsWith.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Tests if the argument is a string that contains a substring.
1010
*/
1111
public class StringStartsWith extends SubstringMatcher {
12-
public StringStartsWith(String substring) { super("starting with", substring); }
12+
public StringStartsWith(boolean ignoringCase, String substring) { super("starting with", ignoringCase, substring); }
1313

1414
@Override
1515
protected boolean evalSubstringOf(String s) {
@@ -27,8 +27,6 @@ protected boolean evalSubstringOf(String s) {
2727
* the substring that the returned matcher will expect at the start of any examined string
2828
*/
2929
@Factory
30-
public static Matcher<String> startsWith(String prefix) {
31-
return new StringStartsWith(prefix);
32-
}
30+
public static Matcher<String> startsWith(String prefix) { return new StringStartsWith(false, prefix); }
3331

3432
}

hamcrest-core/src/main/java/org/hamcrest/core/SubstringMatcher.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ public abstract class SubstringMatcher extends TypeSafeMatcher<String> {
99
// String, StringBuffer, StringBuilder, CharBuffer, etc (joe).
1010

1111
private final String relationship;
12+
private final boolean ignoringCase;
1213
protected final String substring;
1314

14-
protected SubstringMatcher(String relationship, String substring) {
15+
protected SubstringMatcher(String relationship, boolean ignoringCase, String substring) {
1516
this.relationship = relationship;
17+
this.ignoringCase = ignoringCase;
1618
this.substring = substring;
1719
}
1820

1921
@Override
2022
public boolean matchesSafely(String item) {
21-
return evalSubstringOf(item);
23+
return evalSubstringOf(ignoringCase ? item.toLowerCase() :item);
2224
}
2325
@Override
2426
public void describeMismatchSafely(String item, Description mismatchDescription) {
@@ -31,6 +33,9 @@ public void describeTo(Description description) {
3133
.appendText(relationship)
3234
.appendText(" ")
3335
.appendValue(substring);
36+
if (ignoringCase) {
37+
description.appendText(" ignoring case");
38+
}
3439
}
3540

3641
protected abstract boolean evalSubstringOf(String string);

hamcrest-core/src/test/java/org/hamcrest/core/StringContainsTest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package org.hamcrest.core;
44

55
import static org.hamcrest.core.StringContains.containsString;
6+
import static org.hamcrest.core.StringContains.containsStringIgnoringCase;
67

78
import org.hamcrest.AbstractMatcherTest;
89
import org.hamcrest.Matcher;
@@ -23,12 +24,21 @@ public void testMatchesSubstrings() {
2324
assertMatches(stringContains, "START" + EXCERPT);
2425
assertMatches(stringContains, "START" + EXCERPT + "END");
2526
assertMatches(stringContains, EXCERPT + EXCERPT);
27+
assertDoesNotMatch(stringContains, "XC");
28+
2629
assertMismatchDescription("was \"Something else\"", stringContains, "Something else");
27-
assertMismatchDescription("was \"XC\"", stringContains, "XC");
30+
assertDescription("a string containing \"EXCERPT\"", stringContains);
2831
}
2932

33+
public void testMatchesSubstringsIgnoringCase() {
34+
final Matcher<String> ignoringCase = containsStringIgnoringCase("ExCert");
35+
assertMatches(ignoringCase, "eXcERT" + "END");
36+
assertMatches(ignoringCase, "START" + "EXCert");
37+
assertMatches(ignoringCase, "START" + "excERT" + "END");
38+
assertMatches(ignoringCase, "eXCert" + "excErt");
39+
assertDoesNotMatch(ignoringCase, "xc");
3040

31-
public void testHasAReadableDescription() {
32-
assertDescription("a string containing \"EXCERPT\"", stringContains);
41+
assertMismatchDescription("was \"Something else\"", ignoringCase, "Something else");
42+
assertDescription("a string containing \"ExCert\" ignoring case", ignoringCase);
3343
}
3444
}

0 commit comments

Comments
 (0)