| 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)}`); |
| } |
| |
| // 9.1.9.1 4-a |
| shouldThrow(function () { |
| 'use strict'; |
| var target = {}; |
| var handler = {}; |
| var proxy = new Proxy(target, handler); |
| shouldBe(Reflect.defineProperty(target, 'cocoa', { |
| writable: false, |
| value: 42, |
| }), true); |
| proxy.cocoa = 'NG'; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| // 9.1.9.1 4-b |
| (function () { |
| 'use strict'; |
| var target = {}; |
| var handler = {}; |
| var proxy = new Proxy(target, handler); |
| shouldBe(Reflect.defineProperty(target, 'cocoa', { |
| writable: false, |
| value: 42, |
| }), true); |
| shouldBe(Reflect.set(proxy, 'cocoa', 'NG', 'Cocoa'), false); |
| }()); |
| |
| // 9.1.9.1 4-d-i |
| shouldThrow(function () { |
| 'use strict'; |
| var target = {}; |
| var proxy = new Proxy(target, { |
| get set() |
| { |
| shouldBe(Reflect.defineProperty(receiver, 'cocoa', { |
| set() { } |
| }), true); |
| return undefined; |
| } |
| }); |
| var receiver = { __proto__: proxy }; |
| shouldBe(Reflect.defineProperty(target, 'cocoa', { |
| writable: true, |
| value: 42, |
| }), true); |
| receiver.cocoa = 'NG'; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| // 9.1.9.1 4-d-ii |
| shouldThrow(function () { |
| 'use strict'; |
| var target = {}; |
| var proxy = new Proxy(target, { |
| get set() |
| { |
| shouldBe(Reflect.defineProperty(receiver, 'cocoa', { |
| value: 'hello', |
| writable: false |
| }), true); |
| return undefined; |
| } |
| }); |
| var receiver = { __proto__: proxy }; |
| shouldBe(Reflect.defineProperty(target, 'cocoa', { |
| writable: true, |
| value: 42, |
| }), true); |
| receiver.cocoa = 'NG'; |
| }, `TypeError: Attempted to assign to readonly property.`); |
| |
| // 9.1.9.1 7 |
| shouldThrow(function () { |
| 'use strict'; |
| var target = {}; |
| var proxy = new Proxy(target, {}); |
| var receiver = { __proto__: proxy }; |
| shouldBe(Reflect.defineProperty(target, 'cocoa', { |
| get() { } |
| }), true); |
| receiver.cocoa = 'NG'; |
| }, `TypeError: Attempted to assign to readonly property.`); |