// 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');