Skip to content

Commit

Permalink
Fix a bug, and fix unit tests for constant folding
Browse files Browse the repository at this point in the history
  • Loading branch information
niloc132 committed Dec 9, 2024
1 parent 6079779 commit b38593d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 9 deletions.
2 changes: 1 addition & 1 deletion user/super/com/google/gwt/emul/java/lang/String.java
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,7 @@ public String[] split(String regex, int maxMatch) {
} else {
int matchIndex = matchObj.getIndex();

if (lastTrail == null && matchIndex == 0) {
if (lastTrail == null && matchIndex == 0 && matchObj.asArray()[0].length() == 0) {
// As of Java 8, we should discard the first zero-length match if it is the beginning of
// the string. Do not increment the count, and do not add to the output array.
trail = trail.substring(matchIndex + matchObj.asArray()[0].length(), trail.length());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,15 +245,30 @@ public void testSplit() {
"b", "", ":and:f"});
compareList("0:", "boo:and:foo".split(":", 0), new String[] {
"boo", "and", "foo"});
}
// issue 2742
compareList("issue2742", new String[] {}, "/".split("/", 0));

// Splitting an empty string should result in an array containing a single
// empty string.
String[] s = "".split(",");
assertTrue(s != null);
assertTrue(s.length == 1);
assertTrue(s[0] != null);
assertTrue(s[0].length() == 0);

s = "abcada".split("a");
assertTrue(s != null);
assertEquals(3, s.length);
assertEquals("", s[0]);
assertEquals("bc", s[1]);
assertEquals("d", s[2]); }

public void testSplit_emptyExpr() {
// TODO(rluble): implement JDK8 string.split semantics and fix test.
// See issue 8913.
String[] expected = (TestUtils.getJdkVersion() > 7) ?
new String[] {"a", "b", "c", "x", "x", "d", "e", "x", "f", "x"} :
new String[] {"", "a", "b", "c", "x", "x", "d", "e", "x", "f", "x"};
String[] expected = new String[] {"a", "b", "c", "x", "x", "d", "e", "x", "f", "x"};
compareList("emptyRegexSplit", expected, "abcxxdexfx".split(""));

String[] arr = ",".split(",");
assertEquals(0, arr.length);
}

public void testStartsWith() {
Expand Down
14 changes: 12 additions & 2 deletions user/test/com/google/gwt/emultest/java/lang/StringTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -781,20 +781,30 @@ public void testSplit() {

// Splitting an empty string should result in an array containing a single
// empty string.
String[] s = "".split(",");
String[] s = hideFromCompiler("").split(",");
assertTrue(s != null);
assertTrue(s.length == 1);
assertTrue(s[0] != null);
assertTrue(s[0].length() == 0);

s = hideFromCompiler("abcada").split("a");
assertTrue(s != null);
assertEquals(3, s.length);
assertEquals("", s[0]);
assertEquals("bc", s[1]);
assertEquals("d", s[2]);
}

public void testSplit_emptyExpr() {
String[] expected = new String[] {"a", "b", "c", "x", "x", "d", "e", "x", "f", "x"};
compareList("emptyRegexSplit", expected, hideFromCompiler("abcxxdexfx").split(""));

String[] arr = hideFromCompiler(",").split(",");
assertEquals(0, arr.length);
}

public void testStartsWith() {
String haystack = "abcdefghi";
String haystack = hideFromCompiler("abcdefghi");
assertTrue(haystack.startsWith("abc"));
assertTrue(haystack.startsWith("bc", 1));
assertTrue(haystack.startsWith(haystack));
Expand Down

0 comments on commit b38593d

Please sign in to comment.