| Index: test/mjsunit/harmony/proxies-get-own-property-descriptor.js
|
| diff --git a/test/mjsunit/harmony/proxies-get-own-property-descriptor.js b/test/mjsunit/harmony/proxies-get-own-property-descriptor.js
|
| deleted file mode 100644
|
| index f7dff61908cbfdaed49b07c6d0719058b13bebdc..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/harmony/proxies-get-own-property-descriptor.js
|
| +++ /dev/null
|
| @@ -1,129 +0,0 @@
|
| -// Copyright 2015 the V8 project authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// Flags: --harmony-proxies
|
| -
|
| -var target = {};
|
| -var configurable_desc = {
|
| - value: 123,
|
| - configurable: true,
|
| - writable: true,
|
| - enumerable: false,
|
| -};
|
| -Object.defineProperty(target, "configurable", configurable_desc);
|
| -var nonconfigurable_desc = {
|
| - value: 234,
|
| - configurable: false,
|
| - writable: false,
|
| - enumerable: true
|
| -}
|
| -Object.defineProperty(target, "nonconfigurable", nonconfigurable_desc);
|
| -
|
| -var proxied_desc = {
|
| - value: 345,
|
| - configurable: true
|
| -};
|
| -
|
| -var handler = {
|
| - "getOwnPropertyDescriptor": function(target, name) {
|
| - if (name === "proxied") {
|
| - return proxied_desc;
|
| - }
|
| - if (name === "return_null") {
|
| - return null;
|
| - }
|
| - return Object.getOwnPropertyDescriptor(target, name);
|
| - }
|
| -};
|
| -
|
| -var proxy = new Proxy(target, handler);
|
| -var proxy_without_handler = new Proxy(target, {});
|
| -
|
| -// Checking basic functionality:
|
| -
|
| -assertEquals(configurable_desc,
|
| - Object.getOwnPropertyDescriptor(proxy, "configurable"));
|
| -assertEquals(nonconfigurable_desc,
|
| - Object.getOwnPropertyDescriptor(proxy, "nonconfigurable"));
|
| -assertEquals({ value: proxied_desc.value,
|
| - configurable: proxied_desc.configurable,
|
| - enumerable: false,
|
| - writable: false },
|
| - Object.getOwnPropertyDescriptor(proxy, "proxied"));
|
| -assertEquals(configurable_desc,
|
| - Object.getOwnPropertyDescriptor(proxy_without_handler,
|
| - "configurable"));
|
| -assertEquals(nonconfigurable_desc,
|
| - Object.getOwnPropertyDescriptor(proxy_without_handler,
|
| - "nonconfigurable"));
|
| -
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "return_null")');
|
| -
|
| -handler.getOwnPropertyDescriptor = undefined;
|
| -assertEquals(configurable_desc,
|
| - Object.getOwnPropertyDescriptor(proxy, "configurable"));
|
| -
|
| -// Checking invariants mentioned explicitly by the ES spec:
|
| -
|
| -// (Inv-1) "A property cannot be reported as non-existent, if it exists as a
|
| -// non-configurable own property of the target object."
|
| -handler.getOwnPropertyDescriptor = function(target, name) { return undefined; };
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "nonconfigurable")');
|
| -assertEquals(undefined, Object.getOwnPropertyDescriptor(proxy, "configurable"));
|
| -
|
| -// (Inv-2) "A property cannot be reported as non-configurable, if it does not
|
| -// exist as an own property of the target object or if it exists as a
|
| -// configurable own property of the target object."
|
| -handler.getOwnPropertyDescriptor = function(target, name) {
|
| - return {value: 234, configurable: false, enumerable: true};
|
| -};
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "nonexistent")');
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "configurable")');
|
| -assertEquals(
|
| - false,
|
| - Object.getOwnPropertyDescriptor(proxy, "nonconfigurable").configurable);
|
| -
|
| -// (Inv-3) "A property cannot be reported as non-existent, if it exists as an
|
| -// own property of the target object and the target object is not extensible."
|
| -Object.seal(target);
|
| -handler.getOwnPropertyDescriptor = function(target, name) { return undefined; };
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "configurable")');
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "nonconfigurable")');
|
| -assertEquals(undefined, Object.getOwnPropertyDescriptor(proxy, "nonexistent"));
|
| -
|
| -// (Inv-4) "A property cannot be reported as existent, if it does not exist as
|
| -// an own property of the target object and the target object is not
|
| -// extensible."
|
| -var existent_desc = {value: "yes"};
|
| -handler.getOwnPropertyDescriptor = function() { return existent_desc; };
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "nonexistent")');
|
| -assertEquals(
|
| - {value: "yes", writable: false, enumerable: false, configurable: false},
|
| - Object.getOwnPropertyDescriptor(proxy, "configurable"));
|
| -
|
| -// Checking individual bailout points in the implementation:
|
| -
|
| -// Step 6: Trap is not callable.
|
| -handler.getOwnPropertyDescriptor = {};
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "configurable")');
|
| -
|
| -// Step 8: Trap throws.
|
| -handler.getOwnPropertyDescriptor = function() { throw "ball"; };
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "configurable")');
|
| -
|
| -// Step 9: Trap result is neither undefined nor an object.
|
| -handler.getOwnPropertyDescriptor = function() { return 1; }
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "configurable")');
|
| -
|
| -// Step 11b: See (Inv-1) above.
|
| -// Step 11e: See (Inv-3) above.
|
| -
|
| -// Step 16: Incompatible PropertyDescriptor; a non-configurable property
|
| -// cannot be reported as configurable. (Inv-4) above checks more cases.
|
| -handler.getOwnPropertyDescriptor = function(target, name) {
|
| - return {value: 456, configurable: true, writable: true}
|
| -};
|
| -assertThrows('Object.getOwnPropertyDescriptor(proxy, "nonconfigurable")');
|
| -
|
| -// Step 17: See (Inv-2) above.
|
|
|