X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/array-fill-put-by-val.js diff --git a/tests/stress/array-fill-put-by-val.js b/tests/stress/array-fill-put-by-val.js new file mode 100644 index 0000000..29eefef --- /dev/null +++ b/tests/stress/array-fill-put-by-val.js @@ -0,0 +1,44 @@ +function shouldThrow(func, message) { + var error = null; + try { + func(); + } catch (e) { + error = e; + } + if (!error) + throw new Error("not thrown."); + if (String(error) !== message) + throw new Error("bad error: " + String(error)); +} + +var array = new Array(10); + +for (var i = 0; i < 10; ++i) { + (function (index) { + var seenOnce = false; + var storage = null; + Object.defineProperty(Array.prototype, index, { + get() { + throw new Error('get is called.' + index); + return storage; + }, + set(value) { + if (seenOnce) + throw new Error('set is called.' + index); + seenOnce = true; + storage = value; + return storage; + } + }); + }(i)); +} + +// No error, but all seenOnce becomes true. +array.fill(42); + +// Ensures that all setter is called once. +for (var i = 0; i < 10; ++i) { + shouldThrow(function () { + array[i] = i; + }, "Error: set is called." + i); +}