X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/static-getter-delete.js diff --git a/tests/stress/static-getter-delete.js b/tests/stress/static-getter-delete.js new file mode 100644 index 0000000..c88ca0a --- /dev/null +++ b/tests/stress/static-getter-delete.js @@ -0,0 +1,47 @@ +function shouldBe(actual, expected) { + if (actual !== expected) + throw new Error('bad value: ' + actual); +} + +function shouldThrow(func, errorMessage) { + var errorThrown = false; + var error = null; + try { + func(); + } catch (e) { + errorThrown = true; + error = e; + } + if (!errorThrown) + throw new Error('not thrown'); + if (String(error) !== errorMessage) + throw new Error(`bad error: ${String(error)}`); +} + +// Before static functions (& accessors) are reified. +shouldThrow(function () { + 'use strict'; + RegExp.prototype.multiline = 'ok'; +}, 'TypeError: Attempted to assign to readonly property.'); + +(function () { + 'use strict'; + shouldBe(delete RegExp.prototype.global, true); + shouldBe(RegExp.prototype.hasOwnProperty('global'), false); + RegExp.prototype.global = 'hello' + shouldBe(RegExp.prototype.global, 'hello'); +}()); + +// After static functions (& accessors) are reified. +shouldThrow(function () { + 'use strict'; + RegExp.prototype.multiline = 'ok'; +}, 'TypeError: Attempted to assign to readonly property.'); + +(function () { + 'use strict'; + shouldBe(delete RegExp.prototype.multiline, true); + shouldBe(RegExp.prototype.hasOwnProperty('multiline'), false); + RegExp.prototype.multiline = 'hello' + shouldBe(RegExp.prototype.multiline, 'hello'); +}());