< prev index next >

test/jdk/java/util/regex/RegExTest.java

Print this page
rev 58483 : [mq]: 8237599-Greedy-matching-against-supplementary-chars-does-not-respect-the-region

@@ -34,11 +34,11 @@
  * 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 6559590
  * 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 8197462 8184692 8221431 8224789 8228352 8230829 8236034 8235812
- * 8216332 8214245
+ * 8216332 8214245 8237599
  *
  * @library /test/lib
  * @library /lib/testlibrary/java/lang
  * @build jdk.test.lib.RandomFactory
  * @run main RegExTest

@@ -193,10 +193,11 @@
         invalidGroupName();
         illegalRepetitionRange();
         surrogatePairWithCanonEq();
         lineBreakWithQuantifier();
         caseInsensitivePMatch();
+        surrogatePairOverlapRegion();
 
         if (failure) {
             throw new
                 RuntimeException("RegExTest failed, 1st failure: " +
                                  firstFailure);

@@ -5153,6 +5154,47 @@
                 }
             }
         }
         report("caseInsensitivePMatch");
     }
+
+    // This test is for 8237599
+    private static void surrogatePairOverlapRegion() {
+        String input = "\ud801\udc37";
+
+        Pattern p = Pattern.compile(".+");
+        Matcher m = p.matcher(input);
+        m.region(0, 1);
+
+        boolean ok = m.find();
+        if (!ok || !m.group(0).equals(input.substring(0, 1)))
+        {
+            failCount++;
+            System.out.println("Input \"" + input + "\".substr(0, 1)" +
+                    " expected to match pattern \"" + p + "\"");
+            if (ok) {
+                System.out.println("group(0): \"" + m.group(0) + "\"");
+            }
+        } else if (!m.hitEnd()) {
+            failCount++;
+            System.out.println("Expected m.hitEnd() == true");
+        }
+
+        p = Pattern.compile(".*(.)");
+        m = p.matcher(input);
+        m.region(1, 2);
+
+        ok = m.find();
+        if (!ok || !m.group(0).equals(input.substring(1, 2))
+                || !m.group(1).equals(input.substring(1, 2)))
+        {
+            failCount++;
+            System.out.println("Input \"" + input + "\".substr(1, 2)" +
+                    " expected to match pattern \"" + p + "\"");
+            if (ok) {
+                System.out.println("group(0): \"" + m.group(0) + "\"");
+                System.out.println("group(1): \"" + m.group(1) + "\"");
+            }
+        }
+        report("surrogatePairOverlapRegion");
+    }
 }
< prev index next >