]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/ExecutionContexts/10.1.6.js
JavaScriptCore-466.1.6.tar.gz
[apple/javascriptcore.git] / tests / mozilla / ecma / ExecutionContexts / 10.1.6.js
1 /* The contents of this file are subject to the Netscape Public
2 * License Version 1.1 (the "License"); you may not use this file
3 * except in compliance with the License. You may obtain a copy of
4 * the License at http://www.mozilla.org/NPL/
5 *
6 * Software distributed under the License is distributed on an "AS
7 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8 * implied. See the License for the specific language governing
9 * rights and limitations under the License.
10 *
11 * The Original Code is Mozilla Communicator client code, released March
12 * 31, 1998.
13 *
14 * The Initial Developer of the Original Code is Netscape Communications
15 * Corporation. Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation. All
17 * Rights Reserved.
18 *
19 * Contributor(s):
20 *
21 */
22 /**
23 File Name: 10.1.6
24 ECMA Section: Activation Object
25 Description:
26
27 If the function object being invoked has an arguments property, let x be
28 the value of that property; the activation object is also given an internal
29 property [[OldArguments]] whose initial value is x; otherwise, an arguments
30 property is created for the function object but the activation object is
31 not given an [[OldArguments]] property. Next, arguments object described
32 below (the same one stored in the arguments property of the activation
33 object) is used as the new value of the arguments property of the function
34 object. This new value is installed even if the arguments property already
35 exists and has the ReadOnly attribute (as it will for native Function
36 objects). (These actions are taken to provide compatibility with a form of
37 program syntax that is now discouraged: to access the arguments object for
38 function f within the body of f by using the expression f.arguments.
39 The recommended way to access the arguments object for function f within
40 the body of f is simply to refer to the variable arguments.)
41
42 Author: christine@netscape.com
43 Date: 12 november 1997
44 */
45
46 var SECTION = "10.1.6";
47 var VERSION = "ECMA_1";
48 startTest();
49 var TITLE = "Activation Object";
50
51 writeHeaderToLog( SECTION + " "+ TITLE);
52
53 var testcases = new Array();
54
55 var arguments = "FAILED!";
56
57 var ARG_STRING = "value of the argument property";
58
59 testcases[tc++] = new TestCase( SECTION,
60 "(new TestObject(0,1,2,3,4,5)).length",
61 6,
62 (new TestObject(0,1,2,3,4,5)).length );
63
64 for ( i = 0; i < 6; i++ ) {
65
66 testcases[tc++] = new TestCase( SECTION,
67 "(new TestObject(0,1,2,3,4,5))["+i+"]",
68 i,
69 (new TestObject(0,1,2,3,4,5))[i]);
70 }
71
72
73 // The current object already has an arguments property.
74
75 testcases[tc++] = new TestCase( SECTION,
76 "(new AnotherTestObject(1,2,3)).arguments",
77 ARG_STRING,
78 (new AnotherTestObject(1,2,3)).arguments );
79
80 // The function invoked with [[Call]]
81
82 testcases[tc++] = new TestCase( SECTION,
83 "TestFunction(1,2,3)",
84 ARG_STRING,
85 TestFunction() + '' );
86
87
88 test();
89
90
91
92 function Prototype() {
93 this.arguments = ARG_STRING;
94 }
95 function TestObject() {
96 this.__proto__ = new Prototype();
97 return arguments;
98 }
99 function AnotherTestObject() {
100 this.__proto__ = new Prototype();
101 return this;
102 }
103 function TestFunction() {
104 arguments = ARG_STRING;
105 return arguments;
106 }
107 function AnotherTestFunction() {
108 this.__proto__ = new Prototype();
109 return this;
110 }
111
112 function test() {
113 for ( tc=0; tc < testcases.length; tc++ ) {
114 testcases[tc].passed = writeTestCaseResult(
115 testcases[tc].expect,
116 testcases[tc].actual,
117 testcases[tc].description +" = "+
118 testcases[tc].actual );
119
120 testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
121 }
122 stopTest();
123 return ( testcases );
124 }