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..a0fe1beb740f9d88037f61f23b404da966484dd3 100644 |
--- a/test/mjsunit/harmony/array-of.js |
+++ b/test/mjsunit/harmony/array-of.js |
@@ -182,3 +182,24 @@ assertThrows(function() { new Array.of() }, TypeError); // not a constructor |
assertEquals(instance instanceof boundFn, true); |
assertEquals(Array.isArray(instance), false); |
})(); |
+ |
+// Assert that [[DefineOwnProperty]] is used in ArrayFrom, meaning a |
+// setter isn't called, and a failed [[DefineOwnProperty]] will throw. |
+(function testDefinesOwnProperty() { |
+ var setterCalled = 0; |
+ function exotic() { |
+ Object.defineProperty(this, '0', { |
+ get: function() { return 2; }, |
+ set: function() { setterCalled++; } |
+ }); |
+ } |
+ // Check that exotic was defined right |
+ var instance = new exotic(); |
+ assertEquals(2, instance[0]); |
+ instance[0] = 1; |
+ assertEquals(2, instance[0]); |
+ assertEquals(1, setterCalled); |
+ // Accessor properties can't be overwritten with DefineOwnProperty |
+ assertThrows(function () { Array.of.call(exotic, 1); }, TypeError); |
+ assertEquals(1, setterCalled); |
+})(); |