test/jdk/java/util/regex/RegExTest.java
changeset 48853 84b4ffbba8b0
parent 48491 7f11a1699ef6
child 49554 f088ec60bed5
--- a/test/jdk/java/util/regex/RegExTest.java	Tue Feb 13 12:26:22 2018 +0800
+++ b/test/jdk/java/util/regex/RegExTest.java	Mon Feb 12 21:06:06 2018 -0800
@@ -35,7 +35,7 @@
  * 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
  * 8151481 4867170 7080302 6728861 6995635 6736245 4916384 6328855 6192895
  * 6345469 6988218 6693451 7006761 8140212 8143282 8158482 8176029 8184706
- * 8194667
+ * 8194667 8197462
  *
  * @library /test/lib
  * @build jdk.test.lib.RandomFactory
@@ -168,6 +168,7 @@
         embeddedFlags();
         grapheme();
         expoBacktracking();
+        invalidGroupName();
 
         if (failure) {
             throw new
@@ -4870,4 +4871,41 @@
             }
         }
     }
+
+    private static void invalidGroupName() {
+        // Invalid start of a group name
+        for (String groupName : List.of("", ".", "0", "\u0040", "\u005b",
+                "\u0060", "\u007b", "\u0416")) {
+            for (String pat : List.of("(?<" + groupName + ">)",
+                    "\\k<" + groupName + ">")) {
+                try {
+                    Pattern.compile(pat);
+                    failCount++;
+                } catch (PatternSyntaxException e) {
+                    if (!e.getMessage().startsWith(
+                            "capturing group name does not start with a"
+                            + " Latin letter")) {
+                        failCount++;
+                    }
+                }
+            }
+        }
+        // Invalid char in a group name
+        for (String groupName : List.of("a.", "b\u0040", "c\u005b",
+                "d\u0060", "e\u007b", "f\u0416")) {
+            for (String pat : List.of("(?<" + groupName + ">)",
+                    "\\k<" + groupName + ">")) {
+                try {
+                    Pattern.compile(pat);
+                    failCount++;
+                } catch (PatternSyntaxException e) {
+                    if (!e.getMessage().startsWith(
+                            "named capturing group is missing trailing '>'")) {
+                        failCount++;
+                    }
+                }
+            }
+        }
+        report("Invalid capturing group names");
+    }
 }