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 true 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 PASS Object.getOwnPropertyDescriptor(RegExp, '$_').get is RegExp$_Getter PASS Object.getOwnPropertyDescriptor(RegExp, '$_').set is RegExp$_Setter PASS Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('writable') is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').enumerable is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').configurable is true 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 true 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 true 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 true 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').get is globalWindowGetter PASS Object.getOwnPropertyDescriptor(global, 'window').set is undefined PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('writable') 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, 0).value is global[0] PASS Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(global, 0).enumerable is true PASS Object.getOwnPropertyDescriptor(global, 0).configurable is 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 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).configurable is 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 PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 0).configurable is true PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 0).value is canvasPixelArray[0] PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 0).hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 0).hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 0).enumerable is true PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 0).configurable is 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 PASS Object.getOwnPropertyDescriptor(select, 0).configurable is 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: null is not an object (evaluating 'Object.getOwnPropertyDescriptor(null)'). PASS Object.getOwnPropertyDescriptor(undefined) threw exception TypeError: undefined is not an object (evaluating 'Object.getOwnPropertyDescriptor(undefined)'). PASS Object.getOwnPropertyDescriptor(1) is undefined PASS Object.getOwnPropertyDescriptor('') is undefined PASS Object.getOwnPropertyDescriptor(true) is undefined PASS Object.getOwnPropertyDescriptor(false) is undefined 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 Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').get is regexpPrototypeGlobalGetter PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').set is undefined PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').hasOwnProperty('value') is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').hasOwnProperty('writable') is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').enumerable is false PASS Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').configurable is true PASS successfullyParsed is true TEST COMPLETE