js/src/jit-test/tests/debug/Object-apply-01.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 // tests calling script functions via Debugger.Object.prototype.apply/call
     3 load(libdir + "asserts.js");
     5 var g = newGlobal();
     6 g.eval("function f() { debugger; }");
     7 var dbg = new Debugger(g);
     9 var hits = 0;
    10 function test(usingApply) {
    11     dbg.onDebuggerStatement = function (frame) {
    12         var fn = frame.arguments[0];
    13         var cv = usingApply ? fn.apply(null, [9, 16]) : fn.call(null, 9, 16);
    14         assertEq(Object.keys(cv).join(","), "return");
    15         assertEq(Object.getPrototypeOf(cv), Object.prototype);
    16         assertEq(cv.return, 25);
    18         cv = usingApply ? fn.apply(null, ["hello ", "world"]) : fn.call(null, "hello ", "world");
    19         assertEq(Object.keys(cv).join(","), "return");
    20         assertEq(cv.return, "hello world");
    22         // Handle more or less arguments.
    23         assertEq((usingApply ? fn.apply(null, [1, 5, 100]) : fn.call(null, 1, 5, 100)).return, 6);
    24         assertEq((usingApply ? fn.apply(null, []) : fn.call(null)).return, NaN);
    25         assertEq((usingApply ? fn.apply() : fn.call()).return, NaN);
    27         // Throw if a this-value or argument is an object but not a Debugger.Object.
    28         assertThrowsInstanceOf(function () { usingApply ? fn.apply({}, []) : fn.call({}); },
    29                                TypeError);
    30         assertThrowsInstanceOf(function () { usingApply ? fn.apply(null, [{}]) : fn.call(null, {}); },
    31                                TypeError);
    32         hits++;
    33     };
    34     g.eval("f(function (a, b) { return a + b; });");
    36     // The callee receives the right arguments even if more arguments are provided
    37     // than the callee's .length.
    38     dbg.onDebuggerStatement = function (frame) {
    39         assertEq((usingApply ? frame.arguments[0].apply(null, ['one', 'two'])
    40                              : frame.arguments[0].call(null, 'one', 'two')).return,
    41                  2);
    42         hits++;
    43     };
    44     g.eval("f(function () { return arguments.length; });");
    46     // Exceptions are reported as {throw:} completion values.
    47     dbg.onDebuggerStatement = function (frame) {
    48         var lose = frame.arguments[0];
    49         var cv = usingApply ? lose.apply(null, []) : lose.call(null);
    50         assertEq(Object.keys(cv).join(","), "throw");
    51         assertEq(cv.throw, frame.callee);
    52         hits++;
    53     };
    54     g.eval("f(function lose() { throw f; });");
    55 }
    57 test(true);
    58 test(false);
    59 assertEq(hits, 6);

mercurial