Index: test/mjsunit/harmony/array-of.js |
diff --git a/test/mjsunit/harmony/array-of.js b/test/mjsunit/harmony/array-of.js |
index adf7cb547cdae9eebd9fdec14f01c8d562526e65..7fd5eeaf61ff89aec2460b1c02a9ae1e9e2bd4d2 100644 |
--- a/test/mjsunit/harmony/array-of.js |
+++ b/test/mjsunit/harmony/array-of.js |
@@ -182,3 +182,33 @@ assertThrows(function() { new Array.of() }, TypeError); // not a constructor |
assertEquals(instance instanceof boundFn, true); |
assertEquals(Array.isArray(instance), false); |
})(); |
+ |
+(function testDefinesOwnProperty() { |
+ // Assert that [[DefineOwnProperty]] is used in ArrayFrom, meaning a |
+ // setter isn't called, and a failed [[DefineOwnProperty]] will throw. |
+ var setterCalled = 0; |
+ function exotic() { |
+ Object.defineProperty(this, '0', { |
+ get: function() { return 2; }, |
+ set: function() { setterCalled++; } |
+ }); |
+ } |
+ // Non-configurable properties can't be overwritten with DefineOwnProperty |
+ assertThrows(function () { Array.of.call(exotic, 1); }, TypeError); |
+ // The setter wasn't called |
+ assertEquals(0, setterCalled); |
+ |
+ // Check that array properties defined are writable, enumerable, configurable |
+ function ordinary() { } |
+ var x = Array.of.call(ordinary, 2); |
+ var xlength = Object.getOwnPropertyDescriptor(x, 'length'); |
+ assertEquals(1, xlength.value); |
+ assertEquals(true, xlength.writable); |
+ assertEquals(true, xlength.enumerable); |
+ assertEquals(true, xlength.configurable); |
+ var x0 = Object.getOwnPropertyDescriptor(x, 0); |
+ assertEquals(2, x0.value); |
+ assertEquals(true, xlength.writable); |
+ assertEquals(true, xlength.enumerable); |
+ assertEquals(true, xlength.configurable); |
+})(); |