diff --git a/hamcrest/src/main/java/org/hamcrest/text/IsBlankString.java b/hamcrest/src/main/java/org/hamcrest/text/IsBlankString.java index b168541b..ae0991c0 100644 --- a/hamcrest/src/main/java/org/hamcrest/text/IsBlankString.java +++ b/hamcrest/src/main/java/org/hamcrest/text/IsBlankString.java @@ -5,8 +5,6 @@ import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; -import java.util.regex.Pattern; - import static org.hamcrest.core.AnyOf.anyOf; import static org.hamcrest.core.IsNull.nullValue; @@ -18,13 +16,20 @@ public final class IsBlankString extends TypeSafeMatcher { @SuppressWarnings("unchecked") private static final Matcher NULL_OR_BLANK_INSTANCE = anyOf(nullValue(), BLANK_INSTANCE); - private static final Pattern REGEX_WHITESPACE = Pattern.compile("\\s*"); - private IsBlankString() { } @Override public boolean matchesSafely(String item) { - return REGEX_WHITESPACE.matcher(item).matches(); + final int length = item.length(); + int offset = 0; + while (offset < length) { + final int codePoint = item.codePointAt(offset); + if (!Character.isWhitespace(codePoint)) { + return false; + } + offset += Character.charCount(codePoint); + } + return true; } @Override diff --git a/hamcrest/src/test/java/org/hamcrest/text/IsBlankStringTest.java b/hamcrest/src/test/java/org/hamcrest/text/IsBlankStringTest.java index c5f35f1c..e2506dff 100644 --- a/hamcrest/src/test/java/org/hamcrest/text/IsBlankStringTest.java +++ b/hamcrest/src/test/java/org/hamcrest/text/IsBlankStringTest.java @@ -34,6 +34,27 @@ public final class IsBlankStringTest { assertMatches(blankString(), " \t"); assertMatches(blankOrNullString(), " \t"); } + + @Test public void + matchesAllCharactersConsideredWhitespaceByJavaLangCharacter() { + // See Javadocs for Character.isWhitespace + String[] consideredBlankByJavaLangCharacter = new String[] { + "\t", + "\n", + "\u000B", + "\f", + "\r", + "\u001C", + "\u001D", + "\u001E", + "\u001F" + }; + + for(String string : consideredBlankByJavaLangCharacter) { + assertMatches(blankString(), string); + assertMatches(blankOrNullString(), string); + } + } @Test public void doesNotMatchFilledString() { @@ -52,4 +73,5 @@ public final class IsBlankStringTest { assertMismatchDescription("was \"a\"", blankString(), "a"); assertMismatchDescription("was \"a\"", blankOrNullString(), "a"); } + }