1# Copyright 2013 the V8 project authors. All rights reserved.
2# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions
6# are met:
7# 1.  Redistributions of source code must retain the above copyright
8#     notice, this list of conditions and the following disclaimer.
9# 2.  Redistributions in binary form must reproduce the above copyright
10#     notice, this list of conditions and the following disclaimer in the
11#     documentation and/or other materials provided with the distribution.
12#
13# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24Tests to ensure that Function.apply works correctly for Arrays, arguments and array-like objects.
25
26On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
27
28
29PASS argumentsApply1(1, 2, 3) is 1
30PASS argumentsApply2(1, 2, 3) is 2
31PASS argumentsApply3(1, 2, 3) is 3
32PASS argumentsApplyLength(1, 2, 3) is 3
33PASS argumentsApplyExcessArguments(1, 2, 3) is 3
34PASS executedAdditionalArgument is true
35PASS arrayApply1([1, 2, 3]) is 1
36PASS arrayApply2([1, 2, 3]) is 2
37PASS arrayApply3([1, 2, 3]) is 3
38PASS arrayApplyLength([1, 2, 3]) is 3
39PASS argumentsApplyDelete1(1, 2, 3) is 1
40PASS argumentsApplyDelete2(1, 2, 3) is undefined
41PASS argumentsApplyDelete3(1, 2, 3) is 3
42PASS argumentsApplyDeleteLength(1, 2, 3) is 3
43PASS arrayApplyDelete1([1, 2, 3]) is 1
44PASS arrayApplyDelete2([1, 2, 3]) is undefined
45PASS arrayApplyDelete3([1, 2, 3]) is 3
46PASS arrayApplyDeleteLength([1, 2, 3]) is 3
47PASS argumentsApplyChangeLength1(1) is 2
48PASS argumentsApplyChangeLength2(1) is 2
49PASS argumentsApplyChangeLength3(1) is 2
50PASS argumentsApplyChangeLength4(1) is 0
51PASS argumentsApplyChangeLength5(1) is 0
52PASS arrayApplyChangeLength1() is 2
53PASS arrayApplyChangeLength2() is 2
54PASS arrayApplyChangeLength3() is 2
55PASS arrayApplyChangeLength4() is 0
56PASS var a = []; a.length = 0xFFFE; [].constructor.apply('', a).length is 0xFFFE
57PASS var a = []; a.length = 0xFFFF; [].constructor.apply('', a).length is 0xFFFF
58PASS var a = []; a.length = 0x10000; [].constructor.apply('', a).length is 0x10000
59FAIL var a = []; a.length = 0x10001; [].constructor.apply('', a).length should throw an exception. Was 65537.
60PASS var a = []; a.length = 0xFFFFFFFE; [].constructor.apply('', a).length threw exception RangeError: Maximum call stack size exceeded.
61PASS var a = []; a.length = 0xFFFFFFFF; [].constructor.apply('', a).length threw exception RangeError: Maximum call stack size exceeded.
62PASS (function(a,b,c,d){ return d ? -1 : (a+b+c); }).apply(undefined, {length:3, 0:100, 1:20, 2:3}) is 123
63PASS successfullyParsed is true
64
65TEST COMPLETE
66
67