From bef7f988d2a954c44fb4c8f99e91d9122ef275e3 Mon Sep 17 00:00:00 2001 From: Aleksey Shvayka <shvaikalesh@gmail.com> Date: Fri, 18 Nov 2016 00:26:34 +0200 Subject: [PATCH] Ensure Proxy [[Get]] and [[Set]] pass correct receiver (#792) * Ensure Proxy [[Get]] passes correct receiver * add [[Get]] test for proxy in prototype * diversify how traps are missing * ensure [[Set]] passes correct receiver * rename to match other tests * remove extra tests * add esid * add description --- .../Proxy/get/trap-is-undefined-receiver.js | 25 +++++++++++++++++ .../Proxy/set/trap-is-undefined-receiver.js | 28 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 test/built-ins/Proxy/get/trap-is-undefined-receiver.js create mode 100644 test/built-ins/Proxy/set/trap-is-undefined-receiver.js diff --git a/test/built-ins/Proxy/get/trap-is-undefined-receiver.js b/test/built-ins/Proxy/get/trap-is-undefined-receiver.js new file mode 100644 index 0000000000..8a0a44502f --- /dev/null +++ b/test/built-ins/Proxy/get/trap-is-undefined-receiver.js @@ -0,0 +1,25 @@ +// Copyright (C) 2016 Aleksey Shvayka. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.8 +esid: sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver +description: > + Pass to target's [[Get]] correct receiver if trap is missing +info: > + [[Get]] (P, Receiver) + + 7. If trap is undefined, then + a. Return ? target.[[Get]](P, Receiver). +---*/ + +var target = { + get attr() { + return this; + } +}; + +var p = new Proxy(target, { get: null }); +assert.sameValue(p.attr, p); + +var pParent = Object.create(new Proxy(target, {})); +assert.sameValue(pParent.attr, pParent); diff --git a/test/built-ins/Proxy/set/trap-is-undefined-receiver.js b/test/built-ins/Proxy/set/trap-is-undefined-receiver.js new file mode 100644 index 0000000000..a82fcdb191 --- /dev/null +++ b/test/built-ins/Proxy/set/trap-is-undefined-receiver.js @@ -0,0 +1,28 @@ +// Copyright (C) 2016 Aleksey Shvayka. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 9.5.9 +esid: sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver +description: > + Pass to target's [[Set]] correct receiver if trap is missing +info: > + [[Set]] (P, V, Receiver) + + 7. If trap is undefined, then + a. Return ? target.[[Set]](P, V, Receiver). +---*/ + +var context; +var target = { + set attr(val) { + context = this; + } +}; + +var p = new Proxy(target, { set: null }); +p.attr = 1; +assert.sameValue(context, p); + +var pParent = Object.create(new Proxy(target, {})); +pParent.attr = 3; +assert.sameValue(context, pParent); -- GitLab