diff options
Diffstat (limited to 'js/src/tests/ecma_3/Function/15.3.4.4-1.js')
-rw-r--r-- | js/src/tests/ecma_3/Function/15.3.4.4-1.js | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/js/src/tests/ecma_3/Function/15.3.4.4-1.js b/js/src/tests/ecma_3/Function/15.3.4.4-1.js new file mode 100644 index 000000000..fed244a95 --- /dev/null +++ b/js/src/tests/ecma_3/Function/15.3.4.4-1.js @@ -0,0 +1,162 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 21 May 2002 + * SUMMARY: ECMA conformance of Function.prototype.call + * + * Function.prototype.call(thisArg [,arg1 [,arg2, ...]]) + * + * See ECMA-262 Edition 3 Final, Section 15.3.4.4 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 145791; +var summary = 'Testing ECMA conformance of Function.prototype.call'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function F0(a) +{ + return "" + this + arguments.length; +} + +function F1(a) +{ + return "" + this + a; +} + +function F2() +{ + return "" + this; +} + + + +/* + * Function.prototype.call.length should return 1 + */ +status = inSection(1); +actual = Function.prototype.call.length; +expect = 1; +addThis(); + + +/* + * When |thisArg| is not provided to the call() method, the + * called function must be passed the global object as |this| + */ +status = inSection(2); +actual = F0.call(); +expect = "" + this + 0; +addThis(); + + +/* + * If [,arg1 [,arg2, ...]] are not provided to the call() method, + * the called function should be invoked with an empty argument list + */ +status = inSection(3); +actual = F0.call(""); +expect = "" + "" + 0; +addThis(); + +status = inSection(4); +actual = F0.call(true); +expect = "" + true + 0; +addThis(); + + +/* + * Function.prototype.call(x) and + * Function.prototype.call(x, undefined) should return the same result + */ +status = inSection(5); +actual = F1.call(0, undefined); +expect = F1.call(0); +addThis(); + +status = inSection(6); +actual = F1.call("", undefined); +expect = F1.call(""); +addThis(); + +status = inSection(7); +actual = F1.call(null, undefined); +expect = F1.call(null); +addThis(); + +status = inSection(8); +actual = F1.call(undefined, undefined); +expect = F1.call(undefined); +addThis(); + + +/* + * Function.prototype.call() and + * Function.prototype.call(undefined) should return the same result + */ +status = inSection(9); +actual = F2.call(undefined); +expect = F2.call(); +addThis(); + + +/* + * Function.prototype.call() and + * Function.prototype.call(null) should return the same result + */ +status = inSection(10); +actual = F2.call(null); +expect = F2.call(); +addThis(); + +if (typeof newGlobal === "function") +{ + /* + * Function.prototype.call gets lexical globals, not caller globals + */ + status = inSection(11); + actual = g2 = newGlobal(); + g2.eval("boundMethod = Function('return this');"); + expect = g2.boundMethod.call(); + addThis(); +} + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} |