js/src/tests/ecma_5/Function/function-caller.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.

     1 /*
     2  * Any copyright is dedicated to the Public Domain.
     3  * http://creativecommons.org/licenses/publicdomain/
     4  */
     6 var gTestfile = 'function-caller.js';
     7 var BUGNUMBER = 514581;
     8 var summary = "Function.prototype.caller should throw a TypeError for " +
     9               "strict-mode functions";
    11 print(BUGNUMBER + ": " + summary);
    13 /**************
    14  * BEGIN TEST *
    15  **************/
    17 // behavior
    19 function expectTypeError(fun)
    20 {
    21   try
    22   {
    23     fun();
    24     throw new Error("didn't throw");
    25   }
    26   catch (e)
    27   {
    28     assertEq(e instanceof TypeError, true,
    29              "expected TypeError calling function" +
    30              ("name" in fun ? " " + fun.name : "") + ", instead got: " + e);
    31   }
    32 }
    34 function bar() { "use strict"; }
    35 expectTypeError(function barCaller() { bar.caller; });
    37 function baz() { "use strict"; return 17; }
    38 expectTypeError(function bazCaller() { baz.caller; });
    41 // accessor identity
    43 function strictMode() { "use strict"; return 42; }
    44 var canonicalTTE = Object.getOwnPropertyDescriptor(strictMode, "caller").get;
    46 var barCaller = Object.getOwnPropertyDescriptor(bar, "caller");
    47 assertEq("get" in barCaller, true);
    48 assertEq("set" in barCaller, true);
    49 assertEq(barCaller.get, canonicalTTE);
    50 assertEq(barCaller.set, canonicalTTE);
    52 var barArguments = Object.getOwnPropertyDescriptor(bar, "arguments");
    53 assertEq("get" in barArguments, true);
    54 assertEq("set" in barArguments, true);
    55 assertEq(barArguments.get, canonicalTTE);
    56 assertEq(barArguments.set, canonicalTTE);
    58 var bazCaller = Object.getOwnPropertyDescriptor(baz, "caller");
    59 assertEq("get" in bazCaller, true);
    60 assertEq("set" in bazCaller, true);
    61 assertEq(bazCaller.get, canonicalTTE);
    62 assertEq(bazCaller.set, canonicalTTE);
    64 var bazArguments = Object.getOwnPropertyDescriptor(baz, "arguments");
    65 assertEq("get" in bazArguments, true);
    66 assertEq("set" in bazArguments, true);
    67 assertEq(bazArguments.get, canonicalTTE);
    68 assertEq(bazArguments.set, canonicalTTE);
    71 // [[ThrowTypeError]] characteristics
    73 assertEq(Object.prototype.toString.call(canonicalTTE), "[object Function]");
    74 assertEq(Object.getPrototypeOf(canonicalTTE), Function.prototype);
    75 assertEq(canonicalTTE.length, 0);
    76 assertEq(Object.isExtensible(canonicalTTE), false);
    77 canonicalTTE.lumpy = 17;
    78 assertEq(canonicalTTE.hasOwnProperty("lumpy"), false);
    79 assertEq("lumpy" in canonicalTTE, false);
    80 expectTypeError(function setTTEProp() { "use strict"; canonicalTTE.x = 42; });
    82 /******************************************************************************/
    84 if (typeof reportCompare === "function")
    85   reportCompare(true, true);
    87 print("All tests passed!");

mercurial