< 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 >