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