/* * 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!");