diff options
Diffstat (limited to 'js/src/tests/non262/object/propertyIsEnumerable-proxy.js')
-rw-r--r-- | js/src/tests/non262/object/propertyIsEnumerable-proxy.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/js/src/tests/non262/object/propertyIsEnumerable-proxy.js b/js/src/tests/non262/object/propertyIsEnumerable-proxy.js new file mode 100644 index 0000000000..a1dda90e0a --- /dev/null +++ b/js/src/tests/non262/object/propertyIsEnumerable-proxy.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object) { + var log = []; + var handler = { + getOwnPropertyDescriptor(target, propertyKey) { + log.push(propertyKey); + return Object.getOwnPropertyDescriptor(target, propertyKey); + } + }; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + if (!(propertyKey in target)) { + throw new Error(`Unexpected call to trap: "${propertyKey}"`); + } + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +var properties = ["string-property"]; +if (typeof Symbol === 'function') + properties.push(Symbol("symbol-property")); + +for (var property of properties) { + // Test 1: property is not present on object + var {proxy, log} = logProxy({}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 2: property is present on object and enumerable + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, true); + assertDeepEq(log, [property]); + + // Test 3: property is present on object, but not enumerable + var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 4: property is present on prototype object + var {proxy, log} = logProxy(Object.create({[property]: 0})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 5: property is present on prototype object, prototype is proxy object + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property); + assertEq(result, false); + assertDeepEq(log, []); +} + +reportCompare(0, 0); |