summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/harness/proxytrapshelper-overrides.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/harness/proxytrapshelper-overrides.js')
-rw-r--r--js/src/tests/test262/harness/proxytrapshelper-overrides.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/js/src/tests/test262/harness/proxytrapshelper-overrides.js b/js/src/tests/test262/harness/proxytrapshelper-overrides.js
new file mode 100644
index 0000000000..32616b1bc3
--- /dev/null
+++ b/js/src/tests/test262/harness/proxytrapshelper-overrides.js
@@ -0,0 +1,77 @@
+// 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
+esid: pending
+author: Jordan Harband
+includes: [proxyTrapsHelper.js]
+---*/
+var overrides = {
+ 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 () {},
+};
+var traps = allowProxyTraps(overrides);
+
+function assertTrapSucceeds(trap) {
+ if (typeof traps[trap] !== 'function') {
+ throw new Test262Error('trap ' + trap + ' is not a function');
+ }
+ if (traps[trap] !== overrides[trap]) {
+ throw new Test262Error('trap ' + trap + ' was not overriden in allowProxyTraps');
+ }
+ var threw = false;
+ try {
+ traps[trap]();
+ } catch (e) {
+ threw = true;
+ }
+ 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');
+
+reportCompare(0, 0);