initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma / FunctionObjects / 15.3.1.1-3.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:          15.3.1.1-3.js
24     ECMA Section:       15.3.1.1 The Function Constructor Called as a Function
25
26                         new Function(p1, p2, ..., pn, body )
27
28     Description:        The last argument specifies the body (executable code)
29                         of a function; any preceeding arguments sepcify formal
30                         parameters.
31
32                         See the text for description of this section.
33
34                         This test examples from the specification.
35
36     Author:             christine@netscape.com
37     Date:               28 october 1997
38
39 */
40     var SECTION = "15.3.1.1-3";
41     var VERSION = "ECMA_1";
42     startTest();
43     var TITLE   = "The Function Constructor Called as a Function";
44
45     writeHeaderToLog( SECTION + " "+ TITLE);
46
47
48     var testcases = new Array();
49
50     var args = "";
51
52     for ( var i = 0; i < 2000; i++ ) {
53         args += "arg"+i;
54         if ( i != 1999 ) {
55             args += ",";
56         }
57     }
58
59     var s = "";
60
61     for ( var i = 0; i < 2000; i++ ) {
62         s += ".0005";
63         if ( i != 1999 ) {
64             s += ",";
65         }
66     }
67
68     MyFunc = Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r");
69     MyObject = Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };");
70
71     var MY_OB = eval( "MyFunc("+ s +")" );
72
73     testcases[testcases.length] = new TestCase( SECTION, "MyFunc.length",                       2000,         MyFunc.length );
74     testcases[testcases.length] = new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')",       1,            MY_OB );
75     testcases[testcases.length] = new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')",       1,            eval("var MY_OB = MyFunc("+s+"); MY_OB") );
76
77     testcases[testcases.length] = new TestCase( SECTION, "MyObject.length",                       2000,         MyObject.length );
78
79     testcases[testcases.length] = new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length",     3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") );
80     testcases[testcases.length] = new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()",          3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()") );
81     testcases[testcases.length] = new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") );
82
83     test();
84
85 function test() {
86     for ( tc=0; tc < testcases.length; tc++ ) {
87         testcases[tc].passed = writeTestCaseResult(
88                             testcases[tc].expect,
89                             testcases[tc].actual,
90                             testcases[tc].description +" = "+ testcases[tc].actual );
91
92         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
93     }
94     stopTest();
95     return ( testcases );
96 }