Title: [235655] trunk/LayoutTests
Revision
235655
Author
msab...@apple.com
Date
2018-09-04 19:08:34 -0700 (Tue, 04 Sep 2018)

Log Message

YARR: Add new RegExp back reference tests to specifically test back reference JIT code
https://bugs.webkit.org/show_bug.cgi?id=189291

Reviewed by Saam Barati.

New tests.

* fast/regex/backreferences-expected.txt: Added.
* fast/regex/backreferences.html: Added.
* fast/regex/script-tests/backreferences.js: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (235654 => 235655)


--- trunk/LayoutTests/ChangeLog	2018-09-05 01:57:00 UTC (rev 235654)
+++ trunk/LayoutTests/ChangeLog	2018-09-05 02:08:34 UTC (rev 235655)
@@ -1,3 +1,16 @@
+2018-09-04  Michael Saboff  <msab...@apple.com>
+
+        YARR: Add new RegExp back reference tests to specifically test back reference JIT code
+        https://bugs.webkit.org/show_bug.cgi?id=189291
+
+        Reviewed by Saam Barati.
+
+        New tests.
+
+        * fast/regex/backreferences-expected.txt: Added.
+        * fast/regex/backreferences.html: Added.
+        * fast/regex/script-tests/backreferences.js: Added.
+
 2018-09-04  Ryosuke Niwa  <rn...@webkit.org>
 
         slotchange event doesn't get fired when inserting, removing, or renaming slot elements

Added: trunk/LayoutTests/fast/regex/backreferences-expected.txt (0 => 235655)


--- trunk/LayoutTests/fast/regex/backreferences-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/regex/backreferences-expected.txt	2018-09-05 02:08:34 UTC (rev 235655)
@@ -0,0 +1,27 @@
+This tests backreferences
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /^(.)\1{3}/.exec('=====') is ["====", "="]
+PASS /^(.)\1*/.exec('=====') is ["=====", "="]
+PASS /^(.)\1*?/.exec('=====') is ["=", "="]
+PASS /^(.)\1*?$/.exec('=====') is ["=====", "="]
+PASS /(.*)\1/.exec('======') is ["======", "==="]
+PASS /(.*)\1{2}/.exec('======') is ["======", "=="]
+PASS /(.*)\1{4}/.exec('======') is ["=====", "="]
+PASS /(.*)\1{5}/.exec('======') is ["======", "="]
+PASS /(=).\1{3}/.exec('=a==b===') is ["=b===", "="]
+PASS /(===).\1*X/.exec('===a==X===b======X') is ["===b======X", "==="]
+PASS /\w*?(\w*) (c\1) is a f\1 \2/.exec('That cat is a fat cat') is ["That cat is a fat cat", "at", "cat"]
+PASS /(\w)(\w)(\w)e\3\2\1/i.exec('Racecar') is ["Racecar", "R", "a", "c"]
+PASS /^(?<equals>=*)\k<equals>+?$/.exec('======') is ["======", "==="]
+PASS /^(\u{10123}*)x\1?$/u.exec('\u{10123}x\u{10123}') is ["\u{10123}x\u{10123}", "\u{10123}"]
+PASS /(.{4})\1/i.exec('ABcdAbCd') is ["ABcdAbCd", "ABcd"]
+PASS /(.{4})\1/i.exec('ABc\u{fd}AbC\u{dd}') is ["ABc\u{fd}AbC\u{dd}", "ABc\u{fd}"]
+PASS /(.{4})\1/i.exec('ABc\u{b5}AbC\u{b5}') is ["ABc\u{b5}AbC\u{b5}", "ABc\u{b5}"]
+PASS /(.{4})\1/i.exec('ABc\u{ff}AbC\u{ff}') is ["ABc\u{ff}AbC\u{ff}", "ABc\u{ff}"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/regex/backreferences.html (0 => 235655)


--- trunk/LayoutTests/fast/regex/backreferences.html	                        (rev 0)
+++ trunk/LayoutTests/fast/regex/backreferences.html	2018-09-05 02:08:34 UTC (rev 235655)
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/regex/script-tests/backreferences.js (0 => 235655)


--- trunk/LayoutTests/fast/regex/script-tests/backreferences.js	                        (rev 0)
+++ trunk/LayoutTests/fast/regex/script-tests/backreferences.js	2018-09-05 02:08:34 UTC (rev 235655)
@@ -0,0 +1,32 @@
+description("This tests backreferences"); 
+
+// Basic counted, greedy and non-greedy back references
+shouldBe("/^(.)\\1{3}/.exec('=====')", '["====", "="]');
+
+shouldBe("/^(.)\\1*/.exec('=====')", '["=====", "="]');
+shouldBe("/^(.)\\1*?/.exec('=====')", '["=", "="]');
+shouldBe("/^(.)\\1*?$/.exec('=====')", '["=====", "="]');
+
+// Back reference back tracking
+shouldBe("/(.*)\\1/.exec('======')", '["======", "==="]');
+shouldBe("/(.*)\\1{2}/.exec('======')", '["======", "=="]');
+shouldBe("/(.*)\\1{4}/.exec('======')", '["=====", "="]');
+shouldBe("/(.*)\\1{5}/.exec('======')", '["======", "="]');
+shouldBe("/(=).\\1{3}/.exec('=a==b===')", '["=b===", "="]');
+shouldBe("/(===).\\1*X/.exec('===a==X===b======X')", '["===b======X", "==="]');
+
+// Multiple back references
+shouldBe("/\\w*?(\\w*) (c\\1) is a f\\1 \\2/.exec('That cat is a fat cat')", '["That cat is a fat cat", "at", "cat"]');
+shouldBe("/(\\w)(\\w)(\\w)e\\3\\2\\1/i.exec('Racecar')", '["Racecar", "R", "a", "c"]');
+
+// Named capture group back references
+shouldBe("/^(?<equals>=*)\\k<equals>+?$/.exec('======')", '["======", "==="]');
+
+// Unicode back references
+shouldBe("/^(\\u{10123}*)x\\1?$/u.exec('\\u{10123}x\\u{10123}')", '["\\u{10123}x\\u{10123}", "\\u{10123}"]');
+
+// Ignore case back references
+shouldBe("/(.{4})\\1/i.exec('ABcdAbCd')", '["ABcdAbCd", "ABcd"]');
+shouldBe("/(.{4})\\1/i.exec('ABc\\u{fd}AbC\\u{dd}')", '["ABc\\u{fd}AbC\\u{dd}", "ABc\\u{fd}"]');
+shouldBe("/(.{4})\\1/i.exec('ABc\\u{b5}AbC\\u{b5}')", '["ABc\\u{b5}AbC\\u{b5}", "ABc\\u{b5}"]');
+shouldBe("/(.{4})\\1/i.exec('ABc\\u{ff}AbC\\u{ff}')", '["ABc\\u{ff}AbC\\u{ff}", "ABc\\u{ff}"]');
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to