]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/js1_5/Object/regress-137000.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / 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 }