initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / js1_5 / Object / regress-137000.js
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
3 *
4 * The contents of this file are subject to the Netscape Public License
5 * Version 1.1 (the "License"); you may not use this file except in
6 * compliance with the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/NPL/
8 *
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
13 *
14 * The Original Code is JavaScript Engine testing utilities.
15 *
16 * The Initial Developer of the Original Code is Netscape Communications Corp.
17 * Portions created by the Initial Developer are Copyright (C) 2002
18 * the Initial Developer. All Rights Reserved.
19 *
20 * Contributor(s): pschwartau@netscape.com
21 *
22 * Alternatively, the contents of this file may be used under the terms of
23 * either the GNU General Public License Version 2 or later (the "GPL"), or
24 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
25 * in which case the provisions of the GPL or the LGPL are applicable instead
26 * of those above. If you wish to allow use of your version of this file only
27 * under the terms of either the GPL or the LGPL, and not to allow others to
28 * use your version of this file under the terms of the NPL, indicate your
29 * decision by deleting the provisions above and replace them with the notice
30 * and other provisions required by the GPL or the LGPL. If you do not delete
31 * the provisions above, a recipient may use your version of this file under
32 * the terms of any one of the NPL, the GPL or the LGPL.
33 *
34 * ***** END LICENSE BLOCK *****
35 *
36 *
37 * Date:    03 June 2002
38 * SUMMARY: Function param or local var with same name as a function property
39 *
40 * See http://bugzilla.mozilla.org/show_bug.cgi?id=137000
41 * See http://bugzilla.mozilla.org/show_bug.cgi?id=138708
42 * See http://bugzilla.mozilla.org/show_bug.cgi?id=150032
43 * See http://bugzilla.mozilla.org/show_bug.cgi?id=150859
44 *
45 */
46 //-----------------------------------------------------------------------------
47 var UBound = 0;
48 var bug = 137000;
49 var summary = 'Function param or local var with same name as a function prop';
50 var status = '';
51 var statusitems = [];
52 var actual = '';
53 var actualvalues = [];
54 var expect= '';
55 var expectedvalues = [];
56
57
58 /*
59  * Note use of 'x' both for the parameter to f,
60  * and as a property name for |f| as an object
61  */
62 function f(x)
63 {
64 }
65
66 status = inSection(1);
67 f.x = 12;
68 actual = f.x;
69 expect = 12;
70 addThis();
71
72
73
74 /*
75  * A more elaborate example, using the call() method
76  * to chain constructors from child to parent.
77  *
78  * The key point is the use of the same name 'p' for both
79  * the parameter to the constructor, and as a property name
80  */
81 function parentObject(p)
82 {
83   this.p = 1;
84 }
85
86 function childObject()
87 {
88   parentObject.call(this);
89 }
90 childObject.prototype = parentObject;
91
92 status = inSection(2);
93 var objParent = new parentObject();
94 actual = objParent.p;
95 expect = 1;
96 addThis();
97
98 status = inSection(3);
99 var objChild = new childObject();
100 actual = objChild.p;
101 expect = 1;
102 addThis();
103
104
105
106 /*
107  * A similar set-up. Here the same name is being used for
108  * the parameter to both the Base and Child constructors,
109  */
110 function Base(id)
111 {
112 }
113
114 function Child(id)
115 {
116   this.prop = id;
117 }
118 Child.prototype=Base;
119
120 status = inSection(4);
121 var c1 = new Child('child1');
122 actual = c1.prop;
123 expect = 'child1';
124 addThis();
125
126
127
128 /*
129  * Use same identifier as a property name, too -
130  */
131 function BaseX(id)
132 {
133 }
134
135 function ChildX(id)
136 {
137   this.id = id;
138 }
139 ChildX.prototype=BaseX;
140
141 status = inSection(5);
142 c1 = new ChildX('child1');
143 actual = c1.id;
144 expect = 'child1';
145 addThis();
146
147
148
149 /*
150  * From http://bugzilla.mozilla.org/show_bug.cgi?id=150032
151  *
152  * Here the same name is being used both for a local variable
153  * declared in g(), and as a property name for |g| as an object
154  */
155 function g()
156 {
157   var propA = g.propA;
158   var propB = g.propC;
159
160   this.getVarA = function() {return propA;}
161   this.getVarB = function() {return propB;}
162 }
163 g.propA = 'A';
164 g.propB = 'B';
165 g.propC = 'C';
166 var obj = new g();
167
168 status = inSection(6);
169 actual = obj.getVarA(); // this one was returning 'undefined'
170 expect = 'A';
171 addThis();
172
173 status = inSection(7);
174 actual = obj.getVarB(); // this one is easy; it never failed
175 expect = 'C';
176 addThis();
177
178
179
180 /*
181  * By martin.honnen@t-online.de
182  * From http://bugzilla.mozilla.org/show_bug.cgi?id=150859
183  *
184  * Here the same name is being used for a local var in F
185  * and as a property name for |F| as an object
186  *
187  * Twist: the property is added via another function.
188  */
189 function setFProperty(val)
190 {
191   F.propA = val;
192 }
193
194 function F()
195 {
196  var propA = 'Local variable in F';
197 }
198
199 status = inSection(8);
200 setFProperty('Hello');
201 actual = F.propA; // this was returning 'undefined'
202 expect = 'Hello';
203 addThis();
204
205
206
207
208 //-----------------------------------------------------------------------------
209 test();
210 //-----------------------------------------------------------------------------
211
212
213
214 function addThis()
215 {
216   statusitems[UBound] = status;
217   actualvalues[UBound] = actual;
218   expectedvalues[UBound] = expect;
219   UBound++;
220 }
221
222
223 function test()
224 {
225   enterFunc('test');
226   printBugNumber(bug);
227   printStatus(summary);
228
229   for (var i=0; i<UBound; i++)
230   {
231     reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
232   }
233
234   exitFunc ('test');
235 }