js/src/tests/test262/ch13/13.2/S13.2.3_A1.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 // Copyright 2011 Google Inc. All rights reserved.
michael@0 2 // This code is governed by the BSD license found in the LICENSE file.
michael@0 3
michael@0 4 /**
michael@0 5 * @path ch13/13.2/S13.2.3_A1.js
michael@0 6 * @description check that all poisoning use the [[ThrowTypeError]]
michael@0 7 * function object.
michael@0 8 * @onlyStrict
michael@0 9 */
michael@0 10
michael@0 11 "use strict";
michael@0 12 var poison = Object.getOwnPropertyDescriptor(function() {}, 'caller').get;
michael@0 13
michael@0 14 if (typeof poison !== 'function') {
michael@0 15 $ERROR("#1: A strict function's .caller should be poisoned with a function");
michael@0 16 }
michael@0 17 var threw = null;
michael@0 18 try {
michael@0 19 poison();
michael@0 20 } catch (err) {
michael@0 21 threw = err;
michael@0 22 }
michael@0 23 if (!threw || !(threw instanceof TypeError)) {
michael@0 24 $ERROR("#2: Poisoned property should throw TypeError");
michael@0 25 }
michael@0 26
michael@0 27 function checkPoison(obj, name) {
michael@0 28 var desc = Object.getOwnPropertyDescriptor(obj, name);
michael@0 29 if (desc.enumerable) {
michael@0 30 $ERROR("#3: Poisoned " + name + " should not be enumerable");
michael@0 31 }
michael@0 32 if (desc.configurable) {
michael@0 33 $ERROR("#4: Poisoned " + name + " should not be configurable");
michael@0 34 }
michael@0 35 if (poison !== desc.get) {
michael@0 36 $ERROR("#5: " + name + "'s getter not poisoned with same poison");
michael@0 37 }
michael@0 38 if (poison !== desc.set) {
michael@0 39 $ERROR("#6: " + name + "'s setter not poisoned with same poison");
michael@0 40 }
michael@0 41 }
michael@0 42
michael@0 43 checkPoison(function() {}, 'caller');
michael@0 44 checkPoison(function() {}, 'arguments');
michael@0 45 checkPoison((function() { return arguments; })(), 'caller');
michael@0 46 checkPoison((function() { return arguments; })(), 'callee');
michael@0 47 checkPoison((function() {}).bind(null), 'caller');
michael@0 48 checkPoison((function() {}).bind(null), 'arguments');
michael@0 49

mercurial