2016-02-14 00:56:47 +01:00
|
|
|
// Copyright (C) 2016 Jordan Harband. All rights reserved.
|
|
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
|
|
|
|
/*---
|
|
|
|
description: allowProxyTraps helper should default throw on all the proxy trap named methods being invoked
|
2016-02-22 15:47:03 +01:00
|
|
|
esid: pending
|
2016-02-14 00:56:47 +01:00
|
|
|
author: Jordan Harband
|
|
|
|
includes: [proxyTrapsHelper.js]
|
|
|
|
---*/
|
2016-02-17 21:50:26 +01:00
|
|
|
var overrides = {
|
2016-02-14 00:56:47 +01:00
|
|
|
getPrototypeOf: function () {},
|
|
|
|
setPrototypeOf: function () {},
|
|
|
|
isExtensible: function () {},
|
|
|
|
preventExtensions: function () {},
|
|
|
|
getOwnPropertyDescriptor: function () {},
|
|
|
|
has: function () {},
|
|
|
|
get: function () {},
|
|
|
|
set: function () {},
|
|
|
|
deleteProperty: function () {},
|
|
|
|
defineProperty: function () {},
|
|
|
|
enumerate: function () {},
|
|
|
|
ownKeys: function () {},
|
|
|
|
apply: function () {},
|
|
|
|
construct: function () {},
|
2016-02-17 21:50:26 +01:00
|
|
|
};
|
|
|
|
var traps = allowProxyTraps(overrides);
|
2016-02-14 00:56:47 +01:00
|
|
|
|
|
|
|
function assertTrapSucceeds(trap) {
|
|
|
|
if (typeof traps[trap] !== 'function') {
|
|
|
|
throw new Test262Error('trap ' + trap + ' is not a function');
|
|
|
|
}
|
2016-02-17 21:50:26 +01:00
|
|
|
if (traps[trap] !== overrides[trap]) {
|
|
|
|
throw new Test262Error('trap ' + trap + ' was not overriden in allowProxyTraps');
|
|
|
|
}
|
2016-02-14 00:56:47 +01:00
|
|
|
var threw = false;
|
|
|
|
try {
|
|
|
|
traps[trap]();
|
2016-02-19 20:27:31 +01:00
|
|
|
} catch (e) {
|
2016-02-14 00:56:47 +01:00
|
|
|
threw = true;
|
2016-02-19 20:27:31 +01:00
|
|
|
}
|
2016-02-14 00:56:47 +01:00
|
|
|
if (threw) {
|
|
|
|
throw new Test262Error('trap ' + trap + ' threw an error');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function assertTrapThrows(trap) {
|
|
|
|
if (typeof traps[trap] !== 'function') {
|
|
|
|
throw new Test262Error('trap ' + trap + ' is not a function');
|
|
|
|
}
|
|
|
|
var failedToThrow = false;
|
|
|
|
try {
|
|
|
|
traps[trap]();
|
|
|
|
failedToThrow = true;
|
|
|
|
} catch (e) {}
|
|
|
|
if (failedToThrow) {
|
|
|
|
throw new Test262Error('trap ' + trap + ' did not throw an error');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
assertTrapSucceeds('getPrototypeOf');
|
|
|
|
assertTrapSucceeds('setPrototypeOf');
|
|
|
|
assertTrapSucceeds('isExtensible');
|
|
|
|
assertTrapSucceeds('preventExtensions');
|
|
|
|
assertTrapSucceeds('getOwnPropertyDescriptor');
|
|
|
|
assertTrapSucceeds('has');
|
|
|
|
assertTrapSucceeds('get');
|
|
|
|
assertTrapSucceeds('set');
|
|
|
|
assertTrapSucceeds('deleteProperty');
|
|
|
|
assertTrapSucceeds('defineProperty');
|
|
|
|
assertTrapSucceeds('ownKeys');
|
|
|
|
assertTrapSucceeds('apply');
|
|
|
|
assertTrapSucceeds('construct');
|
|
|
|
|
|
|
|
// enumerate should always throw because the trap has been removed
|
|
|
|
assertTrapThrows('enumerate');
|