/* * Check the order of splice's internal operations, because the ordering is * visible externally.
*/
function handlerMaker(expected_exceptions) { var order = []; function note(trap, name)
{
order.push(trap + '-' + name); if (expected_exceptions[trap] === name) { throw ("fail");
}
}
return [{ /* this is the only trap we care about */
deleteProperty: function(target, name) {
note("del", name); return Reflect.deleteProperty(target, name);
}, // derived traps
has: function(target, name) {
note("has", name); return name in target;
},
get: function(target, name, receiver) {
note("get", name); return Reflect.get(target, name, receiver);
},
set: function(target, name, value, receiver) {
note("set", name); return Reflect.set(target, name, value, receiver);
},
}, order];
}
// arr: the array to splice // expected_order: the expected order of operations on arr, stringified function check_splice_proxy(arr, expected_order, expected_exceptions, expected_array, expected_result) {
print (arr); var [handler, store] = handlerMaker(expected_exceptions); var proxy = new Proxy(arr, handler);
try { var args = Array.prototype.slice.call(arguments, 5); var result = Array.prototype.splice.apply(proxy, args);
assertEq(Object.keys(expected_exceptions).length, 0);
} catch (e) {
assertEq(Object.keys(expected_exceptions).length > 0, true);
}
// check the order of the property accesses, etc
assertEq(store.toString(), expected_order);
// The deleted elements are returned in an object that's always an Array.
assertEq(Array.isArray(result) || result === undefined, true);
// check the return value for (var i in expected_result) {
assertEq(result[i], expected_result[i]);
} for (var i in result) {
assertEq(result[i], expected_result[i]);
}
// check the value of arr for (var i in expected_array) {
assertEq(arr[i], expected_array[i]);
} for (var i in arr) {
assertEq(arr[i], expected_array[i]);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.