initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma_3 / Function / regress-97921.js
1 /*
2 * The contents of this file are subject to the Netscape Public
3 * License Version 1.1 (the "License"); you may not use this file
4 * except in compliance with the License. You may obtain a copy of
5 * the License at http://www.mozilla.org/NPL/
6 *
7 * Software distributed under the License is distributed on an "AS
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9 * implied. See the License for the specific language governing
10 * rights and limitations under the License.
11 *
12 * The Original Code is mozilla.org code.
13 *
14 * The Initial Developer of the Original Code is Netscape
15 * Communications Corporation.  Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation. All
17 * Rights Reserved.
18 *
19 * Contributor(s): georg@bioshop.de, pschwartau@netscape.com
20 * Date: 10 September 2001
21 *
22 * SUMMARY: Testing with() statement with nested functions
23 * See http://bugzilla.mozilla.org/show_bug.cgi?id=97921
24 *
25 * Brendan: "The bug is peculiar to functions that have formal parameters,
26 * but that are called with fewer actual arguments than the declared number
27 * of formal parameters."
28 */
29 //-----------------------------------------------------------------------------
30 var UBound = 0;
31 var bug = 97921;
32 var summary = 'Testing with() statement with nested functions';
33 var cnYES = 'Inner value === outer value';
34 var cnNO = "Inner value !== outer value!";
35 var status = '';
36 var statusitems = [];
37 var actual = '';
38 var actualvalues = [];
39 var expect= '';
40 var expectedvalues = [];
41 var outerValue = '';
42 var innerValue = '';
43 var useWith = '';
44
45
46 function F(i)
47 {
48   i = 0;
49   if(useWith) with(1){i;}
50   i++;
51
52   outerValue = i; // capture value of i in outer function
53   F1 = function() {innerValue = i;}; // capture value of i in inner function
54   F1();
55 }
56
57
58 status = inSection(1);
59 useWith=false;
60 F(); // call F without supplying the argument
61 actual = innerValue === outerValue;
62 expect = true;
63 addThis();
64
65 status = inSection(2);
66 useWith=true;
67 F(); // call F without supplying the argument
68 actual = innerValue === outerValue;
69 expect = true;
70 addThis();
71
72
73 function G(i)
74 {
75   i = 0;
76   with (new Object()) {i=100};
77   i++;
78
79   outerValue = i; // capture value of i in outer function
80   G1 = function() {innerValue = i;}; // capture value of i in inner function
81   G1();
82 }
83
84
85 status = inSection(3);
86 G(); // call G without supplying the argument
87 actual = innerValue === 101;
88 expect = true;
89 addThis();
90
91 status = inSection(4);
92 G(); // call G without supplying the argument
93 actual = innerValue === outerValue;
94 expect = true;
95 addThis();
96
97
98
99 //-----------------------------------------------------------------------------
100 test();
101 //-----------------------------------------------------------------------------
102
103
104 function addThis()
105 {
106   statusitems[UBound] = status;
107   actualvalues[UBound] = areTheseEqual(actual);
108   expectedvalues[UBound] = areTheseEqual(expect);
109   UBound++;
110 }
111
112
113 function test()
114 {
115   enterFunc ('test');
116   printBugNumber (bug);
117   printStatus (summary);
118
119   for (var i = 0; i < UBound; i++)
120   {
121     reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
122   }
123
124   exitFunc ('test');
125 }
126
127
128 function areTheseEqual(yes)
129 {
130   return yes? cnYES : cnNO
131 }