This performs a number of different tests on JavaScript getters and setters. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". the get set object declaration syntax PASS o1.b is 8 PASS o1.b is 11 __defineGetter__ and __defineSetter__ PASS o2.b is 8 PASS o2.b is 11 Setting a value without having a setter PASS o3.x = 10; o3.x is 42 Getting a value without having a getter PASS o4.x is undefined. __lookupGetter__ and __lookupSetter__ PASS o4.__lookupGetter__('b') is getB PASS o4.__lookupSetter__('b') is setB __defineGetter__ and __defineSetter__ with various invalid arguments PASS o5.__defineSetter__('a', null) threw exception TypeError: invalid setter usage. PASS o5.__defineSetter__('a', o5) threw exception TypeError: invalid setter usage. PASS o5.__defineGetter__('a', null) threw exception TypeError: invalid getter usage. PASS o5.__defineGetter__('a', o5) threw exception TypeError: invalid getter usage. setters and getters with exceptions PASS x = o6.x threw exception Exception in get. PASS x is 0 PASS o6.x = 42 threw exception Exception in set. Defining a setter should also define a getter for the same property which returns undefined. Thus, a getter defined on the prototype should not be called. PASS o7.x is undefined. If an object has a property and its prototype has a setter function for that property, then setting the property should set the property directly and not call the setter function. PASS o8.numSets is 0 PASS typeof testObj.getter is 'string' the get set with string property name PASS o9.b is 8 PASS o9.b is 11 the get set with numeric property name PASS o10[42] is 8 PASS o10[42] is 11 Defining getter only and accessing __lookupSetter__ should not crash PASS o11.__lookupSetter__('b') is void 0 Defining setter only and accessing __lookupGetter__ should not crash PASS o12.__lookupGetter__('b') is void 0 When undefined, accessing __lookupGetter__ and __lookupSetter__ should not crash PASS o13.__lookupGetter__('b') is void 0 PASS o13.__lookupSetter__('b') is void 0 __defineGetter__ and __defineSetter__ should throw exceptions when acting on sealed objects PASS o14.__defineGetter__('a', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. PASS o14.__defineGetter__('b', function(){}) threw exception TypeError: Attempting to define property on object that is not extensible.. PASS o14.__defineSetter__('a', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. PASS o14.__defineSetter__('b', function(){}) threw exception TypeError: Attempting to define property on object that is not extensible.. __defineGetter__ and __defineSetter__ should throw exceptions when acting on frozen objects PASS o15.__defineGetter__('a', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. PASS o15.__defineGetter__('b', function(){}) threw exception TypeError: Attempting to define property on object that is not extensible.. PASS o15.__defineSetter__('a', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. PASS o15.__defineSetter__('b', function(){}) threw exception TypeError: Attempting to define property on object that is not extensible.. __defineGetter__ and __defineSetter__ should throw exceptions when acting on unconfigurable properties PASS o16.__defineGetter__('a', function(){}) did not throw exception. PASS o16.__defineSetter__('a', function(){}) did not throw exception. PASS o16.__defineSetter__('b', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. PASS o16.__defineSetter__('b', function(){}) threw exception TypeError: Attempting to change configurable attribute of unconfigurable property.. __lookupGetter__ can be interrupted by a proxy throwing an exception PASS o17.property is "WebKit!" PASS o17.__lookupGetter__('property') is getter17 PASS o17.__lookupSetter__('property') is undefined PASS o17Proxy.__lookupGetter__('property') threw exception o17 Proxy raised exception. PASS o17Proxy.__lookupSetter__('property') threw exception o17 Proxy raised exception. PASS o17Proxy.property is "WebKit!" PASS o17.property is "WebKit!" PASS o17.__lookupGetter__('property') is getter17 __lookupSetter__ can be interrupted by a proxy throwing an exception PASS o18.property = 5 is 5 PASS o18.property is undefined PASS o18.value is 5 PASS o18.__lookupGetter__('property') is undefined PASS o18.__lookupSetter__('property') is setter18 PASS o18Proxy.__lookupGetter__('property') threw exception o18 Proxy raised exception. PASS o18Proxy.__lookupSetter__('property') threw exception o18 Proxy raised exception. PASS o18Proxy.property = 'JavaScriptCore!' threw exception o18 Proxy raised exception. PASS o18Proxy.property is undefined PASS o18Proxy.value is 5 PASS o18.property = 'JavaScriptCore!' is "JavaScriptCore!" PASS o18.property is undefined PASS o18.value is "JavaScriptCore!" PASS o18.__lookupGetter__('property') is undefined PASS o18.__lookupSetter__('property') is setter18 PASS successfullyParsed is true TEST COMPLETE