diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /js/src/tests/non262/String/15.5.4.11-01.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/String/15.5.4.11-01.js')
-rw-r--r-- | js/src/tests/non262/String/15.5.4.11-01.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/js/src/tests/non262/String/15.5.4.11-01.js b/js/src/tests/non262/String/15.5.4.11-01.js new file mode 100644 index 0000000000..2125cbf829 --- /dev/null +++ b/js/src/tests/non262/String/15.5.4.11-01.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 587366; +var summary = "String.prototype.replace with non-regexp searchValue"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* + * Check that regexp statics are preserved across the whole test. + * If the engine is trying to cheat by turning stuff into regexps, + * we should catch it! + */ +/(a|(b)|c)+/.exec('abcabc'); +var before = { + "source" : RegExp.source, + "$`": RegExp.leftContext, + "$'": RegExp.rightContext, + "$&": RegExp.lastMatch, + "$1": RegExp.$1, + "$2": RegExp.$2 +}; + +var text = 'I once was lost but now am found.'; +var searchValue = 'found'; +var replaceValue; + +/* Lambda substitution. */ +replaceValue = function(matchStr, matchStart, textStr) { + assertEq(matchStr, searchValue); + assertEq(matchStart, 27); + assertEq(textStr, text); + return 'not watching that show anymore'; +} +var result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am not watching that show anymore.'); + +/* Dollar substitution. */ +replaceValue = "...wait, where was I again? And where is all my $$$$$$? Oh right, $`$&$'" + + " But with no $$$$$$"; /* Note the dot is not replaced and trails the end. */ +result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am ...wait, where was I again?' + + ' And where is all my $$$? Oh right, I once was lost but now am found.' + + ' But with no $$$.'); + +/* Missing capture group dollar substitution. */ +replaceValue = "$1$&$2$'$3"; +result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am $1found$2.$3.'); + +/* Check RegExp statics haven't been mutated. */ +for (var ident in before) + assertEq(RegExp[ident], before[ident]); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); |