< prev index next >
test/jdk/java/lang/Character/CheckProp.java
Print this page
rev 56092 : imported patch 8229831
@@ -22,63 +22,34 @@
*/
/**
* @test
- * @bug 7037261 7070436 7198195 8032446 8072600 8221431
- * @summary Check j.l.Character.isLowerCase/isUppercase/isAlphabetic/isIdeographic
+ * @bug 7037261 7070436 7198195 8032446 8072600 8221431 8229831
+ * @summary Check j.l.Character.isLowerCase/isUppercase/isAlphabetic/isIdeographic/
+ * isUnicodeIdentifierStart/isUnicodeIdentifierPart
* @library /lib/testlibrary/java/lang
*/
import java.util.regex.*;
import java.util.*;
import java.io.*;
import static java.lang.Character.*;
public class CheckProp {
- public static void main(String[] args) throws IOException {
- File fPropList = UCDFiles.PROP_LIST.toFile();
- int i, j;
- BufferedReader sbfr = new BufferedReader(new FileReader(fPropList));
- Matcher m = Pattern.compile("(\\p{XDigit}+)(?:\\.{2}(\\p{XDigit}+))?\\s*;\\s+(\\w+)\\s+#.*").matcher("");
- Map<String, ArrayList<Integer>> propMap = new LinkedHashMap<>();
-
- String line = null;
- int lineNo = 0;
- while ((line = sbfr.readLine()) != null) {
- lineNo++;
- if (line.length() <= 1 || line.charAt(0) == '#') {
- continue;
- }
- m.reset(line);
- if (m.matches()) {
- int start = Integer.parseInt(m.group(1), 16);
- int end = (m.group(2)==null)?start
- :Integer.parseInt(m.group(2), 16);
- String name = m.group(3);
-
- ArrayList<Integer> list = propMap.get(name);
- if (list == null) {
- list = new ArrayList<Integer>();
- propMap.put(name, list);
- }
- while (start <= end)
- list.add(start++);
- } else {
- System.out.printf("Warning: Unrecognized line %d <%s>%n", lineNo, line);
- }
- }
- sbfr.close();
- //for (String name: propMap.keySet()) {
- // System.out.printf("%s %d%n", name, propMap.get(name).size());
- //}
+ public static void main(String[] args) {
+ Map<String, List<Integer>> propMap = new LinkedHashMap<>();
+ List.of(UCDFiles.PROP_LIST.toFile(), UCDFiles.DERIVED_PROPS.toFile()).stream()
+ .forEach(f -> readPropMap(propMap, f));
Integer[] otherLowercase = propMap.get("Other_Lowercase").toArray(new Integer[0]);
Integer[] otherUppercase = propMap.get("Other_Uppercase").toArray(new Integer[0]);
Integer[] otherAlphabetic = propMap.get("Other_Alphabetic").toArray(new Integer[0]);
Integer[] ideographic = propMap.get("Ideographic").toArray(new Integer[0]);
+ Integer[] IDStart = propMap.get("ID_Start").toArray(new Integer[0]);
+ Integer[] IDContinue = propMap.get("ID_Continue").toArray(new Integer[0]);
int fails = 0;
for (int cp = MIN_CODE_POINT; cp < MAX_CODE_POINT; cp++) {
int type = getType(cp);
if (isLowerCase(cp) !=
@@ -109,10 +80,65 @@
(Arrays.binarySearch(ideographic, cp) >= 0))
{
fails++;
System.err.printf("Wrong isIdeographic(U+%04x)\n", cp);
}
+ if (isUnicodeIdentifierStart(cp) !=
+ (cp == 0x2E2F ||
+ Arrays.binarySearch(IDStart, cp) >= 0))
+ {
+ fails++;
+ System.err.printf("Wrong isUnicodeIdentifierStart(U+%04x)\n", cp);
+ }
+ if (isUnicodeIdentifierPart(cp) !=
+ (isIdentifierIgnorable(cp) ||
+ cp == 0x2E2F ||
+ Arrays.binarySearch(IDContinue, cp) >= 0))
+ {
+ fails++;
+ System.err.printf("Wrong isUnicodeIdentifierPart(U+%04x)\n", cp);
+ }
}
if (fails != 0)
throw new RuntimeException("CheckProp failed=" + fails);
}
+
+ private static void readPropMap(Map<String, List<Integer>> propMap, File fPropList) {
+ try {
+ BufferedReader sbfr = new BufferedReader(new FileReader(fPropList));
+ Matcher m = Pattern.compile("(\\p{XDigit}+)(?:\\.{2}(\\p{XDigit}+))?\\s*;\\s+(\\w+)\\s+#.*").matcher("");
+
+ String line = null;
+ int lineNo = 0;
+ while ((line = sbfr.readLine()) != null) {
+ lineNo++;
+ if (line.length() <= 1 || line.charAt(0) == '#') {
+ continue;
+ }
+ m.reset(line);
+ if (m.matches()) {
+ int start = Integer.parseInt(m.group(1), 16);
+ int end = (m.group(2)==null)?start
+ :Integer.parseInt(m.group(2), 16);
+ String name = m.group(3);
+
+ List<Integer> list = propMap.get(name);
+ if (list == null) {
+ list = new ArrayList<Integer>();
+ propMap.put(name, list);
+ }
+ while (start <= end)
+ list.add(start++);
+ } else {
+ System.out.printf("Warning: Unrecognized line %d <%s>%n", lineNo, line);
+ }
+ }
+ sbfr.close();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException(ioe);
+ }
+
+ //for (String name: propMap.keySet()) {
+ // System.out.printf("%s %d%n", name, propMap.get(name).size());
+ //}
+ }
}
< prev index next >