test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

155 lines
4.1 KiB
JavaScript

function assert(assertion) {
if (typeof assertion != "string")
throw new Error("Invalid assertion.");
let result = eval(assertion);
if (!result)
throw new Error("Bad assertion: " + assertion);
}
let get = [];
let getSet = [];
function resetTracking()
{
get = [];
getSet = [];
}
let getProxyNullExec = new Proxy({
exec: function()
{
return null;
}
}, {
get: function(o, k)
{
get.push(k); return o[k];
}
});
resetTracking();
RegExp.prototype[Symbol.replace].call(getProxyNullExec);
assert('get == "global,exec"');
let getSetProxyNullExec = new Proxy(
{
exec: function()
{
return null;
}
}, {
get: function(o, k)
{
get.push(k);
getSet.push(k);
return o[k];
},
set: function(o, k, v)
{
getSet.push(k);
o[k] = v;
}
});
getSetProxyNullExec.global = true;
resetTracking();
RegExp.prototype[Symbol.replace].call(getSetProxyNullExec);
assert('get == "global,unicode,exec"');
assert('getSet == "global,unicode,lastIndex,exec"');
let regExpGlobal_comma = new RegExp(",", "g");
let getSetProxyMatches_comma = new Proxy(
{
exec: function(string)
{
return regExpGlobal_comma.exec(string);
}
}, {
get: function(o, k)
{
get.push(k);
getSet.push(k);
return o[k];
},
set: function(o, k, v)
{
getSet.push(k);
o[k] = v;
}
});
getSetProxyMatches_comma.global = true;
resetTracking();
let replaceResult = RegExp.prototype[Symbol.replace].call(getSetProxyMatches_comma, "John,,Doe,121 Main St.,Anytown", ":");
assert('replaceResult == "John::Doe:121 Main St.:Anytown"');
assert('get == "global,unicode,exec,exec,exec,exec,exec"');
assert('getSet == "global,unicode,lastIndex,exec,exec,exec,exec,exec"');
let regExp_phoneNumber = new RegExp("(\\d{3})(\\d{3})(\\d{4})", "");
let getSetProxyReplace_phoneNumber = new Proxy(
{
exec: function(string)
{
return regExp_phoneNumber.exec(string);
}
}, {
get: function(o, k)
{
get.push(k);
getSet.push(k);
if (k.toString() == "lastIndex")
return regExpGlobal_phoneNumber.lastIndex;
return o[k];
},
set: function(o, k, v)
{
getSet.push(k);
if (k.toString() == "lastIndex")
regExp_phoneNumber.lastIndex = v;
o[k] = v;
}
});
resetTracking();
replaceResult = RegExp.prototype[Symbol.replace].call(getSetProxyReplace_phoneNumber, "8005551212", "$1-$2-$3");
assert('replaceResult == "800-555-1212"');
assert('get == "global,exec"');
assert('getSet == "global,exec"');
let regExpGlobalUnicode_digit_nonGreedy = new RegExp("\\d{0,1}", "gu");
let getSetProxyReplaceUnicode_digit_nonGreedy = new Proxy(
{
exec: function(string)
{
return regExpGlobalUnicode_digit_nonGreedy.exec(string);
}
}, {
get: function(o, k)
{
get.push(k);
getSet.push(k);
if (k.toString() == "lastIndex")
return regExpGlobalUnicode_digit_nonGreedy.lastIndex;
return o[k];
},
set: function(o, k, v)
{
getSet.push(k);
if (k.toString() == "lastIndex")
regExpGlobalUnicode_digit_nonGreedy.lastIndex = v;
o[k] = v;
}
});
getSetProxyReplaceUnicode_digit_nonGreedy.global = true;
getSetProxyReplaceUnicode_digit_nonGreedy.unicode = true;
resetTracking();
replaceResult = RegExp.prototype[Symbol.replace].call(getSetProxyReplaceUnicode_digit_nonGreedy, "12X3\u{10400}4", "[$&]");
assert('replaceResult == "[1][2][]X[3][]\u{10400}[4][]"');
assert('get == "global,unicode,exec,exec,exec,lastIndex,exec,exec,lastIndex,exec,exec,lastIndex,exec"');
assert('getSet == "global,unicode,lastIndex,exec,exec,exec,lastIndex,lastIndex,exec,exec,lastIndex,lastIndex,exec,exec,lastIndex,lastIndex,exec"');