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 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.base.CharMatcher.BREAKING_WHITESPACE; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.base.CharMatcher.WHITESPACE; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.anyOf; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.forPredicate; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.inRange; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.is; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.isNot; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.CharMatcher.noneOf; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 307dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Sets; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 330888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.AssertionFailedError; 340888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin 367dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Arrays; 377dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.BitSet; 387dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.HashSet; 397dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Random; 407dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Set; 417dd252788645e940eada959bdde927426e2531c9Paul Duffin 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link CharMatcher}. 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class CharMatcherTest extends TestCase { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStaticNullPointers() throws Exception { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(CharMatcher.class); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(CharMatcher.ANY); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(CharMatcher.anyOf("abc")); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final CharMatcher WHATEVER = new CharMatcher() { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean matches(char c) { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new AssertionFailedError( 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "You weren't supposed to actually invoke me!"); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAnyAndNone_logicalOps() throws Exception { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // These are testing behavior that's never promised by the API, but since 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // we're lucky enough that these do pass, it saves us from having to write 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // more excruciating tests! Hooray! 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.NONE.negate()); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.ANY.negate()); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(WHATEVER, CharMatcher.ANY.and(WHATEVER)); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.ANY.or(WHATEVER)); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.NONE.and(WHATEVER)); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(WHATEVER, CharMatcher.NONE.or(WHATEVER)); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 807dd252788645e940eada959bdde927426e2531c9Paul Duffin // The rest of the behavior of ANY and DEFAULT will be covered in the tests for 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // the text processing methods below. 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testWhitespaceBreakingWhitespaceSubset() throws Exception { 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (int c = 0; c <= Character.MAX_VALUE; c++) { 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin if (BREAKING_WHITESPACE.apply((char) c)) { 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(Integer.toHexString(c), WHITESPACE.apply((char) c)); 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The next tests require ICU4J and have, at least for now, been sliced out 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // of the open-source view of the tests. 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Character.isISOControl") 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testJavaIsoControl() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int c = 0; c <= Character.MAX_VALUE; c++) { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("" + c, Character.isISOControl(c), 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher.JAVA_ISO_CONTROL.matches((char) c)); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Omitting tests for the rest of the JAVA_* constants as these are defined 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // as extremely straightforward pass-throughs to the JDK methods. 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // We're testing the is(), isNot(), anyOf(), noneOf() and inRange() methods 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // below by testing their text-processing methods. 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The organization of this test class is unusual, as it's not done by 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // method, but by overall "scenario". Also, the variety of actual tests we 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // do borders on absurd overkill. Better safe than sorry, though? 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.BitSet") 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSetBits() { 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(CharMatcher.ANY); 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(CharMatcher.NONE); 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(is('a')); 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(isNot('a')); 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(anyOf("")); 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(anyOf("x")); 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(anyOf("xy")); 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(anyOf("CharMatcher")); 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(noneOf("CharMatcher")); 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(inRange('n', 'q')); 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(forPredicate(Predicates.equalTo('c'))); 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(CharMatcher.ASCII); 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(CharMatcher.DIGIT); 1277dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(CharMatcher.INVISIBLE); 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin doTestSetBits(CharMatcher.WHITESPACE); 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestSetBits(inRange('A', 'Z').and(inRange('F', 'K').negate())); 1307dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.BitSet") 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin private void doTestSetBits(CharMatcher matcher) { 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin BitSet bitset = new BitSet(); 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin matcher.setBits(bitset); 1367dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; i++) { 1377dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(matcher.matches((char) i), bitset.get(i)); 1387dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1397dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1407dd252788645e940eada959bdde927426e2531c9Paul Duffin 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty() throws Exception { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(CharMatcher.ANY); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(CharMatcher.NONE); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(is('a')); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(isNot('a')); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("")); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("x")); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("xy")); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(anyOf("CharMatcher")); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(noneOf("CharMatcher")); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(inRange('n', 'q')); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestEmpty(forPredicate(Predicates.equalTo('c'))); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNull() throws Exception { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(CharMatcher.ANY); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(CharMatcher.NONE); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(is('a')); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(isNot('a')); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("")); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("x")); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("xy")); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(anyOf("CharMatcher")); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(noneOf("CharMatcher")); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(inRange('n', 'q')); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNull(forPredicate(Predicates.equalTo('c'))); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestEmpty(CharMatcher matcher) throws Exception { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher.negate()); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestEmpty(matcher.precomputed()); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestEmpty(CharMatcher matcher) throws Exception { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn("")); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn("", 0)); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn("", 1); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn("", -1); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn("")); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf("")); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf("")); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf("")); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom("")); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.replaceFrom("", 'z')); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.replaceFrom("", "ZZ")); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom("")); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.countIn("")); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNull(CharMatcher matcher) throws Exception { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(matcher); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNoMatches() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.NONE, "blah"); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(is('a'), "bcde"); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(isNot('a'), "aaaa"); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf(""), "abcd"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("x"), "abcd"); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("xy"), "abcd"); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(anyOf("CharMatcher"), "zxqy"); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(noneOf("CharMatcher"), "ChMa"); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(inRange('p', 'x'), "mom"); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(forPredicate(Predicates.equalTo('c')), "abe"); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(inRange('A', 'Z').and(inRange('F', 'K').negate()), "F1a"); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.DIGIT, "\tAz()"); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.JAVA_DIGIT, "\tAz()"); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "\tAz()"); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatches(CharMatcher.SINGLE_WIDTH, "\u05bf\u3000"); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNoMatches(CharMatcher matcher, String s) { 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher, s); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.negate(), s); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.precomputed(), s); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.negate().precomputed(), s); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.precomputed().negate(), s); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(forPredicate(matcher), s); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher, new StringBuilder(s)); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAllMatches() { 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.ANY, "blah"); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(isNot('a'), "bcde"); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(is('a'), "aaaa"); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(noneOf("CharMatcher"), "zxqy"); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("x"), "xxxx"); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("xy"), "xyyx"); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(anyOf("CharMatcher"), "ChMa"); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(inRange('m', 'p'), "mom"); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(forPredicate(Predicates.equalTo('c')), "ccc"); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.DIGIT, "0123456789\u0ED0\u1B59"); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.JAVA_DIGIT, "0123456789"); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "0123456789"); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestAllMatches(CharMatcher.SINGLE_WIDTH, "\t0123ABCdef~\u00A0\u2111"); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestAllMatches(CharMatcher matcher, String s) { 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher, s); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.negate(), s); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher.precomputed(), s); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.negate().precomputed(), s); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatches(matcher.precomputed().negate(), s); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(forPredicate(matcher), s); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestAllMatches(matcher, new StringBuilder(s)); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestNoMatches(CharMatcher matcher, CharSequence s) { 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matches(s.charAt(0))); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s)); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 0)); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, s.length())); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn(s, s.length() + 1); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.indexIn(s, -1); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn(s)); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf(s)); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf(s)); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.removeFrom(s)); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.replaceFrom(s, 'z')); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.replaceFrom(s, "ZZ")); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.toString(), matcher.trimFrom(s)); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.countIn(s)); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestAllMatches(CharMatcher matcher, CharSequence s) { 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matches(s.charAt(0))); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 1)); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, s.length())); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.length() - 1, matcher.lastIndexIn(s)); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf(s)); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom(s)); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Strings.repeat("z", s.length()), 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.replaceFrom(s, 'z')); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Strings.repeat("ZZ", s.length()), 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert matcher.replaceFrom(s, "ZZ")); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom(s)); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.length(), matcher.countIn(s)); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGeneral() { 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(is('a'), 'a', 'b'); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(isNot('a'), 'b', 'a'); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("x"), 'x', 'z'); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("xy"), 'y', 'z'); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(anyOf("CharMatcher"), 'C', 'z'); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(noneOf("CharMatcher"), 'z', 'C'); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestGeneral(inRange('p', 'x'), 'q', 'z'); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestGeneral(CharMatcher matcher, char match, char noMatch) { 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestOneCharMatch(matcher, "" + match); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestOneCharNoMatch(matcher, "" + noMatch); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestMatchThenNoMatch(matcher, "" + match + noMatch); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestNoMatchThenMatch(matcher, "" + noMatch + match); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestOneCharMatch(CharMatcher matcher, String s) { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher, s); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.negate(), s); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.precomputed(), s); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.negate().precomputed(), s); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.precomputed().negate(), s); 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestOneCharNoMatch(CharMatcher matcher, String s) { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher, s); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.negate(), s); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharNoMatch(matcher.precomputed(), s); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.negate().precomputed(), s); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestOneCharMatch(matcher.precomputed().negate(), s); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestMatchThenNoMatch(CharMatcher matcher, String s) { 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher, s); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.negate(), s); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.precomputed(), s); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.negate().precomputed(), s); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.precomputed().negate(), s); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestNoMatchThenMatch(CharMatcher matcher, String s) { 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher, s); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.negate(), s); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestNoMatchThenMatch(matcher.precomputed(), s); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.negate().precomputed(), s); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reallyTestMatchThenNoMatch(matcher.precomputed().negate(), s); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestOneCharMatch(CharMatcher matcher, String s) { 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matches(s.charAt(0))); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.apply(s.charAt(0))); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.lastIndexIn(s)); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAllOf(s)); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.removeFrom(s)); 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("z", matcher.replaceFrom(s, 'z')); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("ZZ", matcher.replaceFrom(s, "ZZ")); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", matcher.trimFrom(s)); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestOneCharNoMatch(CharMatcher matcher, String s) { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matches(s.charAt(0))); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.apply(s.charAt(0))); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s)); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 0)); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.lastIndexIn(s)); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAnyOf(s)); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesNoneOf(s)); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3867dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(s, matcher.removeFrom(s)); 3877dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(s, matcher.replaceFrom(s, 'z')); 3887dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(s, matcher.replaceFrom(s, "ZZ")); 3897dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(s, matcher.trimFrom(s)); 3907dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(0, matcher.countIn(s)); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestMatchThenNoMatch(CharMatcher matcher, String s) { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s)); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.indexIn(s, 0)); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 1)); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 2)); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, matcher.lastIndexIn(s)); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(1), matcher.removeFrom(s)); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("z" + s.substring(1), matcher.replaceFrom(s, 'z')); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("ZZ" + s.substring(1), matcher.replaceFrom(s, "ZZ")); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(1), matcher.trimFrom(s)); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void reallyTestNoMatchThenMatch(CharMatcher matcher, String s) { 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s)); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 0)); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.indexIn(s, 1)); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, matcher.indexIn(s, 2)); 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.lastIndexIn(s)); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(matcher.matchesAnyOf(s)); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesAllOf(s)); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(matcher.matchesNoneOf(s)); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1), matcher.removeFrom(s)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1) + "z", matcher.replaceFrom(s, 'z')); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1) + "ZZ", matcher.replaceFrom(s, "ZZ")); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(s.substring(0, 1), matcher.trimFrom(s)); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, matcher.countIn(s)); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4257dd252788645e940eada959bdde927426e2531c9Paul Duffin /** 4267dd252788645e940eada959bdde927426e2531c9Paul Duffin * Checks that expected is equals to out, and further, if in is 4277dd252788645e940eada959bdde927426e2531c9Paul Duffin * equals to expected, then out is successfully optimized to be 4287dd252788645e940eada959bdde927426e2531c9Paul Duffin * identical to in, i.e. that "in" is simply returned. 4297dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 4307dd252788645e940eada959bdde927426e2531c9Paul Duffin private void assertEqualsSame(String expected, String in, String out) { 4317dd252788645e940eada959bdde927426e2531c9Paul Duffin if (expected.equals(in)) { 4327dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(in, out); 4337dd252788645e940eada959bdde927426e2531c9Paul Duffin } else { 4347dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(expected, out); 4357dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4367dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4377dd252788645e940eada959bdde927426e2531c9Paul Duffin 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test collapse() a little differently than the rest, as we really want to 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // cover lots of different configurations of input text 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCollapse() { 4417dd252788645e940eada959bdde927426e2531c9Paul Duffin // collapsing groups of '-' into '_' or '-' 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-", "_"); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-", "x_"); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x", "_x"); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--", "_"); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x--", "x_"); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--x", "_x"); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x-", "_x_"); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x", "x_x"); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("---", "_"); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--x-", "_x_"); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("--xx", "_xx"); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x--", "_x_"); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-x-x", "_x_x"); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("-xx-", "_xx_"); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x--x", "x_x"); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x-", "x_x_"); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-xx", "x_xx"); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapse("x-x--xx---x----x", "x_x_xx_x_x"); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange(""); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange("x"); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestCollapseWithNoChange("xx"); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestCollapse(String in, String out) { 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 4687dd252788645e940eada959bdde927426e2531c9Paul Duffin // Try replacement chars that both do and do not change the value. 4697dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char replacement : new char[] { '_', '-' }) { 4707dd252788645e940eada959bdde927426e2531c9Paul Duffin String expected = out.replace('_', replacement); 4717dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('-').collapseFrom(in, replacement)); 4727dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('-').collapseFrom(in, replacement)); 4737dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('-').or(is('#')).collapseFrom(in, replacement)); 4747dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, isNot('x').collapseFrom(in, replacement)); 4757dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('x').negate().collapseFrom(in, replacement)); 4767dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-").collapseFrom(in, replacement)); 4777dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-#").collapseFrom(in, replacement)); 4787dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-#123").collapseFrom(in, replacement)); 4797dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestCollapseWithNoChange(String inout) { 4837dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, is('-').collapseFrom(inout, '_')); 4847dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, is('-').or(is('#')).collapseFrom(inout, '_')); 4857dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, isNot('x').collapseFrom(inout, '_')); 4867dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, is('x').negate().collapseFrom(inout, '_')); 4877dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, anyOf("-").collapseFrom(inout, '_')); 4887dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, anyOf("-#").collapseFrom(inout, '_')); 4897dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, anyOf("-#123").collapseFrom(inout, '_')); 4907dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(inout, CharMatcher.NONE.collapseFrom(inout, '_')); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCollapse_any() { 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("", CharMatcher.ANY.collapseFrom("", '_')); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("a", '_')); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("ab", '_')); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("_", CharMatcher.ANY.collapseFrom("abcd", '_')); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimFrom() { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-", ""); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-", "x"); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x", "x"); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--", ""); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x--", "x"); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--x", "x"); 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x-", "x"); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x", "x-x"); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("---", ""); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--x-", "x"); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("--xx", "xx"); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x--", "x"); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-x-x", "x-x"); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("-xx-", "xx"); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x--x", "x--x"); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x-", "x-x"); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-xx", "x-xx"); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimFrom("x-x--xx---x----x", "x-x--xx---x----x"); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cat", anyOf("ab").trimFrom("abacatbab")); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimFrom(String in, String out) { 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimFrom(in)); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimFrom(in)); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimFrom(in)); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimFrom(in)); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-").trimFrom(in)); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimFrom(in)); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimFrom(in)); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimLeadingFrom() { 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-", ""); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-", "x-"); 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x", "x"); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--", ""); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x--", "x--"); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--x", "x"); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x-", "x-"); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x", "x-x"); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("---", ""); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--x-", "x-"); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("--xx", "xx"); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x--", "x--"); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-x-x", "x-x"); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("-xx-", "xx-"); 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x--x", "x--x"); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x-", "x-x-"); 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-xx", "x-xx"); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimLeadingFrom("x-x--xx---x----x", "x-x--xx---x----x"); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("catbab", anyOf("ab").trimLeadingFrom("abacatbab")); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimLeadingFrom(String in, String out) { 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimLeadingFrom(in)); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimLeadingFrom(in)); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimLeadingFrom(in)); 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimLeadingFrom(in)); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimLeadingFrom(in)); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimLeadingFrom(in)); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimTrailingFrom() { 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // trimming - 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-", ""); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-", "x"); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x", "-x"); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--", ""); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x--", "x"); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--x", "--x"); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x-", "-x"); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x", "x-x"); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("---", ""); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--x-", "--x"); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("--xx", "--xx"); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x--", "-x"); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-x-x", "-x-x"); 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("-xx-", "-xx"); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x--x", "x--x"); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x-", "x-x"); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-xx", "x-xx"); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimTrailingFrom("x-x--xx---x----x", "x-x--xx---x----x"); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // additional testing using the doc example 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("abacat", anyOf("ab").trimTrailingFrom("abacatbab")); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimTrailingFrom(String in, String out) { 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').trimTrailingFrom(in)); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('-').or(is('#')).trimTrailingFrom(in)); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, isNot('x').trimTrailingFrom(in)); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, is('x').negate().trimTrailingFrom(in)); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#").trimTrailingFrom(in)); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(out, anyOf("-#123").trimTrailingFrom(in)); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTrimAndCollapse() { 6047dd252788645e940eada959bdde927426e2531c9Paul Duffin // collapsing groups of '-' into '_' or '-' 6057dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestTrimAndCollapse("", ""); 6067dd252788645e940eada959bdde927426e2531c9Paul Duffin doTestTrimAndCollapse("x", "x"); 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-", ""); 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-", "x"); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x", "x"); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--", ""); 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x--", "x"); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--x", "x"); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x-", "x"); 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x", "x_x"); 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("---", ""); 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--x-", "x"); 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("--xx", "xx"); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x--", "x"); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-x-x", "x_x"); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("-xx-", "xx"); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x--x", "x_x"); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x-", "x_x"); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-xx", "x_xx"); 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert doTestTrimAndCollapse("x-x--xx---x----x", "x_x_xx_x_x"); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void doTestTrimAndCollapse(String in, String out) { 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Try a few different matchers which all match '-' and not 'x' 6297dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char replacement : new char[] { '_', '-' }) { 6307dd252788645e940eada959bdde927426e2531c9Paul Duffin String expected = out.replace('_', replacement); 6317dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('-').trimAndCollapseFrom(in, replacement)); 6327dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('-').or(is('#')).trimAndCollapseFrom(in, replacement)); 6337dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, isNot('x').trimAndCollapseFrom(in, replacement)); 6347dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, is('x').negate().trimAndCollapseFrom(in, replacement)); 6357dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-").trimAndCollapseFrom(in, replacement)); 6367dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-#").trimAndCollapseFrom(in, replacement)); 6377dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEqualsSame(expected, in, anyOf("-#123").trimAndCollapseFrom(in, replacement)); 6387dd252788645e940eada959bdde927426e2531c9Paul Duffin } 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceFrom() { 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoho", is('a').replaceFrom("yaha", 'o')); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yh", is('a').replaceFrom("yaha", "")); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoho", is('a').replaceFrom("yaha", "o")); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("yoohoo", is('a').replaceFrom("yaha", "oo")); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("12 > 5", is('>').replaceFrom("12 > 5", ">")); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPrecomputedOptimizations() { 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // These are testing behavior that's never promised by the API. 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Some matchers are so efficient that it is a waste of effort to 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // build a precomputed version. 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m1 = is('x'); 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m1, m1.precomputed()); 6557dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(m1.toString(), m1.precomputed().toString()); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m2 = anyOf("Az"); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m2, m2.precomputed()); 6597dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(m2.toString(), m2.precomputed().toString()); 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CharMatcher m3 = inRange('A', 'Z'); 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(m3, m3.precomputed()); 6637dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSame(m3.toString(), m3.precomputed().toString()); 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.NONE, CharMatcher.NONE.precomputed()); 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(CharMatcher.ANY, CharMatcher.ANY.precomputed()); 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6687dd252788645e940eada959bdde927426e2531c9Paul Duffin 6697dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.BitSet") 6707dd252788645e940eada959bdde927426e2531c9Paul Duffin private static BitSet bitSet(String chars) { 6717dd252788645e940eada959bdde927426e2531c9Paul Duffin return bitSet(chars.toCharArray()); 6727dd252788645e940eada959bdde927426e2531c9Paul Duffin } 6737dd252788645e940eada959bdde927426e2531c9Paul Duffin 6747dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.BitSet") 6757dd252788645e940eada959bdde927426e2531c9Paul Duffin private static BitSet bitSet(char[] chars) { 6767dd252788645e940eada959bdde927426e2531c9Paul Duffin BitSet tmp = new BitSet(); 6777dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int i = 0; i < chars.length; i++) { 6787dd252788645e940eada959bdde927426e2531c9Paul Duffin tmp.set(chars[i]); 6797dd252788645e940eada959bdde927426e2531c9Paul Duffin } 6807dd252788645e940eada959bdde927426e2531c9Paul Duffin return tmp; 6817dd252788645e940eada959bdde927426e2531c9Paul Duffin } 6827dd252788645e940eada959bdde927426e2531c9Paul Duffin 6837dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.Random, java.util.BitSet") 6847dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSmallCharMatcher() { 6857dd252788645e940eada959bdde927426e2531c9Paul Duffin CharMatcher len1 = SmallCharMatcher.from(bitSet("#"), "#"); 6867dd252788645e940eada959bdde927426e2531c9Paul Duffin CharMatcher len2 = SmallCharMatcher.from(bitSet("ab"), "ab"); 6877dd252788645e940eada959bdde927426e2531c9Paul Duffin CharMatcher len3 = SmallCharMatcher.from(bitSet("abc"), "abc"); 6887dd252788645e940eada959bdde927426e2531c9Paul Duffin CharMatcher len4 = SmallCharMatcher.from(bitSet("abcd"), "abcd"); 6897dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len1.matches('#')); 6907dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(len1.matches('!')); 6917dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len2.matches('a')); 6927dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len2.matches('b')); 6937dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char c = 'c'; c < 'z'; c++) { 6947dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(len2.matches(c)); 6957dd252788645e940eada959bdde927426e2531c9Paul Duffin } 6967dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len3.matches('a')); 6977dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len3.matches('b')); 6987dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len3.matches('c')); 6997dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char c = 'd'; c < 'z'; c++) { 7007dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(len3.matches(c)); 7017dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7027dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len4.matches('a')); 7037dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len4.matches('b')); 7047dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len4.matches('c')); 7057dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(len4.matches('d')); 7067dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char c = 'e'; c < 'z'; c++) { 7077dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(len4.matches(c)); 7087dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7097dd252788645e940eada959bdde927426e2531c9Paul Duffin 7107dd252788645e940eada959bdde927426e2531c9Paul Duffin Random rand = new Random(1234); 7117dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int testCase = 0; testCase < 100; testCase++) { 7127dd252788645e940eada959bdde927426e2531c9Paul Duffin char[] chars = randomChars(rand, rand.nextInt(63) + 1); 7137dd252788645e940eada959bdde927426e2531c9Paul Duffin CharMatcher m = SmallCharMatcher.from(bitSet(chars), new String(chars)); 7147dd252788645e940eada959bdde927426e2531c9Paul Duffin checkExactMatches(m, chars); 7157dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7167dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7177dd252788645e940eada959bdde927426e2531c9Paul Duffin 7187dd252788645e940eada959bdde927426e2531c9Paul Duffin static void checkExactMatches(CharMatcher m, char[] chars) { 7197dd252788645e940eada959bdde927426e2531c9Paul Duffin Set<Character> positive = Sets.newHashSetWithExpectedSize(chars.length); 7207dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int i = 0; i < chars.length; i++) { 7217dd252788645e940eada959bdde927426e2531c9Paul Duffin positive.add(chars[i]); 7227dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7237dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int c = 0; c <= Character.MAX_VALUE; c++) { 7247dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(positive.contains(new Character((char) c)) ^ m.matches((char) c)); 7257dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7267dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7277dd252788645e940eada959bdde927426e2531c9Paul Duffin 7287dd252788645e940eada959bdde927426e2531c9Paul Duffin static char[] randomChars(Random rand, int size) { 7297dd252788645e940eada959bdde927426e2531c9Paul Duffin Set<Character> chars = new HashSet<Character>(size); 7307dd252788645e940eada959bdde927426e2531c9Paul Duffin for (int i = 0; i < size; i++) { 7317dd252788645e940eada959bdde927426e2531c9Paul Duffin char c; 7327dd252788645e940eada959bdde927426e2531c9Paul Duffin while (true) { 7337dd252788645e940eada959bdde927426e2531c9Paul Duffin c = (char) rand.nextInt(Character.MAX_VALUE - Character.MIN_VALUE + 1); 7347dd252788645e940eada959bdde927426e2531c9Paul Duffin if (!chars.contains(c)) { 7357dd252788645e940eada959bdde927426e2531c9Paul Duffin break; 7367dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7377dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7387dd252788645e940eada959bdde927426e2531c9Paul Duffin chars.add(c); 7397dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7407dd252788645e940eada959bdde927426e2531c9Paul Duffin char[] retValue = new char[chars.size()]; 7417dd252788645e940eada959bdde927426e2531c9Paul Duffin int i = 0; 7427dd252788645e940eada959bdde927426e2531c9Paul Duffin for (char c : chars) { 7437dd252788645e940eada959bdde927426e2531c9Paul Duffin retValue[i++] = c; 7447dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7457dd252788645e940eada959bdde927426e2531c9Paul Duffin Arrays.sort(retValue); 7467dd252788645e940eada959bdde927426e2531c9Paul Duffin return retValue; 7477dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7487dd252788645e940eada959bdde927426e2531c9Paul Duffin 7497dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testToString() { 7500888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.NONE", CharMatcher.anyOf("")); 7510888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.is('\\u0031')", CharMatcher.anyOf("1")); 7520888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.isNot('\\u0031')", CharMatcher.isNot('1')); 7530888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\")", CharMatcher.anyOf("12")); 7540888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")", 7550888a09821a98ac0680fad765217302858e70fa4Paul Duffin CharMatcher.anyOf("321")); 7560888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertToStringWorks("CharMatcher.inRange('\\u0031', '\\u0033')", 7570888a09821a98ac0680fad765217302858e70fa4Paul Duffin CharMatcher.inRange('1', '3')); 7580888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 7590888a09821a98ac0680fad765217302858e70fa4Paul Duffin 7600888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static void assertToStringWorks(String expected, CharMatcher matcher) { 7610888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, matcher.toString()); 7620888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, matcher.precomputed().toString()); 7630888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, matcher.negate().negate().toString()); 7640888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, matcher.negate().precomputed().negate().toString()); 7650888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, matcher.negate().precomputed().negate().precomputed().toString()); 7667dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 768