From 1394a4f33e1aefa6df7d034bc0f2a8dfd5f8ae62 Mon Sep 17 00:00:00 2001 From: Alexey Shvayka Date: Sun, 19 Apr 2020 00:05:38 +0300 Subject: [PATCH] Fix Proxy tests --- .../built-ins/Proxy/get-fn-realm-recursive.js | 62 ++++++++++++++----- test/built-ins/Proxy/get-fn-realm.js | 57 ++++++++++++----- 2 files changed, 88 insertions(+), 31 deletions(-) diff --git a/test/built-ins/Proxy/get-fn-realm-recursive.js b/test/built-ins/Proxy/get-fn-realm-recursive.js index 488e13a936..c6fadef7e7 100644 --- a/test/built-ins/Proxy/get-fn-realm-recursive.js +++ b/test/built-ins/Proxy/get-fn-realm-recursive.js @@ -3,25 +3,55 @@ /*--- esid: sec-getfunctionrealm description: > - The realm of a proxy exotic object is the realm of its target function. - GetFunctionRealm is called recursively. + The realm of a Proxy exotic object is the realm of its target function. + GetFunctionRealm is called recursively. info: | - 7.3.22 GetFunctionRealm ( obj ) + Boolean ( value ) + [...] + 3. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] »). + [...] + 5. Return O. + + OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] ) + + [...] + 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto). + 3. Return OrdinaryObjectCreate(proto, internalSlotsList). + + GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto ) + + [...] + 3. Let proto be ? Get(constructor, "prototype"). + 4. If Type(proto) is not Object, then + a. Let realm be ? GetFunctionRealm(constructor). + b. Set proto to realm's intrinsic object named intrinsicDefaultProto. + 5. Return proto. + + GetFunctionRealm ( obj ) + + [...] + 2. If obj has a [[Realm]] internal slot, then + a. Return obj.[[Realm]]. + [...] + 4. If obj is a Proxy exotic object, then [...] - 2. If obj has a [[Realm]] internal slot, then - a. Return obj.[[Realm]]. - [...] - 4. If obj is a Proxy exotic object, then - a. If obj.[[ProxyHandler]] is null, throw a TypeError exception. - b. Let proxyTarget be obj.[[ProxyTarget]]. - c. Return ? GetFunctionRealm(proxyTarget). -features: [cross-realm, Proxy] + b. Let proxyTarget be obj.[[ProxyTarget]]. + c. Return ? GetFunctionRealm(proxyTarget). +features: [cross-realm, Reflect, Proxy] ---*/ -var other = $262.createRealm().global; -var C = new other.Function(); -C.prototype = null; -var P = new Proxy(new Proxy(C, {}), {}); +var realm1 = $262.createRealm().global; +var realm2 = $262.createRealm().global; +var realm3 = $262.createRealm().global; +var realm4 = $262.createRealm().global; -assert.sameValue(Object.getPrototypeOf(new P()), other.Object.prototype); +var newTarget = new realm1.Function(); +newTarget.prototype = null; + +var newTargetProxy = new realm2.Proxy(newTarget, {}); +var newTargetProxyProxy = new realm3.Proxy(newTargetProxy, {}); +var boolean = Reflect.construct(realm4.Boolean, [], newTargetProxyProxy); + +assert(boolean instanceof realm1.Boolean); +assert.sameValue(Object.getPrototypeOf(boolean), realm1.Boolean.prototype); diff --git a/test/built-ins/Proxy/get-fn-realm.js b/test/built-ins/Proxy/get-fn-realm.js index a6f1b45e69..477846e262 100644 --- a/test/built-ins/Proxy/get-fn-realm.js +++ b/test/built-ins/Proxy/get-fn-realm.js @@ -3,24 +3,51 @@ /*--- esid: sec-getfunctionrealm description: > - The realm of a proxy exotic object is the realm of its target function + The realm of a Proxy exotic object is the realm of its target function. info: | - 7.3.22 GetFunctionRealm ( obj ) + Array ( ) + [...] + 4. Let proto be ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%"). + 5. Return ! ArrayCreate(0, proto). + + OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] ) + + [...] + 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto). + 3. Return OrdinaryObjectCreate(proto, internalSlotsList). + + GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto ) + + [...] + 3. Let proto be ? Get(constructor, "prototype"). + 4. If Type(proto) is not Object, then + a. Let realm be ? GetFunctionRealm(constructor). + b. Set proto to realm's intrinsic object named intrinsicDefaultProto. + 5. Return proto. + + GetFunctionRealm ( obj ) + + [...] + 2. If obj has a [[Realm]] internal slot, then + a. Return obj.[[Realm]]. + [...] + 4. If obj is a Proxy exotic object, then [...] - 2. If obj has a [[Realm]] internal slot, then - a. Return obj.[[Realm]]. - [...] - 4. If obj is a Proxy exotic object, then - a. If obj.[[ProxyHandler]] is null, throw a TypeError exception. - b. Let proxyTarget be obj.[[ProxyTarget]]. - c. Return ? GetFunctionRealm(proxyTarget). -features: [cross-realm, Proxy] + b. Let proxyTarget be obj.[[ProxyTarget]]. + c. Return ? GetFunctionRealm(proxyTarget). +features: [cross-realm, Reflect, Proxy] ---*/ -var other = $262.createRealm().global; -var C = new other.Function(); -C.prototype = null; -var P = new Proxy(C, {}); +var realm1 = $262.createRealm().global; +var realm2 = $262.createRealm().global; +var realm3 = $262.createRealm().global; -assert.sameValue(Object.getPrototypeOf(new P()), other.Object.prototype); +var newTarget = new realm1.Function(); +newTarget.prototype = false; + +var newTargetProxy = new realm2.Proxy(newTarget, {}); +var array = Reflect.construct(realm3.Array, [], newTargetProxy); + +assert(array instanceof realm1.Array); +assert.sameValue(Object.getPrototypeOf(array), realm1.Array.prototype);