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 PASS Object.getOwnPropertyDescriptor(RegExp, '$_').value is RegExp.$_ PASS Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').enumerable is false PASS Object.getOwnPropertyDescriptor(RegExp, '$_').configurable is true 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 true PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').configurable is false 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 PASS Object.getOwnPropertyDescriptor(global, 'length').configurable is false 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 false PASS Object.getOwnPropertyDescriptor(global, 0).configurable is false 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 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 'length').configurable is false 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 false 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 false 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 PASS Object.getOwnPropertyDescriptor(document.getElementsByClassName('pass'), 'length').configurable is false PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 'length').value is canvasPixelArray.length PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 'length').hasOwnProperty('get') is false PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 'length').hasOwnProperty('set') is false PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 'length').enumerable is true PASS Object.getOwnPropertyDescriptor(canvasPixelArray, 'length').configurable is false 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 false 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 PASS Object.getOwnPropertyDescriptor(select, 'length').configurable is false 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 false 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: Requested property descriptor of a value that is not an object.. PASS Object.getOwnPropertyDescriptor(undefined) threw exception TypeError: Requested property descriptor of a value that is not an object.. PASS Object.getOwnPropertyDescriptor(1) threw exception TypeError: Requested property descriptor of a value that is not an object.. PASS Object.getOwnPropertyDescriptor('') threw exception TypeError: Requested property descriptor of a value that is not an object.. PASS Object.getOwnPropertyDescriptor(true) threw exception TypeError: Requested property descriptor of a value that is not an object.. PASS Object.getOwnPropertyDescriptor(false) threw exception TypeError: Requested property descriptor of a value that is not an 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