Skip to content

Commit c91bd2a

Browse files
eamonnmcmanusGoogle Java Core Libraries
authored andcommitted
Update the toString() of some CharMatcher types.
Most `toString()` implementations mimic the code that could have produced the instance. Notably, `someCharMatcher.negate()` produces `someCharMatcher.toString() + ".negate()"`. But the `toString()` for `.and` and `.or` used a syntax that made it look as if these were static methods rather than instance ones. Also update a couple of tests that depend on the exact `toString()` output. RELNOTES=n/a PiperOrigin-RevId: 829198847
1 parent d7c6d0b commit c91bd2a

File tree

4 files changed

+88
-32
lines changed

4 files changed

+88
-32
lines changed

android/guava-tests/test/com/google/common/base/CharMatcherTest.java

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static com.google.common.base.CharMatcher.isNot;
2525
import static com.google.common.base.CharMatcher.noneOf;
2626
import static com.google.common.base.CharMatcher.whitespace;
27+
import static com.google.common.truth.Truth.assertThat;
2728

2829
import com.google.common.annotations.GwtCompatible;
2930
import com.google.common.annotations.GwtIncompatible;
@@ -768,19 +769,46 @@ static char[] randomChars(Random rand, int size) {
768769
}
769770

770771
public void testToString() {
771-
assertToStringWorks("CharMatcher.none()", CharMatcher.anyOf(""));
772-
assertToStringWorks("CharMatcher.is('\\u0031')", CharMatcher.anyOf("1"));
773-
assertToStringWorks("CharMatcher.isNot('\\u0031')", CharMatcher.isNot('1'));
774-
assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\")", CharMatcher.anyOf("12"));
775-
assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")", CharMatcher.anyOf("321"));
776-
assertToStringWorks("CharMatcher.inRange('\\u0031', '\\u0033')", CharMatcher.inRange('1', '3'));
777-
}
778-
779-
private static void assertToStringWorks(String expected, CharMatcher matcher) {
780-
assertEquals(expected, matcher.toString());
781-
assertEquals(expected, matcher.precomputed().toString());
782-
assertEquals(expected, matcher.negate().negate().toString());
783-
assertEquals(expected, matcher.negate().precomputed().negate().toString());
784-
assertEquals(expected, matcher.negate().precomputed().negate().precomputed().toString());
772+
assertToStringWorks(CharMatcher.anyOf(""), "CharMatcher.none()");
773+
assertToStringWorks(CharMatcher.anyOf("1"), "CharMatcher.is('\\u0031')");
774+
assertToStringWorks(CharMatcher.isNot('1'), "CharMatcher.isNot('\\u0031')");
775+
assertToStringWorks(CharMatcher.anyOf("12"), "CharMatcher.anyOf(\"\\u0031\\u0032\")");
776+
assertToStringWorks(CharMatcher.anyOf("321"), "CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")");
777+
assertToStringWorks(CharMatcher.inRange('1', '3'), "CharMatcher.inRange('\\u0031', '\\u0033')");
778+
assertToStringWorks(
779+
CharMatcher.is('0').or(is('1')),
780+
/* expectedNormal= */ "CharMatcher.is('\\u0030').or(CharMatcher.is('\\u0031'))",
781+
// .precomputed() optimizes
782+
/* expectedPrecomputed= */ "CharMatcher.anyOf(\"\\u0030\\u0031\")");
783+
assertToStringWorks(
784+
CharMatcher.digit().and(CharMatcher.ascii()),
785+
"CharMatcher.digit().and(CharMatcher.ascii())");
786+
assertToStringWorks(
787+
CharMatcher.inRange('a', 'z')
788+
.or(CharMatcher.inRange('A', 'Z'))
789+
.or(CharMatcher.inRange('0', '9'))
790+
.or(CharMatcher.is('_')),
791+
"CharMatcher.inRange('\\u0061', '\\u007A')"
792+
+ ".or(CharMatcher.inRange('\\u0041', '\\u005A'))"
793+
+ ".or(CharMatcher.inRange('\\u0030', '\\u0039'))"
794+
+ ".or(CharMatcher.is('\\u005F'))");
795+
}
796+
797+
private static void assertToStringWorks(CharMatcher matcher, String expected) {
798+
assertToStringWorks(matcher, expected, expected);
799+
}
800+
801+
private static void assertToStringWorks(
802+
CharMatcher matcher, String expectedNormal, String expectedPrecomputed) {
803+
assertThat(matcher.toString()).isEqualTo(expectedNormal);
804+
assertThat(matcher.negate().negate().toString()).isEqualTo(expectedNormal);
805+
806+
// The precomputed form is different on regular platforms but the same on j2cl and j2kt.
807+
// Hence isAnyOf here.
808+
assertThat(matcher.precomputed().toString()).isAnyOf(expectedNormal, expectedPrecomputed);
809+
assertThat(matcher.negate().precomputed().negate().toString())
810+
.isAnyOf(expectedNormal, expectedPrecomputed);
811+
assertThat(matcher.negate().precomputed().negate().precomputed().toString())
812+
.isAnyOf(expectedNormal, expectedPrecomputed);
785813
}
786814
}

android/guava/src/com/google/common/base/CharMatcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@ void setBits(BitSet table) {
15751575

15761576
@Override
15771577
public String toString() {
1578-
return "CharMatcher.and(" + first + ", " + second + ")";
1578+
return first + ".and(" + second + ")";
15791579
}
15801580
}
15811581

@@ -1604,7 +1604,7 @@ public boolean matches(char c) {
16041604

16051605
@Override
16061606
public String toString() {
1607-
return "CharMatcher.or(" + first + ", " + second + ")";
1607+
return first + ".or(" + second + ")";
16081608
}
16091609
}
16101610

guava-tests/test/com/google/common/base/CharMatcherTest.java

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static com.google.common.base.CharMatcher.isNot;
2525
import static com.google.common.base.CharMatcher.noneOf;
2626
import static com.google.common.base.CharMatcher.whitespace;
27+
import static com.google.common.truth.Truth.assertThat;
2728

2829
import com.google.common.annotations.GwtCompatible;
2930
import com.google.common.annotations.GwtIncompatible;
@@ -770,19 +771,46 @@ static char[] randomChars(Random rand, int size) {
770771
}
771772

772773
public void testToString() {
773-
assertToStringWorks("CharMatcher.none()", CharMatcher.anyOf(""));
774-
assertToStringWorks("CharMatcher.is('\\u0031')", CharMatcher.anyOf("1"));
775-
assertToStringWorks("CharMatcher.isNot('\\u0031')", CharMatcher.isNot('1'));
776-
assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\")", CharMatcher.anyOf("12"));
777-
assertToStringWorks("CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")", CharMatcher.anyOf("321"));
778-
assertToStringWorks("CharMatcher.inRange('\\u0031', '\\u0033')", CharMatcher.inRange('1', '3'));
779-
}
780-
781-
private static void assertToStringWorks(String expected, CharMatcher matcher) {
782-
assertEquals(expected, matcher.toString());
783-
assertEquals(expected, matcher.precomputed().toString());
784-
assertEquals(expected, matcher.negate().negate().toString());
785-
assertEquals(expected, matcher.negate().precomputed().negate().toString());
786-
assertEquals(expected, matcher.negate().precomputed().negate().precomputed().toString());
774+
assertToStringWorks(CharMatcher.anyOf(""), "CharMatcher.none()");
775+
assertToStringWorks(CharMatcher.anyOf("1"), "CharMatcher.is('\\u0031')");
776+
assertToStringWorks(CharMatcher.isNot('1'), "CharMatcher.isNot('\\u0031')");
777+
assertToStringWorks(CharMatcher.anyOf("12"), "CharMatcher.anyOf(\"\\u0031\\u0032\")");
778+
assertToStringWorks(CharMatcher.anyOf("321"), "CharMatcher.anyOf(\"\\u0031\\u0032\\u0033\")");
779+
assertToStringWorks(CharMatcher.inRange('1', '3'), "CharMatcher.inRange('\\u0031', '\\u0033')");
780+
assertToStringWorks(
781+
CharMatcher.is('0').or(is('1')),
782+
/* expectedNormal= */ "CharMatcher.is('\\u0030').or(CharMatcher.is('\\u0031'))",
783+
// .precomputed() optimizes
784+
/* expectedPrecomputed= */ "CharMatcher.anyOf(\"\\u0030\\u0031\")");
785+
assertToStringWorks(
786+
CharMatcher.digit().and(CharMatcher.ascii()),
787+
"CharMatcher.digit().and(CharMatcher.ascii())");
788+
assertToStringWorks(
789+
CharMatcher.inRange('a', 'z')
790+
.or(CharMatcher.inRange('A', 'Z'))
791+
.or(CharMatcher.inRange('0', '9'))
792+
.or(CharMatcher.is('_')),
793+
"CharMatcher.inRange('\\u0061', '\\u007A')"
794+
+ ".or(CharMatcher.inRange('\\u0041', '\\u005A'))"
795+
+ ".or(CharMatcher.inRange('\\u0030', '\\u0039'))"
796+
+ ".or(CharMatcher.is('\\u005F'))");
797+
}
798+
799+
private static void assertToStringWorks(CharMatcher matcher, String expected) {
800+
assertToStringWorks(matcher, expected, expected);
801+
}
802+
803+
private static void assertToStringWorks(
804+
CharMatcher matcher, String expectedNormal, String expectedPrecomputed) {
805+
assertThat(matcher.toString()).isEqualTo(expectedNormal);
806+
assertThat(matcher.negate().negate().toString()).isEqualTo(expectedNormal);
807+
808+
// The precomputed form is different on regular platforms but the same on j2cl and j2kt.
809+
// Hence isAnyOf here.
810+
assertThat(matcher.precomputed().toString()).isAnyOf(expectedNormal, expectedPrecomputed);
811+
assertThat(matcher.negate().precomputed().negate().toString())
812+
.isAnyOf(expectedNormal, expectedPrecomputed);
813+
assertThat(matcher.negate().precomputed().negate().precomputed().toString())
814+
.isAnyOf(expectedNormal, expectedPrecomputed);
787815
}
788816
}

guava/src/com/google/common/base/CharMatcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,7 +1591,7 @@ void setBits(BitSet table) {
15911591

15921592
@Override
15931593
public String toString() {
1594-
return "CharMatcher.and(" + first + ", " + second + ")";
1594+
return first + ".and(" + second + ")";
15951595
}
15961596
}
15971597

@@ -1620,7 +1620,7 @@ public boolean matches(char c) {
16201620

16211621
@Override
16221622
public String toString() {
1623-
return "CharMatcher.or(" + first + ", " + second + ")";
1623+
return first + ".or(" + second + ")";
16241624
}
16251625
}
16261626

0 commit comments

Comments
 (0)