Test to ensure correct behaviour of Object.getOwnPropertyDescriptor On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS Object.getOwnPropertyDescriptor({}, 'undefinedProperty') is undefined. PASS Object.getOwnPropertyDescriptor({definedProperty:'defined'}, 'definedProperty').value is "defined" PASS Object.getOwnPropertyDescriptor({definedProperty:'defined'}, 'definedProperty').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor({definedProperty:'defined'}, 'definedProperty').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor({definedProperty:'defined'}, 'definedProperty').enumerable is true PASS Object.getOwnPropertyDescriptor({definedProperty:'defined'}, 'definedProperty').configurable is true PASS Object.getOwnPropertyDescriptor(Array.prototype, 'concat').value is Array.prototype.concat PASS Object.getOwnPropertyDescriptor(Array.prototype, 'concat').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Array.prototype, 'concat').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Array.prototype, 'concat').enumerable is false PASS Object.getOwnPropertyDescriptor(Array.prototype, 'concat').configurable is true PASS Object.getOwnPropertyDescriptor(Date.prototype, 'toISOString').value is Date.prototype.toISOString PASS Object.getOwnPropertyDescriptor(Date.prototype, 'toISOString').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Date.prototype, 'toISOString').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Date.prototype, 'toISOString').enumerable is false PASS Object.getOwnPropertyDescriptor(Date.prototype, 'toISOString').configurable is true PASS Object.getOwnPropertyDescriptor(String.prototype, 'concat').value is String.prototype.concat PASS Object.getOwnPropertyDescriptor(String.prototype, 'concat').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(String.prototype, 'concat').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(String.prototype, 'concat').enumerable is false PASS Object.getOwnPropertyDescriptor(String.prototype, 'concat').configurable is true PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'exec').value is RegExp.prototype.exec PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'exec').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'exec').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'exec').enumerable is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'exec').configurable is true PASS Object.getOwnPropertyDescriptor(document.__proto__.__proto__, 'createElement').value is document.createElement PASS Object.getOwnPropertyDescriptor(document.__proto__.__proto__, 'createElement').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(document.__proto__.__proto__, 'createElement').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(document.__proto__.__proto__, 'createElement').enumerable is true PASS Object.getOwnPropertyDescriptor(document.__proto__.__proto__, 'createElement').configurable is false PASS Object.getOwnPropertyDescriptor(Number, 'NEGATIVE_INFINITY').value is Number.NEGATIVE_INFINITY PASS Object.getOwnPropertyDescriptor(Number, 'NEGATIVE_INFINITY').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Number, 'NEGATIVE_INFINITY').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Number, 'NEGATIVE_INFINITY').enumerable is false PASS Object.getOwnPropertyDescriptor(Number, 'NEGATIVE_INFINITY').configurable is false FAIL Object.getOwnPropertyDescriptor(RegExp, '$_').value should be (of type string). Was undefined (of type undefined). FAIL Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('get') should be false. Was true. FAIL Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('set') should be false. Was true. PASS Object.getOwnPropertyDescriptor(RegExp, '$_').enumerable is false FAIL Object.getOwnPropertyDescriptor(RegExp, '$_').configurable should be true. Was false. PASS Object.getOwnPropertyDescriptor(/a/g, 'global').value is true PASS Object.getOwnPropertyDescriptor(/a/g, 'global').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(/a/g, 'global').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(/a/g, 'global').enumerable is false PASS Object.getOwnPropertyDescriptor(/a/g, 'global').configurable is false PASS Object.getOwnPropertyDescriptor(Node, 'DOCUMENT_POSITION_DISCONNECTED').value is Node.DOCUMENT_POSITION_DISCONNECTED PASS Object.getOwnPropertyDescriptor(Node, 'DOCUMENT_POSITION_DISCONNECTED').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Node, 'DOCUMENT_POSITION_DISCONNECTED').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Node, 'DOCUMENT_POSITION_DISCONNECTED').enumerable is true PASS Object.getOwnPropertyDescriptor(Node, 'DOCUMENT_POSITION_DISCONNECTED').configurable is false PASS Object.getOwnPropertyDescriptor(Math, 'sin').value is Math.sin PASS Object.getOwnPropertyDescriptor(Math, 'sin').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Math, 'sin').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Math, 'sin').enumerable is false PASS Object.getOwnPropertyDescriptor(Math, 'sin').configurable is true PASS Object.getOwnPropertyDescriptor([1,2,3], 0).value is 1 PASS Object.getOwnPropertyDescriptor([1,2,3], 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 0).enumerable is true PASS Object.getOwnPropertyDescriptor([1,2,3], 0).configurable is true PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').value is 3 PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').enumerable is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').configurable is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').value is 3 PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').enumerable is false PASS Object.getOwnPropertyDescriptor([1,2,3], 'length').configurable is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 0).value is 'a' PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 0).enumerable is true PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 0).configurable is true PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 'length').value is 2 PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 'length').enumerable is false PASS Object.getOwnPropertyDescriptor(/(a)*/g.exec('a'), 'length').configurable is false PASS Object.getOwnPropertyDescriptor(function(){}, 'length').value is 0 PASS Object.getOwnPropertyDescriptor(function(){}, 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(function(){}, 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(function(){}, 'length').enumerable is false PASS Object.getOwnPropertyDescriptor(function(){}, 'length').configurable is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').value is 1 PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').enumerable is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').configurable is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').value is 'sin' PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').enumerable is false PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'global').value is global PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'global').enumerable is true PASS Object.getOwnPropertyDescriptor(global, 'global').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'undefined').value is undefined PASS Object.getOwnPropertyDescriptor(global, 'undefined').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'undefined').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'undefined').enumerable is false PASS Object.getOwnPropertyDescriptor(global, 'undefined').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'NaN').value is NaN PASS Object.getOwnPropertyDescriptor(global, 'NaN').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'NaN').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'NaN').enumerable is false PASS Object.getOwnPropertyDescriptor(global, 'NaN').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'Infinity').value is Infinity PASS Object.getOwnPropertyDescriptor(global, 'Infinity').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'Infinity').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'Infinity').enumerable is false PASS Object.getOwnPropertyDescriptor(global, 'Infinity').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'window').value is global PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'window').enumerable is true PASS Object.getOwnPropertyDescriptor(global, 'window').configurable is false PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').value is XMLHttpRequest PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').enumerable is false PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').configurable is true PASS Object.getOwnPropertyDescriptor(global, 'length').value is global.length PASS Object.getOwnPropertyDescriptor(global, 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 'length').enumerable is true FAIL Object.getOwnPropertyDescriptor(global, 'length').configurable should be false. Was true. FAIL Object.getOwnPropertyDescriptor(global, 0).value should be [object Window]. Threw exception TypeError: Cannot read property 'value' of undefined FAIL Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('get') should be false. Threw exception TypeError: Cannot call method 'hasOwnProperty' of undefined FAIL Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('set') should be false. Threw exception TypeError: Cannot call method 'hasOwnProperty' of undefined FAIL Object.getOwnPropertyDescriptor(global, 0).enumerable should be false. Threw exception TypeError: Cannot read property 'enumerable' of undefined FAIL Object.getOwnPropertyDescriptor(global, 0).configurable should be false. Threw exception TypeError: Cannot read property 'configurable' of undefined PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').value is 1 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').enumerable is true FAIL Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).value is document.getElementsByTagName('div')[0] PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).enumerable is true FAIL Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).value is document.getElementsByClassName('pass')[0] PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).enumerable is true FAIL Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').value is document.getElementsByClassName('pass').length PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').enumerable is true FAIL Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(select, 'length').value is select.length PASS Object.getOwnPropertyDescriptor(select, 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(select, 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(select, 'length').enumerable is true FAIL Object.getOwnPropertyDescriptor(select, 'length').configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(select, 0).value is select[0] PASS Object.getOwnPropertyDescriptor(select, 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(select, 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(select, 0).enumerable is true FAIL Object.getOwnPropertyDescriptor(select, 0).configurable should be false. Was true. PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').get is getterFunc PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').set is undefined PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').hasOwnProperty('writable') is false PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').enumerable is true PASS Object.getOwnPropertyDescriptor(objectWithGetter, 'getter').configurable is true PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').get is undefined PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').set is setterFunc PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').hasOwnProperty('writable') is false PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').enumerable is true PASS Object.getOwnPropertyDescriptor(objectWithSetter, 'setter').configurable is true PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').get is getterFunc PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').set is setterFunc PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').hasOwnProperty('writable') is false PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').enumerable is true PASS Object.getOwnPropertyDescriptor(objectWithAccessor, 'accessor').configurable is true PASS Object.getOwnPropertyDescriptor(null) threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. PASS Object.getOwnPropertyDescriptor(undefined) threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. PASS Object.getOwnPropertyDescriptor(1) threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. PASS Object.getOwnPropertyDescriptor('') threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. PASS Object.getOwnPropertyDescriptor(true) threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. PASS Object.getOwnPropertyDescriptor(false) threw exception TypeError: Object.getOwnPropertyDescriptor called on non-object. Checking property ordering PASS property is 'value' PASS property is 'writable' PASS property is 'enumerable' PASS property is 'configurable' PASS property is 'get' PASS property is 'set' PASS property is 'enumerable' PASS property is 'configurable' PASS property is 'get' PASS property is 'set' PASS property is 'enumerable' PASS property is 'configurable' PASS property is 'get' PASS property is 'set' PASS property is 'enumerable' PASS property is 'configurable' PASS successfullyParsed is true TEST COMPLETE