Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/String/Split.java
41152 views
1
/*
2
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/**
25
* @test
26
* @bug 6840246 6559590
27
* @summary test String.split()
28
* @key randomness
29
*/
30
import java.util.Arrays;
31
import java.util.Random;
32
import java.util.regex.*;
33
34
public class Split {
35
36
public static void main(String[] args) throws Exception {
37
String source = "0123456789";
38
39
for (int limit=-2; limit<3; limit++) {
40
for (int x=0; x<10; x++) {
41
String[] result = source.split(Integer.toString(x), limit);
42
int expectedLength = limit < 1 ? 2 : limit;
43
44
if ((limit == 0) && (x == 9)) {
45
// expected dropping of ""
46
if (result.length != 1)
47
throw new RuntimeException("String.split failure 1");
48
if (!result[0].equals("012345678")) {
49
throw new RuntimeException("String.split failure 2");
50
}
51
} else {
52
if (result.length != expectedLength) {
53
throw new RuntimeException("String.split failure 3");
54
}
55
if (!result[0].equals(source.substring(0,x))) {
56
if (limit != 1) {
57
throw new RuntimeException(
58
"String.split failure 4");
59
} else {
60
if (!result[0].equals(source.substring(0,10))) {
61
throw new RuntimeException(
62
"String.split failure 10");
63
}
64
}
65
}
66
if (expectedLength > 1) { // Check segment 2
67
if (!result[1].equals(source.substring(x+1,10)))
68
throw new RuntimeException("String.split failure 5");
69
}
70
}
71
}
72
}
73
// Check the case for no match found
74
for (int limit=-2; limit<3; limit++) {
75
String[] result = source.split("e", limit);
76
if (result.length != 1)
77
throw new RuntimeException("String.split failure 6");
78
if (!result[0].equals(source))
79
throw new RuntimeException("String.split failure 7");
80
}
81
// Check the case for limit == 0, source = "";
82
// split() now returns 0-length for empty source "" see #6559590
83
source = "";
84
String[] result = source.split("e", 0);
85
if (result.length != 1)
86
throw new RuntimeException("String.split failure 8");
87
if (!result[0].equals(source))
88
throw new RuntimeException("String.split failure 9");
89
90
// check fastpath of String.split()
91
source = "0123456789abcdefgABCDEFG";
92
Random r = new Random();
93
94
for (boolean doEscape: new boolean[] {false, true}) {
95
for (int cp = 0; cp < 0x11000; cp++) {
96
Pattern p = null;
97
String regex = new String(Character.toChars(cp));
98
if (doEscape)
99
regex = "\\" + regex;
100
try {
101
p = Pattern.compile(regex);
102
} catch (PatternSyntaxException pse) {
103
// illegal syntax
104
try {
105
"abc".split(regex);
106
} catch (PatternSyntaxException pse0) {
107
continue;
108
}
109
throw new RuntimeException("String.split failure 11");
110
}
111
int off = r.nextInt(source.length());
112
String[] srcStrs = new String[] {
113
"",
114
source,
115
regex + source,
116
source + regex,
117
source.substring(0, 3)
118
+ regex + source.substring(3, 9)
119
+ regex + source.substring(9, 15)
120
+ regex + source.substring(15),
121
source.substring(0, off) + regex + source.substring(off)
122
};
123
for (String src: srcStrs) {
124
for (int limit=-2; limit<3; limit++) {
125
if (!Arrays.equals(src.split(regex, limit),
126
p.split(src, limit)))
127
throw new RuntimeException("String.split failure 12");
128
}
129
}
130
}
131
}
132
}
133
}
134
135