tizen beta release
[profile/ivi/webkit-efl.git] / LayoutTests / fast / js / script-tests / function-dot-arguments.js
1 description(
2 "This test checks basic and corner cases of 'f.arguments'."
3 );
4
5 function basicTest(args)
6 {
7     return basicTest.arguments;
8 }
9 shouldBe("basicTest('one')[0]", "'one'");
10 shouldBeUndefined("basicTest('one')[2]");
11 shouldBe("basicTest('one', 'two', 'three')[1]", "'two'");
12
13 function lengthTest()
14 {
15     return "" + lengthTest.arguments.length;
16 }
17 shouldBe("lengthTest()", "'0'");
18 shouldBe("lengthTest('From', '%E5%8C%97%E4%BA%AC', 360, '/', 'webkit.org')", "'5'");
19
20 function assignTest()
21 {
22     function g()
23     {
24         return assignTest.arguments;
25     }
26
27     arguments = true;
28     return g();
29 }
30 shouldBeTrue("assignTest()");
31
32 function assignVarUndefinedTest()
33 {
34     function g()
35     {
36         return assignVarUndefinedTest.arguments;
37     }
38
39     var arguments;
40     return g();
41 }
42 shouldBe("assignVarUndefinedTest().toString()", "'[object Arguments]'");
43
44 function assignVarUndefinedTest2()
45 {
46     function g()
47     {
48         return assignVarUndefinedTest2.arguments;
49     }
50
51     var a, arguments;
52     return g();
53 }
54 shouldBe("assignVarUndefinedTest2().toString()", "'[object Arguments]'");
55
56 function assignVarInitTest()
57 {
58     function g()
59     {
60         return assignVarInitTest.arguments;
61     }
62
63     var arguments = true;
64     return g();
65 }
66 shouldBeTrue("assignVarInitTest()");
67
68 function assignVarInitTest2()
69 {
70     function g()
71     {
72         return assignVarInitTest2.arguments;
73     }
74
75     var a, arguments = true;
76     return g();
77 }
78 shouldBeTrue("assignVarInitTest2()");
79
80 function assignConstUndefinedTest()
81 {
82     function g()
83     {
84         return assignConstUndefinedTest.arguments;
85     }
86
87     var arguments;
88     return g();
89 }
90 shouldBe("assignConstUndefinedTest().toString()", "'[object Arguments]'");
91
92 function assignConstUndefinedTest2()
93 {
94     function g()
95     {
96         return assignConstUndefinedTest2.arguments;
97     }
98
99     var a, arguments;
100     return g();
101 }
102 shouldBe("assignConstUndefinedTest2().toString()", "'[object Arguments]'");
103
104 function assignConstInitTest()
105 {
106     function g()
107     {
108         return assignConstInitTest.arguments;
109     }
110
111     const arguments = true;
112     return g();
113 }
114 shouldBeTrue("assignConstInitTest()");
115
116 function assignConstInitTest2()
117 {
118     function g()
119     {
120         return assignConstInitTest2.arguments;
121     }
122
123     const a, arguments = true;
124     return g();
125 }
126 shouldBeTrue("assignConstInitTest2()");
127
128 function assignForInitTest()
129 {
130     function g()
131     {
132         return assignForInitTest.arguments;
133     }
134
135     for (var arguments = true; false;) { }
136     return g();
137 }
138 shouldBeTrue("assignForInitTest()");
139
140 function assignForInitTest2()
141 {
142     function g()
143     {
144         return assignForInitTest2.arguments;
145     }
146
147     for (var a, arguments = true; false;) { }
148     return g();
149 }
150 shouldBeTrue("assignForInitTest2()");
151
152 function assignForInInitTest()
153 {
154     function g()
155     {
156         return assignForInInitTest.arguments;
157     }
158
159     for (arguments = true; false;) { }
160     return g();
161 }
162 shouldBeTrue("assignForInInitTest()");
163
164 function paramInitTest(arguments)
165 {
166     return paramInitTestCheckArguments();
167 }
168 function paramInitTestCheckArguments()
169 {
170     return paramInitTest.arguments;
171 }
172 shouldBe("paramInitTest(true).toString()", "'[object Arguments]'");
173
174 var paramFunctionConstructorInitTest = Function("arguments", "return paramFunctionConstructorInitTestCheckArguments();");
175 function paramFunctionConstructorInitTestCheckArguments()
176 {
177     return paramFunctionConstructorInitTest.arguments;
178 }
179 shouldBe("paramFunctionConstructorInitTest(true).toString()", "'[object Arguments]'");
180
181 function tearOffTest()
182 {
183     function g()
184     {
185         var a = 1;
186         return arguments;
187     }
188
189     var b = 2;
190     var arguments = g(true);
191     return arguments;
192 }
193 shouldBeTrue("tearOffTest()[0]");
194
195 function tearOffTest2()
196 {
197     function g(a)
198     {
199         var arguments = a;
200         var b = 2;
201         return arguments;
202     }
203
204     var c = 3;
205     return g(arguments);
206 }
207 shouldBeTrue("tearOffTest2(true)[0]");
208
209 function lexicalArgumentsLiveRead1(a, b, c)
210 {
211     var o = arguments;
212     a = 1;
213     return lexicalArgumentsLiveRead1.arguments[0];
214 }
215 shouldBe("lexicalArgumentsLiveRead1(0, 2, 3)", "1");
216
217 function lexicalArgumentsLiveRead2(a, b, c)
218 {
219     var o = arguments;
220     b = 2;
221     return lexicalArgumentsLiveRead2.arguments[1];
222 }
223 shouldBe("lexicalArgumentsLiveRead2(1, 0, 3)", "2");
224
225 function lexicalArgumentsLiveRead3(a, b, c)
226 {
227     var o = arguments;
228     c = 3;
229     return lexicalArgumentsLiveRead3.arguments[2];
230 }
231 shouldBe("lexicalArgumentsLiveRead3(1, 2, 0)", "3");
232
233 function lexicalArgumentsLiveWrite1(a, b, c)
234 {
235     var o = arguments;
236     lexicalArgumentsLiveWrite1.arguments[0] = 1;
237     return a;
238 }
239 shouldBe("lexicalArgumentsLiveWrite1(0, 2, 3)", "1");
240
241 function lexicalArgumentsLiveWrite2(a, b, c)
242 {
243     var o = arguments;
244     lexicalArgumentsLiveWrite2.arguments[1] = 2;
245     return b;
246 }
247 shouldBe("lexicalArgumentsLiveWrite2(1, 0, 3)", "2");
248
249 function lexicalArgumentsLiveWrite3(a, b, c)
250 {
251     var o = arguments;
252     lexicalArgumentsLiveWrite3.arguments[2] = 3;
253     return c;
254 }
255 shouldBe("lexicalArgumentsLiveWrite3(1, 2, 0)", "3");
256
257 function argumentsNotLiveRead1(a, b, c)
258 {
259     var o = argumentsNotLiveRead1.arguments;
260     a = 1;
261     return o[0];
262 }
263 shouldBe("argumentsNotLiveRead1(0, 2, 3)", "0");
264
265 function argumentsNotLiveRead2(a, b, c)
266 {
267     var o = argumentsNotLiveRead2.arguments;
268     b = 2;
269     return o[1];
270 }
271 shouldBe("argumentsNotLiveRead2(1, 0, 3)", "0");
272
273 function argumentsNotLiveRead3(a, b, c)
274 {
275     var o = argumentsNotLiveRead3.arguments;
276     c = 3;
277     return o[2];
278 }
279 shouldBe("argumentsNotLiveRead3(1, 2, 0)", "0");
280
281 function argumentsNotLiveWrite1(a, b, c)
282 {
283     argumentsNotLiveWrite1.arguments[0] = 1;
284     return a;
285 }
286 shouldBe("argumentsNotLiveWrite1(0, 2, 3)", "0");
287
288 function argumentsNotLiveWrite2(a, b, c)
289 {
290     argumentsNotLiveWrite2.arguments[1] = 2;
291     return b;
292 }
293 shouldBe("argumentsNotLiveWrite2(1, 0, 3)", "0");
294
295 function argumentsNotLiveWrite3(a, b, c)
296 {
297     argumentsNotLiveWrite3.arguments[2] = 3;
298     return c;
299 }
300 shouldBe("argumentsNotLiveWrite3(1, 2, 0)", "0");
301
302 function argumentsIdentity()
303 {
304     return argumentsIdentity.arguments != argumentsIdentity.arguments;
305 }
306 shouldBeTrue("argumentsIdentity()");
307
308 function overwroteArgumentsInDynamicScope1() {
309     eval("arguments = true"); 
310     return arguments;
311 }
312
313 function overwroteArgumentsInDynamicScope2() {
314     arguments = true;
315     return eval("arguments");
316 }
317
318 function overwroteArgumentsInDynamicScope3() {
319     eval("arguments = true"); 
320     return overwroteArgumentsInDynamicScope3.arguments;
321 }
322 shouldBeTrue("overwroteArgumentsInDynamicScope1()");
323 shouldBeTrue("overwroteArgumentsInDynamicScope2()");
324 shouldBeTrue("overwroteArgumentsInDynamicScope3()");