11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.anyOf; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.forPredicate; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.inRange; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.is; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.isNot; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.noneOf; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.AssertionFailedError; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link CharMatcher}. 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class CharMatcherTest extends TestCase { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStaticNullPointers() throws Exception { 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(CharMatcher.class); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(CharMatcher.ANY); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(CharMatcher.anyOf("abc")); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final CharMatcher WHATEVER = new CharMatcher() { 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean matches(char c) { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new AssertionFailedError( 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "You weren't supposed to actually invoke me!"); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAnyAndNone_logicalOps() throws Exception { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // These are testing behavior that's never promised by the API, but since 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // we're lucky enough that these do pass, it saves us from having to write 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // more excruciating tests! Hooray! 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.NONE.negate()); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.ANY.negate()); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(WHATEVER, CharMatcher.ANY.and(WHATEVER)); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.ANY.or(WHATEVER)); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.NONE.and(WHATEVER)); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(WHATEVER, CharMatcher.NONE.or(WHATEVER)); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The rest of the behavior of ANY and NONE will be covered in the tests for 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // the text processing methods below. 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The next tests require ICU4J and have, at least for now, been sliced out 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // of the open-source view of the tests. 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Character.isISOControl") 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testJavaIsoControl() { 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int c = 0; c <= Character.MAX_VALUE; c++) { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("" + c, Character.isISOControl(c), 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher.JAVA_ISO_CONTROL.matches((char) c)); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // There's no way to test LEGACY_WHITESPACE, really; it just is what it is. 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Omitting tests for the rest of the JAVA_* constants as these are defined 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // as extremely straightforward pass-throughs to the JDK methods. 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // We're testing the is(), isNot(), anyOf(), noneOf() and inRange() methods 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // below by testing their text-processing methods. 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The organization of this test class is unusual, as it's not done by 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // method, but by overall "scenario". Also, the variety of actual tests we 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // do borders on absurd overkill. Better safe than sorry, though? 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty() throws Exception { 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(CharMatcher.ANY); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(CharMatcher.NONE); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(is('a')); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(isNot('a')); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("")); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("x")); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("xy")); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("CharMatcher")); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(noneOf("CharMatcher")); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(inRange('n', 'q')); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(forPredicate(Predicates.equalTo('c'))); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNull() throws Exception { 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(CharMatcher.ANY); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(CharMatcher.NONE); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(is('a')); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(isNot('a')); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("")); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("x")); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("xy")); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("CharMatcher")); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(noneOf("CharMatcher")); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(inRange('n', 'q')); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(forPredicate(Predicates.equalTo('c'))); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestEmpty(CharMatcher matcher) throws Exception { 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher.negate()); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher.precomputed()); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestEmpty(CharMatcher matcher) throws Exception { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn("")); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn("", 0)); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn("", 1); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn("", -1); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn("")); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf("")); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf("")); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf("")); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom("")); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.replaceFrom("", 'z')); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.replaceFrom("", "ZZ")); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom("")); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.countIn("")); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNull(CharMatcher matcher) throws Exception { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(matcher); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNoMatches() { 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.NONE, "blah"); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(is('a'), "bcde"); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(isNot('a'), "aaaa"); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf(""), "abcd"); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("x"), "abcd"); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("xy"), "abcd"); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("CharMatcher"), "zxqy"); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(noneOf("CharMatcher"), "ChMa"); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(inRange('p', 'x'), "mom"); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(forPredicate(Predicates.equalTo('c')), "abe"); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(inRange('A', 'Z').and(inRange('F', 'K').negate()), "F1a"); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.DIGIT, "\tAz()"); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.JAVA_DIGIT, "\tAz()"); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "\tAz()"); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.SINGLE_WIDTH, "\u05bf\u3000"); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNoMatches(CharMatcher matcher, String s) { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher, s); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.negate(), s); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.precomputed(), s); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.negate().precomputed(), s); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.precomputed().negate(), s); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(forPredicate(matcher), s); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher, new StringBuilder(s)); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAllMatches() { 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.ANY, "blah"); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(isNot('a'), "bcde"); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(is('a'), "aaaa"); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(noneOf("CharMatcher"), "zxqy"); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("x"), "xxxx"); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("xy"), "xyyx"); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("CharMatcher"), "ChMa"); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(inRange('m', 'p'), "mom"); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(forPredicate(Predicates.equalTo('c')), "ccc"); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.DIGIT, "0123456789\u0ED0\u1B59"); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.JAVA_DIGIT, "0123456789"); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "0123456789"); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.SINGLE_WIDTH, "\t0123ABCdef~\u00A0\u2111"); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestAllMatches(CharMatcher matcher, String s) { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher, s); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.negate(), s); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.precomputed(), s); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.negate().precomputed(), s); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.precomputed().negate(), s); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(forPredicate(matcher), s); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher, new StringBuilder(s)); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestNoMatches(CharMatcher matcher, CharSequence s) { 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matches(s.charAt(0))); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s)); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 0)); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, s.length())); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn(s, s.length() + 1); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn(s, -1); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn(s)); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf(s)); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf(s)); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.removeFrom(s)); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.replaceFrom(s, 'z')); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.replaceFrom(s, "ZZ")); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.trimFrom(s)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.countIn(s)); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestAllMatches(CharMatcher matcher, CharSequence s) { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matches(s.charAt(0))); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 1)); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, s.length())); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.length() - 1, matcher.lastIndexIn(s)); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf(s)); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom(s)); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Strings.repeat("z", s.length()), 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.replaceFrom(s, 'z')); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Strings.repeat("ZZ", s.length()), 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.replaceFrom(s, "ZZ")); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom(s)); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.length(), matcher.countIn(s)); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGeneral() { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(is('a'), 'a', 'b'); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(isNot('a'), 'b', 'a'); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("x"), 'x', 'z'); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("xy"), 'y', 'z'); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("CharMatcher"), 'C', 'z'); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(noneOf("CharMatcher"), 'z', 'C'); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(inRange('p', 'x'), 'q', 'z'); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestGeneral(CharMatcher matcher, char match, char noMatch) { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestOneCharMatch(matcher, "" + match); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestOneCharNoMatch(matcher, "" + noMatch); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestMatchThenNoMatch(matcher, "" + match + noMatch); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatchThenMatch(matcher, "" + noMatch + match); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestOneCharMatch(CharMatcher matcher, String s) { 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher, s); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.negate(), s); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.precomputed(), s); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.negate().precomputed(), s); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.precomputed().negate(), s); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestOneCharNoMatch(CharMatcher matcher, String s) { 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher, s); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.negate(), s); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.precomputed(), s); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.negate().precomputed(), s); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.precomputed().negate(), s); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestMatchThenNoMatch(CharMatcher matcher, String s) { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher, s); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.negate(), s); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.precomputed(), s); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.negate().precomputed(), s); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.precomputed().negate(), s); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNoMatchThenMatch(CharMatcher matcher, String s) { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher, s); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.negate(), s); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.precomputed(), s); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.negate().precomputed(), s); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.precomputed().negate(), s); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestOneCharMatch(CharMatcher matcher, String s) { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matches(s.charAt(0))); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.apply(s.charAt(0))); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.lastIndexIn(s)); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf(s)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom(s)); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("z", matcher.replaceFrom(s, 'z')); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("ZZ", matcher.replaceFrom(s, "ZZ")); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom(s)); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestOneCharNoMatch(CharMatcher matcher, String s) { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matches(s.charAt(0))); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.apply(s.charAt(0))); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s)); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 0)); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn(s)); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf(s)); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf(s)); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Note: only 'assertEquals' is promised by the API. Although they could 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // have been assertSame() on the server side, they have to be assertEquals 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // in GWT, because of GWT issue 4491. 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s, matcher.removeFrom(s)); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s, matcher.replaceFrom(s, 'z')); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s, matcher.replaceFrom(s, "ZZ")); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s, matcher.trimFrom(s)); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.countIn(s)); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestMatchThenNoMatch(CharMatcher matcher, String s) { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 2)); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.lastIndexIn(s)); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(1), matcher.removeFrom(s)); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("z" + s.substring(1), matcher.replaceFrom(s, 'z')); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("ZZ" + s.substring(1), matcher.replaceFrom(s, "ZZ")); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(1), matcher.trimFrom(s)); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestNoMatchThenMatch(CharMatcher matcher, String s) { 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s)); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 0)); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 1)); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 2)); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.lastIndexIn(s)); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1), matcher.removeFrom(s)); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1) + "z", matcher.replaceFrom(s, 'z')); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1) + "ZZ", matcher.replaceFrom(s, "ZZ")); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1), matcher.trimFrom(s)); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test collapse() a little differently than the rest, as we really want to 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // cover lots of different configurations of input text 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCollapse() { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // collapsing groups of - into _ 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-", "_"); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-", "x_"); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x", "_x"); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--", "_"); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x--", "x_"); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--x", "_x"); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x-", "_x_"); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x", "x_x"); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("---", "_"); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--x-", "_x_"); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--xx", "_xx"); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x--", "_x_"); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x-x", "_x_x"); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-xx-", "_xx_"); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x--x", "x_x"); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x-", "x_x_"); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-xx", "x_xx"); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x--xx---x----x", "x_x_xx_x_x"); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange(""); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange("x"); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange("xx"); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestCollapse(String in, String out) { 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').collapseFrom(in, '_')); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).collapseFrom(in, '_')); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').collapseFrom(in, '_')); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().collapseFrom(in, '_')); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-").collapseFrom(in, '_')); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").collapseFrom(in, '_')); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").collapseFrom(in, '_')); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestCollapseWithNoChange(String inout) { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Note: assertSame(), not promised by the spec, happens to work with the 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * current implementation because String.toString() promises to return 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * |this|. However, GWT bug 4491 keeps it from working there, so we stick 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * with assertEquals(). 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, is('-').collapseFrom(inout, '_')); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, is('-').or(is('#')).collapseFrom(inout, '_')); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, isNot('x').collapseFrom(inout, '_')); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, is('x').negate().collapseFrom(inout, '_')); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, anyOf("-").collapseFrom(inout, '_')); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, anyOf("-#").collapseFrom(inout, '_')); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, anyOf("-#123").collapseFrom(inout, '_')); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(inout, CharMatcher.NONE.collapseFrom(inout, '_')); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCollapse_any() { 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", CharMatcher.ANY.collapseFrom("", '_')); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("a", '_')); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("ab", '_')); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("abcd", '_')); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimFrom() { 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-", ""); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-", "x"); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x", "x"); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--", ""); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x--", "x"); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--x", "x"); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x-", "x"); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x", "x-x"); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("---", ""); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--x-", "x"); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--xx", "xx"); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x--", "x"); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x-x", "x-x"); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-xx-", "xx"); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x--x", "x--x"); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x-", "x-x"); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-xx", "x-xx"); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x--xx---x----x", "x-x--xx---x----x"); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cat", anyOf("ab").trimFrom("abacatbab")); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimFrom(String in, String out) { 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimFrom(in)); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimFrom(in)); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimFrom(in)); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimFrom(in)); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-").trimFrom(in)); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimFrom(in)); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimFrom(in)); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimLeadingFrom() { 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-", ""); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-", "x-"); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x", "x"); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--", ""); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x--", "x--"); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--x", "x"); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x-", "x-"); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x", "x-x"); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("---", ""); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--x-", "x-"); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--xx", "xx"); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x--", "x--"); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x-x", "x-x"); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-xx-", "xx-"); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x--x", "x--x"); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x-", "x-x-"); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-xx", "x-xx"); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x--xx---x----x", "x-x--xx---x----x"); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("catbab", anyOf("ab").trimLeadingFrom("abacatbab")); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimLeadingFrom(String in, String out) { 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimLeadingFrom(in)); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimLeadingFrom(in)); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimLeadingFrom(in)); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimLeadingFrom(in)); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimLeadingFrom(in)); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimLeadingFrom(in)); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimTrailingFrom() { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-", ""); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-", "x"); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x", "-x"); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--", ""); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x--", "x"); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--x", "--x"); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x-", "-x"); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x", "x-x"); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("---", ""); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--x-", "--x"); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--xx", "--xx"); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x--", "-x"); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x-x", "-x-x"); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-xx-", "-xx"); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x--x", "x--x"); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x-", "x-x"); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-xx", "x-xx"); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x--xx---x----x", "x-x--xx---x----x"); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abacat", anyOf("ab").trimTrailingFrom("abacatbab")); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimTrailingFrom(String in, String out) { 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimTrailingFrom(in)); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimTrailingFrom(in)); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimTrailingFrom(in)); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimTrailingFrom(in)); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimTrailingFrom(in)); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimTrailingFrom(in)); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimAndCollapse() { 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // collapsing groups of - into _ 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-", ""); 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-", "x"); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x", "x"); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--", ""); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x--", "x"); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--x", "x"); 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x-", "x"); 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x", "x_x"); 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("---", ""); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--x-", "x"); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--xx", "xx"); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x--", "x"); 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x-x", "x_x"); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-xx-", "xx"); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x--x", "x_x"); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x-", "x_x"); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-xx", "x_xx"); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x--xx---x----x", "x_x_xx_x_x"); 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimAndCollapse(String in, String out) { 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimAndCollapseFrom(in, '_')); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimAndCollapseFrom(in, '_')); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimAndCollapseFrom(in, '_')); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimAndCollapseFrom(in, '_')); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-").trimAndCollapseFrom(in, '_')); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimAndCollapseFrom(in, '_')); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimAndCollapseFrom(in, '_')); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceFrom() { 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoho", is('a').replaceFrom("yaha", 'o')); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yh", is('a').replaceFrom("yaha", "")); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoho", is('a').replaceFrom("yaha", "o")); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoohoo", is('a').replaceFrom("yaha", "oo")); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("12 > 5", is('>').replaceFrom("12 > 5", ">")); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPrecomputedOptimizations() { 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // These are testing behavior that's never promised by the API. 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Some matchers are so efficient that it is a waste of effort to 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // build a precomputed version. 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m1 = is('x'); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m1, m1.precomputed()); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m2 = anyOf("Az"); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m2, m2.precomputed()); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m3 = inRange('A', 'Z'); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m3, m3.precomputed()); 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.NONE.precomputed()); 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.ANY.precomputed()); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 608