Chromium Code Reviews| Index: test/mjsunit/harmony/unicode-regexp-backrefs.js |
| diff --git a/test/mjsunit/harmony/unicode-regexp-backrefs.js b/test/mjsunit/harmony/unicode-regexp-backrefs.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fb845af1f548a2b92adbb2e82891c51b4b3a6a08 |
| --- /dev/null |
| +++ b/test/mjsunit/harmony/unicode-regexp-backrefs.js |
| @@ -0,0 +1,53 @@ |
| +// Copyright 2016 the V8 project authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +// Flags: --harmony-unicode-regexps --harmony-regexp-lookbehind |
| + |
| +// Back reference does not end in the middle of a surrogate pair. |
| +function replace(string) { |
| + return string.replace(/L/g, "\ud800") |
| + .replace(/l/g, "\ud801") |
|
erikcorry
2016/01/26 16:25:07
]You could replace . (non-newline) with [^] (anyth
Yang
2016/01/27 09:06:06
Done.
|
| + .replace(/T/g, "\udc00") |
| + .replace(/t/g, "\udc01"); |
|
erikcorry
2016/01/26 16:25:07
You don't use the lower case 't' anywhere.
Yang
2016/01/27 09:06:06
Done.
|
| +} |
| + |
| +function test(expectation, regexp_source, subject) { |
| + if (expectation !== null) expectation = expectation.map(replace); |
| + subject = replace(subject); |
| + regexp_source = replace(regexp_source); |
| + assertEquals(expectation, new RegExp(regexp_source, "u").exec(subject)); |
| +} |
| + |
| +// Back reference does not end in the middle of a surrogate pair. |
| +test(null, "(L)\\1", "LLT"); |
| +test(["LLTLl", "L", "l"], "(L).*\\1(.)", "LLTLl"); |
| +test(null, "(aL).*\\1", "aLaLT"); |
| +test(["aLaLTaLl", "aL", "l"], "(aL).*\\1(.)", "aLaLTaLl"); |
| + |
| +var s = "TabcLxLTabcLxTabcLTyTabcLz"; |
| +test([s, "TabcL", "z"], "([^x]+).*\\1(.)", s); |
| + |
| +// Back reference does not start in the middle of a surrogate pair. |
| +test(["TLTabTc", "T", "c"], "(T).*\\1(.)", "TLTabTc"); |
| + |
| +// Lookbehinds. |
| +test(null, "(?<=\\1(T)x)", "LTTx"); |
| +test(["", "b", "T"], "(?<=(.)\\2.*(T)x)", "bTaLTTx"); |
| +test(null, "(?<=\\1.*(L)x)", "LTLx"); |
| +test(["", "b", "L"], "(?<=(.)\\2.*(L)x)", "bLaLTLx"); |
| + |
| + |
| +test(null, "([^x]+)x*\\1", "LxLT"); |
| +test(null, "([^x]+)x*\\1", "TxLT"); |
| +test(null, "([^x]+)x*\\1", "LTxL"); |
| +test(null, "([^x]+)x*\\1", "LTxT"); |
| +test(null, "([^x]+)x*\\1", "xLxLT"); |
| +test(null, "([^x]+)x*\\1", "xTxLT"); |
| +test(null, "([^x]+)x*\\1", "xLTxL"); |
| +test(null, "([^x]+)x*\\1", "xLTxT"); |
| +test(null, "([^x]+)x*\\1", "xxxLxxLTxx"); |
| +test(null, "([^x]+)x*\\1", "xxxTxxLTxx"); |
| +test(null, "([^x]+)x*\\1", "xxxLTxxLxx"); |
| +test(null, "([^x]+)x*\\1", "xxxLTxxTxx"); |
| +test(["LTTxxLTT", "LTT"], "([^x]+)x*\\1", "xxxLTTxxLTTxx"); |