| Index: test/mjsunit/harmony/proxies-set-prototype-of.js
|
| diff --git a/test/mjsunit/harmony/proxies-set-prototype-of.js b/test/mjsunit/harmony/proxies-set-prototype-of.js
|
| deleted file mode 100644
|
| index 810c219533996fd6ab6e324f8e7072bd27a1deaf..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/harmony/proxies-set-prototype-of.js
|
| +++ /dev/null
|
| @@ -1,130 +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 --harmony-reflect
|
| -
|
| -var target = { target: 1 };
|
| -target.__proto__ = {};
|
| -var handler = { handler: 1 };
|
| -var proxy = new Proxy(target, handler);
|
| -
|
| -assertSame(Object.getPrototypeOf(proxy), target.__proto__ );
|
| -
|
| -
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, undefined) }, TypeError);
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, 1) }, TypeError);
|
| -
|
| -var prototype = [1];
|
| -assertSame(proxy, Object.setPrototypeOf(proxy, prototype));
|
| -assertSame(prototype, Object.getPrototypeOf(proxy));
|
| -assertSame(prototype, Object.getPrototypeOf(target));
|
| -
|
| -var pair = Proxy.revocable(target, handler);
|
| -assertSame(pair.proxy, Object.setPrototypeOf(pair.proxy, prototype));
|
| -assertSame(prototype, Object.getPrototypeOf(pair.proxy));
|
| -pair.revoke();
|
| -assertThrows('Object.setPrototypeOf(pair.proxy, prototype)', TypeError);
|
| -
|
| -handler.setPrototypeOf = function(target, proto) {
|
| - return false;
|
| -};
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, {a:1}) }, TypeError);
|
| -
|
| -handler.setPrototypeOf = function(target, proto) {
|
| - return undefined;
|
| -};
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, {a:2}) }, TypeError);
|
| -
|
| -handler.setPrototypeOf = function(proto) {};
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, {a:3}) }, TypeError);
|
| -
|
| -handler.setPrototypeOf = function(target, proto) {
|
| - throw Error();
|
| -};
|
| -assertThrows(function() { Object.setPrototypeOf(proxy, {a:4}) }, Error);
|
| -
|
| -var seen_prototype;
|
| -var seen_target;
|
| -handler.setPrototypeOf = function(target, proto) {
|
| - seen_target = target;
|
| - seen_prototype = proto;
|
| - return true;
|
| -}
|
| -assertSame(Object.setPrototypeOf(proxy, {a:5}), proxy);
|
| -assertSame(target, seen_target);
|
| -assertEquals({a:5}, seen_prototype);
|
| -
|
| -(function setPrototypeProxyTarget() {
|
| - var target = { target: 1 };
|
| - target.__proto__ = {};
|
| - var handler = {};
|
| - var handler2 = {};
|
| - var target2 = new Proxy(target, handler2);
|
| - var proxy2 = new Proxy(target2, handler);
|
| - assertSame(Object.getPrototypeOf(proxy2), target.__proto__ );
|
| -
|
| - var prototype = [2,3];
|
| - assertSame(proxy2, Object.setPrototypeOf(proxy2, prototype));
|
| - assertSame(prototype, Object.getPrototypeOf(proxy2));
|
| - assertSame(prototype, Object.getPrototypeOf(target));
|
| -})();
|
| -
|
| -(function testProxyTrapInconsistent() {
|
| - var target = { target: 1 };
|
| - target.__proto__ = {};
|
| - var handler = {};
|
| - var handler2 = {
|
| - };
|
| -
|
| - var target2 = new Proxy(target, handler);
|
| - var proxy2 = new Proxy(target2, handler2);
|
| -
|
| - // If the final target is extensible we can set any prototype.
|
| - var prototype = [1];
|
| - Reflect.setPrototypeOf(proxy2, prototype);
|
| - assertSame(prototype, Reflect.getPrototypeOf(target));
|
| -
|
| - handler2.setPrototypeOf = function(target, value) {
|
| - Reflect.setPrototypeOf(target, value);
|
| - return true;
|
| - };
|
| - prototype = [2];
|
| - Reflect.setPrototypeOf(proxy2, prototype);
|
| - assertSame(prototype, Reflect.getPrototypeOf(target));
|
| -
|
| - // Prevent getting the target's prototype used to check the invariant.
|
| - var gotPrototype = false;
|
| - handler.getPrototypeOf = function() {
|
| - gotPrototype = true;
|
| - throw TypeError()
|
| - };
|
| - // If the target is extensible we do not check the invariant.
|
| - prototype = [3];
|
| - Reflect.setPrototypeOf(proxy2, prototype);
|
| - assertFalse(gotPrototype);
|
| - assertSame(prototype, Reflect.getPrototypeOf(target));
|
| -
|
| - // Changing the prototype of a non-extensible target will trigger the
|
| - // invariant-check and throw in the above handler.
|
| - Reflect.preventExtensions(target);
|
| - assertThrows(() => {Reflect.setPrototypeOf(proxy2, [4])}, TypeError);
|
| - assertTrue(gotPrototype);
|
| - assertEquals([3], Reflect.getPrototypeOf(target));
|
| -
|
| - // Setting the prototype of a non-extensible target is fine if the prototype
|
| - // doesn't change.
|
| - delete handler.getPrototypeOf;
|
| - Reflect.setPrototypeOf(proxy2, prototype);
|
| - // Changing the prototype will throw.
|
| - prototype = [5];
|
| - assertThrows(() => {Reflect.setPrototypeOf(proxy2, prototype)}, TypeError);
|
| -})();
|
| -
|
| -(function testProxyTrapReturnsFalse() {
|
| - var handler = {};
|
| - handler.setPrototypeOf = () => false;
|
| - var target = new Proxy({}, {isExtensible: () => assertUnreachable()});
|
| - var object = new Proxy(target, handler);
|
| - assertFalse(Reflect.setPrototypeOf(object, {}));
|
| -})();
|
|
|