18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS IS"
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* basis, WITHOUT WARRANTY OF ANY KIND, either expressed
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* or implied. See the License for the specific language governing
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation.  Portions created by Netscape are
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. All
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Rights Reserved.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): pschwartau@netscape.com
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 14 April 2001
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: Testing  obj.__lookupGetter__(), obj.__lookupSetter__()
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=71992
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Brendan: "I see no need to provide more than the minimum:
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* o.__lookupGetter__('p') returns the getter function for o.p,
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* or undefined if o.p has no getter.  Users can wrap and layer."
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-------------------------------------------------------------------------------------------------
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0;
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 71992;
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Testing  obj.__lookupGetter__(), obj.__lookupSetter__()';
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statprefix = 'Status: ';
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = '';
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statusitems = [ ];
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = '';
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actualvalues = [ ];
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect= '';
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expectedvalues = [ ];
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnName = 'name';
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnColor = 'color';
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnNonExistingProp = 'ASDF_#_$%';
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnDEFAULT = 'default name';
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnFRED = 'Fred';
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnRED = 'red';
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar obj = {};
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar obj2 = {};
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar s;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// The only setter and getter functions we'll use in the three sections below -
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnNameSetter = function(newValue) {this._name=newValue; this.nameSETS++;};
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnNameGetter = function() {this.nameGETS++; return this._name;};
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// SECTION1: define getter/setter directly on an object (not its prototype)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj = new Object();
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.nameSETS = 0;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.nameGETS = 0;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.__defineSetter__(cnName, cnNameSetter);
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.__defineGetter__(cnName, cnNameGetter);
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.name = cnFRED;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.color = cnRED;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus ='In SECTION1 of test; looking up extant getter/setter';
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)];
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [cnNameSetter, cnNameGetter];
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION1 of test; looking up nonexistent getter/setter';
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)];
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION1 of test; looking up getter/setter on nonexistent property';
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)];
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// SECTION2: define getter/setter in Object.prototype
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectObject.prototype.nameSETS = 0;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectObject.prototype.nameGETS = 0;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectObject.prototype.__defineSetter__(cnName, cnNameSetter);
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectObject.prototype.__defineGetter__(cnName, cnNameGetter);
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj = new Object();
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.name = cnFRED;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.color = cnRED;
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION2 of test looking up extant getter/setter';
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)];
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [cnNameSetter, cnNameGetter];
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION2 of test; looking up nonexistent getter/setter';
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)];
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION2 of test; looking up getter/setter on nonexistent property';
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)];
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// SECTION 3: define getter/setter in prototype of user-defined constructor
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction TestObject()
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTestObject.prototype.nameSETS = 0;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTestObject.prototype.nameGETS = 0;
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTestObject.prototype.__defineSetter__(cnName, cnNameSetter);
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTestObject.prototype.__defineGetter__(cnName, cnNameGetter);
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTestObject.prototype.name = cnDEFAULT;
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj = new TestObject();
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.name = cnFRED;
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectobj.color = cnRED;
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION3 of test looking up extant getter/setter';
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnName), obj.__lookupGetter__(cnName)];
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [cnNameSetter, cnNameGetter];
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION3 of test; looking up non-existent getter/setter';
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnColor), obj.__lookupGetter__(cnColor)];
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'In SECTION3 of test; looking up getter/setter on nonexistent property';
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = [obj.__lookupSetter__(cnNonExistingProp), obj.__lookupGetter__(cnNonExistingProp)];
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = [undefined, undefined];
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//---------------------------------------------------------------------------------
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest();
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//---------------------------------------------------------------------------------
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addThis()
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  statusitems[UBound] = status;
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actualvalues[UBound] = actual.toString();
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expectedvalues[UBound] = expect.toString();
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  UBound++;
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test()
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  enterFunc ('test');
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printBugNumber (bug);
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printStatus (summary);
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for (var i = 0; i < UBound; i++)
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    reportCompare(expectedvalues[i], actualvalues[i], getStatus(i));
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  exitFunc ('test');
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getStatus(i)
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return statprefix + statusitems[i];
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
174