]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/static-getter-delete.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / 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 (file)
index 0000000..c88ca0a
--- /dev/null
@@ -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');
+}());