diff options
Diffstat (limited to 'guava-tests/test/com/google/common/base/CharMatcherTest.java')
-rw-r--r-- | guava-tests/test/com/google/common/base/CharMatcherTest.java | 222 |
1 files changed, 41 insertions, 181 deletions
diff --git a/guava-tests/test/com/google/common/base/CharMatcherTest.java b/guava-tests/test/com/google/common/base/CharMatcherTest.java index 9bdd200..5fe5662 100644 --- a/guava-tests/test/com/google/common/base/CharMatcherTest.java +++ b/guava-tests/test/com/google/common/base/CharMatcherTest.java @@ -25,18 +25,11 @@ import static com.google.common.base.CharMatcher.noneOf; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.Sets; import com.google.common.testing.NullPointerTester; import junit.framework.AssertionFailedError; import junit.framework.TestCase; -import java.util.Arrays; -import java.util.BitSet; -import java.util.HashSet; -import java.util.Random; -import java.util.Set; - /** * Unit test for {@link CharMatcher}. * @@ -75,7 +68,7 @@ public class CharMatcherTest extends TestCase { assertSame(WHATEVER, CharMatcher.NONE.or(WHATEVER)); } - // The rest of the behavior of ANY and DEFAULT will be covered in the tests for + // The rest of the behavior of ANY and NONE will be covered in the tests for // the text processing methods below. // The next tests require ICU4J and have, at least for now, been sliced out @@ -89,6 +82,8 @@ public class CharMatcherTest extends TestCase { } } + // There's no way to test LEGACY_WHITESPACE, really; it just is what it is. + // Omitting tests for the rest of the JAVA_* constants as these are defined // as extremely straightforward pass-throughs to the JDK methods. @@ -99,34 +94,6 @@ public class CharMatcherTest extends TestCase { // method, but by overall "scenario". Also, the variety of actual tests we // do borders on absurd overkill. Better safe than sorry, though? - @GwtIncompatible("java.util.BitSet") - public void testSetBits() { - doTestSetBits(CharMatcher.ANY); - doTestSetBits(CharMatcher.NONE); - doTestSetBits(is('a')); - doTestSetBits(isNot('a')); - doTestSetBits(anyOf("")); - doTestSetBits(anyOf("x")); - doTestSetBits(anyOf("xy")); - doTestSetBits(anyOf("CharMatcher")); - doTestSetBits(noneOf("CharMatcher")); - doTestSetBits(inRange('n', 'q')); - doTestSetBits(forPredicate(Predicates.equalTo('c'))); - doTestSetBits(CharMatcher.ASCII); - doTestSetBits(CharMatcher.DIGIT); - doTestSetBits(CharMatcher.INVISIBLE); - doTestSetBits(inRange('A', 'Z').and(inRange('F', 'K').negate())); - } - - @GwtIncompatible("java.util.BitSet") - private void doTestSetBits(CharMatcher matcher) { - BitSet bitset = new BitSet(); - matcher.setBits(bitset); - for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; i++) { - assertEquals(matcher.matches((char) i), bitset.get(i)); - } - } - public void testEmpty() throws Exception { doTestEmpty(CharMatcher.ANY); doTestEmpty(CharMatcher.NONE); @@ -372,11 +339,14 @@ public class CharMatcherTest extends TestCase { assertFalse(matcher.matchesAllOf(s)); assertTrue(matcher.matchesNoneOf(s)); - assertSame(s, matcher.removeFrom(s)); - assertSame(s, matcher.replaceFrom(s, 'z')); - assertSame(s, matcher.replaceFrom(s, "ZZ")); - assertSame(s, matcher.trimFrom(s)); - assertSame(0, matcher.countIn(s)); + // Note: only 'assertEquals' is promised by the API. Although they could + // have been assertSame() on the server side, they have to be assertEquals + // in GWT, because of GWT issue 4491. + assertEquals(s, matcher.removeFrom(s)); + assertEquals(s, matcher.replaceFrom(s, 'z')); + assertEquals(s, matcher.replaceFrom(s, "ZZ")); + assertEquals(s, matcher.trimFrom(s)); + assertEquals(0, matcher.countIn(s)); } private void reallyTestMatchThenNoMatch(CharMatcher matcher, String s) { @@ -411,23 +381,10 @@ public class CharMatcherTest extends TestCase { assertEquals(1, matcher.countIn(s)); } - /** - * Checks that expected is equals to out, and further, if in is - * equals to expected, then out is successfully optimized to be - * identical to in, i.e. that "in" is simply returned. - */ - private void assertEqualsSame(String expected, String in, String out) { - if (expected.equals(in)) { - assertSame(in, out); - } else { - assertEquals(expected, out); - } - } - // Test collapse() a little differently than the rest, as we really want to // cover lots of different configurations of input text public void testCollapse() { - // collapsing groups of '-' into '_' or '-' + // collapsing groups of - into _ doTestCollapse("-", "_"); doTestCollapse("x-", "x_"); doTestCollapse("-x", "_x"); @@ -454,29 +411,30 @@ public class CharMatcherTest extends TestCase { private void doTestCollapse(String in, String out) { // Try a few different matchers which all match '-' and not 'x' - // Try replacement chars that both do and do not change the value. - for (char replacement : new char[] { '_', '-' }) { - String expected = out.replace('_', replacement); - assertEqualsSame(expected, in, is('-').collapseFrom(in, replacement)); - assertEqualsSame(expected, in, is('-').collapseFrom(in, replacement)); - assertEqualsSame(expected, in, is('-').or(is('#')).collapseFrom(in, replacement)); - assertEqualsSame(expected, in, isNot('x').collapseFrom(in, replacement)); - assertEqualsSame(expected, in, is('x').negate().collapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-").collapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-#").collapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-#123").collapseFrom(in, replacement)); - } + assertEquals(out, is('-').collapseFrom(in, '_')); + assertEquals(out, is('-').or(is('#')).collapseFrom(in, '_')); + assertEquals(out, isNot('x').collapseFrom(in, '_')); + assertEquals(out, is('x').negate().collapseFrom(in, '_')); + assertEquals(out, anyOf("-").collapseFrom(in, '_')); + assertEquals(out, anyOf("-#").collapseFrom(in, '_')); + assertEquals(out, anyOf("-#123").collapseFrom(in, '_')); } private void doTestCollapseWithNoChange(String inout) { - assertSame(inout, is('-').collapseFrom(inout, '_')); - assertSame(inout, is('-').or(is('#')).collapseFrom(inout, '_')); - assertSame(inout, isNot('x').collapseFrom(inout, '_')); - assertSame(inout, is('x').negate().collapseFrom(inout, '_')); - assertSame(inout, anyOf("-").collapseFrom(inout, '_')); - assertSame(inout, anyOf("-#").collapseFrom(inout, '_')); - assertSame(inout, anyOf("-#123").collapseFrom(inout, '_')); - assertSame(inout, CharMatcher.NONE.collapseFrom(inout, '_')); + /* + * Note: assertSame(), not promised by the spec, happens to work with the + * current implementation because String.toString() promises to return + * |this|. However, GWT bug 4491 keeps it from working there, so we stick + * with assertEquals(). + */ + assertEquals(inout, is('-').collapseFrom(inout, '_')); + assertEquals(inout, is('-').or(is('#')).collapseFrom(inout, '_')); + assertEquals(inout, isNot('x').collapseFrom(inout, '_')); + assertEquals(inout, is('x').negate().collapseFrom(inout, '_')); + assertEquals(inout, anyOf("-").collapseFrom(inout, '_')); + assertEquals(inout, anyOf("-#").collapseFrom(inout, '_')); + assertEquals(inout, anyOf("-#123").collapseFrom(inout, '_')); + assertEquals(inout, CharMatcher.NONE.collapseFrom(inout, '_')); } public void testCollapse_any() { @@ -590,9 +548,7 @@ public class CharMatcherTest extends TestCase { } public void testTrimAndCollapse() { - // collapsing groups of '-' into '_' or '-' - doTestTrimAndCollapse("", ""); - doTestTrimAndCollapse("x", "x"); + // collapsing groups of - into _ doTestTrimAndCollapse("-", ""); doTestTrimAndCollapse("x-", "x"); doTestTrimAndCollapse("-x", "x"); @@ -615,16 +571,13 @@ public class CharMatcherTest extends TestCase { private void doTestTrimAndCollapse(String in, String out) { // Try a few different matchers which all match '-' and not 'x' - for (char replacement : new char[] { '_', '-' }) { - String expected = out.replace('_', replacement); - assertEqualsSame(expected, in, is('-').trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, is('-').or(is('#')).trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, isNot('x').trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, is('x').negate().trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-").trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-#").trimAndCollapseFrom(in, replacement)); - assertEqualsSame(expected, in, anyOf("-#123").trimAndCollapseFrom(in, replacement)); - } + assertEquals(out, is('-').trimAndCollapseFrom(in, '_')); + assertEquals(out, is('-').or(is('#')).trimAndCollapseFrom(in, '_')); + assertEquals(out, isNot('x').trimAndCollapseFrom(in, '_')); + assertEquals(out, is('x').negate().trimAndCollapseFrom(in, '_')); + assertEquals(out, anyOf("-").trimAndCollapseFrom(in, '_')); + assertEquals(out, anyOf("-#").trimAndCollapseFrom(in, '_')); + assertEquals(out, anyOf("-#123").trimAndCollapseFrom(in, '_')); } public void testReplaceFrom() { @@ -641,107 +594,14 @@ public class CharMatcherTest extends TestCase { // build a precomputed version. CharMatcher m1 = is('x'); assertSame(m1, m1.precomputed()); - assertSame(m1.toString(), m1.precomputed().toString()); CharMatcher m2 = anyOf("Az"); assertSame(m2, m2.precomputed()); - assertSame(m2.toString(), m2.precomputed().toString()); CharMatcher m3 = inRange('A', 'Z'); assertSame(m3, m3.precomputed()); - assertSame(m3.toString(), m3.precomputed().toString()); assertSame(CharMatcher.NONE, CharMatcher.NONE.precomputed()); assertSame(CharMatcher.ANY, CharMatcher.ANY.precomputed()); } - - @GwtIncompatible("java.util.BitSet") - private static BitSet bitSet(String chars) { - return bitSet(chars.toCharArray()); - } - - @GwtIncompatible("java.util.BitSet") - private static BitSet bitSet(char[] chars) { - BitSet tmp = new BitSet(); - for (int i = 0; i < chars.length; i++) { - tmp.set(chars[i]); - } - return tmp; - } - - @GwtIncompatible("java.util.Random, java.util.BitSet") - public void testSmallCharMatcher() { - CharMatcher len1 = SmallCharMatcher.from(bitSet("#"), "#"); - CharMatcher len2 = SmallCharMatcher.from(bitSet("ab"), "ab"); - CharMatcher len3 = SmallCharMatcher.from(bitSet("abc"), "abc"); - CharMatcher len4 = SmallCharMatcher.from(bitSet("abcd"), "abcd"); - assertTrue(len1.matches('#')); - assertFalse(len1.matches('!')); - assertTrue(len2.matches('a')); - assertTrue(len2.matches('b')); - for (char c = 'c'; c < 'z'; c++) { - assertFalse(len2.matches(c)); - } - assertTrue(len3.matches('a')); - assertTrue(len3.matches('b')); - assertTrue(len3.matches('c')); - for (char c = 'd'; c < 'z'; c++) { - assertFalse(len3.matches(c)); - } - assertTrue(len4.matches('a')); - assertTrue(len4.matches('b')); - assertTrue(len4.matches('c')); - assertTrue(len4.matches('d')); - for (char c = 'e'; c < 'z'; c++) { - assertFalse(len4.matches(c)); - } - - Random rand = new Random(1234); - for (int testCase = 0; testCase < 100; testCase++) { - char[] chars = randomChars(rand, rand.nextInt(63) + 1); - CharMatcher m = SmallCharMatcher.from(bitSet(chars), new String(chars)); - checkExactMatches(m, chars); - } - } - - static void checkExactMatches(CharMatcher m, char[] chars) { - Set<Character> positive = Sets.newHashSetWithExpectedSize(chars.length); - for (int i = 0; i < chars.length; i++) { - positive.add(chars[i]); - } - for (int c = 0; c <= Character.MAX_VALUE; c++) { - assertFalse(positive.contains(new Character((char) c)) ^ m.matches((char) c)); - } - } - - static char[] randomChars(Random rand, int size) { - Set<Character> chars = new HashSet<Character>(size); - for (int i = 0; i < size; i++) { - char c; - while (true) { - c = (char) rand.nextInt(Character.MAX_VALUE - Character.MIN_VALUE + 1); - if (!chars.contains(c)) { - break; - } - } - chars.add(c); - } - char[] retValue = new char[chars.size()]; - int i = 0; - for (char c : chars) { - retValue[i++] = c; - } - Arrays.sort(retValue); - return retValue; - } - - public void testToString() { - assertEquals("CharMatcher.NONE", CharMatcher.anyOf("").toString()); - assertEquals("CharMatcher.is('\\u0031')", CharMatcher.anyOf("1").toString()); - assertEquals("CharMatcher.anyOf(\"\\u0031\\u0032\")", CharMatcher.anyOf("12").toString()); - assertEquals("CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")", - CharMatcher.anyOf("321").toString()); - assertEquals("CharMatcher.inRange('\\u0031', '\\u0033')", - CharMatcher.inRange('1', '3').toString()); - } } |