| Index: test/mjsunit/strict-mode.js
|
| diff --git a/test/mjsunit/strict-mode.js b/test/mjsunit/strict-mode.js
|
| index 4071232ebff3753c6e6b88c05cd61ddc7200f8f6..9137f8d03a9652f6c974436bff62dc478a08ec57 100644
|
| --- a/test/mjsunit/strict-mode.js
|
| +++ b/test/mjsunit/strict-mode.js
|
| @@ -828,3 +828,119 @@ repeat(10, function() { testAssignToUndefined(false); });
|
| assertEquals(o[100000], 31);
|
| }
|
| })();
|
| +
|
| +
|
| +(function TestSetElementWithoutSetter() {
|
| + "use strict";
|
| +
|
| + var o = { };
|
| + Object.defineProperty(o, 0, { get : function() { } });
|
| +
|
| + var zero_smi = 0;
|
| + var zero_number = new Number(0);
|
| + var zero_symbol = "0";
|
| + var zero_string = "-0-".substring(1,2);
|
| +
|
| + assertThrows(function() { o[zero_smi] = "new value"; }, TypeError);
|
| + assertThrows(function() { o[zero_number] = "new value"; }, TypeError);
|
| + assertThrows(function() { o[zero_symbol] = "new value"; }, TypeError);
|
| + assertThrows(function() { o[zero_string] = "new value"; }, TypeError);
|
| +})();
|
| +
|
| +
|
| +(function TestSetElementNonConfigurable() {
|
| + "use strict";
|
| + var frozen = Object.freeze({});
|
| + var sealed = Object.seal({});
|
| +
|
| + var zero_number = 0;
|
| + var zero_symbol = "0";
|
| + var zero_string = "-0-".substring(1,2);
|
| +
|
| + assertThrows(function() { frozen[zero_number] = "value"; }, TypeError);
|
| + assertThrows(function() { sealed[zero_number] = "value"; }, TypeError);
|
| + assertThrows(function() { frozen[zero_symbol] = "value"; }, TypeError);
|
| + assertThrows(function() { sealed[zero_symbol] = "value"; }, TypeError);
|
| + assertThrows(function() { frozen[zero_string] = "value"; }, TypeError);
|
| + assertThrows(function() { sealed[zero_string] = "value"; }, TypeError);
|
| +})();
|
| +
|
| +
|
| +(function TestAssignmentToReadOnlyElement() {
|
| + "use strict";
|
| +
|
| + var o = {};
|
| + Object.defineProperty(o, 7, { value: 17 });
|
| +
|
| + var seven_smi = 7;
|
| + var seven_number = new Number(7);
|
| + var seven_symbol = "7";
|
| + var seven_string = "-7-".substring(1,2);
|
| +
|
| + // Index with number.
|
| + assertThrows(function() { o[seven_smi] = "value"; }, TypeError);
|
| + assertThrows(function() { o[seven_smi] += 10; }, TypeError);
|
| + assertThrows(function() { o[seven_smi] -= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_smi] *= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_smi] /= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_smi]++; }, TypeError);
|
| + assertThrows(function() { o[seven_smi]--; }, TypeError);
|
| + assertThrows(function() { ++o[seven_smi]; }, TypeError);
|
| + assertThrows(function() { --o[seven_smi]; }, TypeError);
|
| +
|
| + assertThrows(function() { o[seven_number] = "value"; }, TypeError);
|
| + assertThrows(function() { o[seven_number] += 10; }, TypeError);
|
| + assertThrows(function() { o[seven_number] -= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_number] *= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_number] /= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_number]++; }, TypeError);
|
| + assertThrows(function() { o[seven_number]--; }, TypeError);
|
| + assertThrows(function() { ++o[seven_number]; }, TypeError);
|
| + assertThrows(function() { --o[seven_number]; }, TypeError);
|
| +
|
| + assertThrows(function() { o[seven_symbol] = "value"; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol] += 10; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol] -= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol] *= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol] /= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol]++; }, TypeError);
|
| + assertThrows(function() { o[seven_symbol]--; }, TypeError);
|
| + assertThrows(function() { ++o[seven_symbol]; }, TypeError);
|
| + assertThrows(function() { --o[seven_symbol]; }, TypeError);
|
| +
|
| + assertThrows(function() { o[seven_string] = "value"; }, TypeError);
|
| + assertThrows(function() { o[seven_string] += 10; }, TypeError);
|
| + assertThrows(function() { o[seven_string] -= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_string] *= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_string] /= 10; }, TypeError);
|
| + assertThrows(function() { o[seven_string]++; }, TypeError);
|
| + assertThrows(function() { o[seven_string]--; }, TypeError);
|
| + assertThrows(function() { ++o[seven_string]; }, TypeError);
|
| + assertThrows(function() { --o[seven_string]; }, TypeError);
|
| +
|
| + assertEquals(o[seven_number], 17);
|
| + assertEquals(o[seven_symbol], 17);
|
| + assertEquals(o[seven_string], 17);
|
| +})();
|
| +
|
| +
|
| +(function TestAssignmentToReadOnlyLoop() {
|
| + "use strict";
|
| +
|
| + var o = {};
|
| + Object.defineProperty(o, 7, { value: 17 });
|
| +
|
| + var seven_smi = 7;
|
| + var seven_number = new Number(7);
|
| + var seven_symbol = "7";
|
| + var seven_string = "-7-".substring(1,2);
|
| +
|
| + for (var i = 0; i < 10; i ++) {
|
| + assertThrows(function() { o[seven_smi] = "value" }, TypeError);
|
| + assertThrows(function() { o[seven_number] = "value" }, TypeError);
|
| + assertThrows(function() { o[seven_symbol] = "value" }, TypeError);
|
| + assertThrows(function() { o[seven_string] = "value" }, TypeError);
|
| + }
|
| +
|
| + assertEquals(o[7], 17);
|
| +})();
|
|
|