diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/unicode-regexp-backrefs.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/unicode-regexp-backrefs.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/unicode-regexp-backrefs.js b/deps/v8/test/mjsunit/es6/unicode-regexp-backrefs.js new file mode 100644 index 0000000000..56b9c5eb8c --- /dev/null +++ b/deps/v8/test/mjsunit/es6/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-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") + .replace(/T/g, "\udc00") + .replace(/\./g, "[^]"); +} + +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"); |