diff options
Diffstat (limited to 'js/src/jit-test/tests/basic/for-in-proto-properties.js')
-rw-r--r-- | js/src/jit-test/tests/basic/for-in-proto-properties.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/basic/for-in-proto-properties.js b/js/src/jit-test/tests/basic/for-in-proto-properties.js new file mode 100644 index 0000000000..a8f2279c4e --- /dev/null +++ b/js/src/jit-test/tests/basic/for-in-proto-properties.js @@ -0,0 +1,41 @@ +function testNonEnumerableVisited() { + // Non-enumerable properties must still be included in the duplicate-property + // checking. + + var proto1 = Object.create(null); + Object.defineProperty(proto1, "x", {enumerable: true, value: 1}); + + var proto2 = Object.create(proto1); + Object.defineProperty(proto2, "x", {enumerable: false, value: 1}); + + for (var p in proto2) { + throw "Shouldn't enumerate any properties"; + } + + var o = Object.create(proto2); + for (var p in o) { + throw "Shouldn't enumerate any properties"; + } +} +testNonEnumerableVisited(); + +function testEnumerableOnProto() { + var iter = o => { + var props = []; + for (var p in o) { props.push(p); } + return props; + }; + + // Test dense elements on the proto chain are included. + var props = iter(Object.create({0: 1})); + assertEq(JSON.stringify(props), '["0"]'); + + // Test typed array elements on the proto chain are included. + props = iter(Object.create(new Int32Array(2))); + assertEq(JSON.stringify(props), '["0","1"]'); + + // Test sparse elements on the proto chain are included. + props = iter(Object.create({1234567: 1})); + assertEq(JSON.stringify(props), '["1234567"]'); +} +testEnumerableOnProto(); |