From bf859771f0ee7dc7ccf3cfbfdb4194701550a972 Mon Sep 17 00:00:00 2001 From: Caio Lima Date: Fri, 21 Jun 2019 11:42:25 -0300 Subject: [PATCH] Adding case with computed property and simplifying 'own-property.case' --- .../private-getter-is-not-a-own-property.case | 15 ++----- .../private-method-is-not-a-own-property.case | 16 ++----- .../private-setter-is-not-a-own-property.case | 15 ++----- .../private-getter-is-not-a-own-property.js | 15 ++----- .../private-method-is-not-a-own-property.js | 16 ++----- .../private-setter-is-not-a-own-property.js | 15 ++----- ...d-is-not-clobbered-by-computed-property.js | 43 ++++++++++++++++++ .../private-getter-is-not-a-own-property.js | 15 ++----- ...r-is-not-clobbered-by-computed-property.js | 43 ++++++++++++++++++ .../private-method-is-not-a-own-property.js | 16 ++----- ...d-is-not-clobbered-by-computed-property.js | 43 ++++++++++++++++++ .../private-setter-is-not-a-own-property.js | 15 ++----- ...r-is-not-clobbered-by-computed-property.js | 44 +++++++++++++++++++ 13 files changed, 206 insertions(+), 105 deletions(-) create mode 100644 test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js create mode 100644 test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js create mode 100644 test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js create mode 100644 test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js diff --git a/src/class-elements/private-getter-is-not-a-own-property.case b/src/class-elements/private-getter-is-not-a-own-property.case index 293c343ea6..6e68090ee5 100644 --- a/src/class-elements/private-getter-is-not-a-own-property.case +++ b/src/class-elements/private-getter-is-not-a-own-property.case @@ -27,22 +27,15 @@ features: [class-methods-private] get #m() { return "Test262"; } checkPrivateGetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupGetter__("#m"), undefined); assert.sameValue(this.#m, "Test262"); + + return 0; } //- assertions let c = new C(); -c.checkPrivateGetter(); +assert.sameValue(c.checkPrivateGetter(), 0); diff --git a/src/class-elements/private-method-is-not-a-own-property.case b/src/class-elements/private-method-is-not-a-own-property.case index 5f4b54177a..6b7d532e38 100644 --- a/src/class-elements/private-method-is-not-a-own-property.case +++ b/src/class-elements/private-method-is-not-a-own-property.case @@ -20,7 +20,6 @@ info: | c. Let getter be P.[[Get]]. d. Return ? Call(getter, O). template: default -includes: [compareArray.js] features: [class-methods-private] ---*/ @@ -28,22 +27,13 @@ features: [class-methods-private] #m() { return "Test262"; } checkPrivateMethod() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); - assert.sameValue(this.#m(), "Test262"); + + return 0; } //- assertions let c = new C(); -c.checkPrivateMethod(); +assert.sameValue(c.checkPrivateMethod(), 0); diff --git a/src/class-elements/private-setter-is-not-a-own-property.case b/src/class-elements/private-setter-is-not-a-own-property.case index 15d493fc54..8fe838ee86 100644 --- a/src/class-elements/private-setter-is-not-a-own-property.case +++ b/src/class-elements/private-setter-is-not-a-own-property.case @@ -27,23 +27,16 @@ features: [class-methods-private] set #m(v) { this._v = v; } checkPrivateSetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupSetter__("#m"), undefined); this.#m = "Test262"; assert.sameValue(this._v, "Test262"); + + return 0; } //- assertions let c = new C(); -c.checkPrivateSetter(); +assert.sameValue(c.checkPrivateSetter(), 0); diff --git a/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js b/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js index 3b31ded942..8894ea7269 100644 --- a/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js +++ b/test/language/expressions/class/elements/private-getter-is-not-a-own-property.js @@ -30,23 +30,16 @@ var C = class { get #m() { return "Test262"; } checkPrivateGetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupGetter__("#m"), undefined); assert.sameValue(this.#m, "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateGetter(); +assert.sameValue(c.checkPrivateGetter(), 0); diff --git a/test/language/expressions/class/elements/private-method-is-not-a-own-property.js b/test/language/expressions/class/elements/private-method-is-not-a-own-property.js index f494e992b7..2e136213f7 100644 --- a/test/language/expressions/class/elements/private-method-is-not-a-own-property.js +++ b/test/language/expressions/class/elements/private-method-is-not-a-own-property.js @@ -6,7 +6,6 @@ description: Private method is not stored as an own property of objects (field d esid: prod-FieldDefinition features: [class-methods-private, class] flags: [generated] -includes: [compareArray.js] info: | PrivateFieldGet (P, O) 1. Assert: P is a Private Name. @@ -31,23 +30,14 @@ var C = class { #m() { return "Test262"; } checkPrivateMethod() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); - assert.sameValue(this.#m(), "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateMethod(); +assert.sameValue(c.checkPrivateMethod(), 0); diff --git a/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js b/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js index a90dc6dd5a..695c931a94 100644 --- a/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js +++ b/test/language/expressions/class/elements/private-setter-is-not-a-own-property.js @@ -30,24 +30,17 @@ var C = class { set #m(v) { this._v = v; } checkPrivateSetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupSetter__("#m"), undefined); this.#m = "Test262"; assert.sameValue(this._v, "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateSetter(); +assert.sameValue(c.checkPrivateSetter(), 0); diff --git a/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js b/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js new file mode 100644 index 0000000000..7148cde7a3 --- /dev/null +++ b/test/language/statements/class/elements/private-field-is-not-clobbered-by-computed-property.js @@ -0,0 +1,43 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Private field is not clobbered by computed property +esid: sec-privatefieldget +info: | + PrivateFieldGet (P, O) + 1. Assert: P is a Private Name. + 2. If O is not an object, throw a TypeError exception. + 3. If P.[[Kind]] is "field", + a. Let entry be PrivateFieldFind(P, O). + b. If entry is empty, throw a TypeError exception. + c. Return entry.[[PrivateFieldValue]]. + 4. Perform ? PrivateBrandCheck(O, P). + 5. If P.[[Kind]] is "method", + a. Return P.[[Value]]. + 6. Else, + a. Assert: P.[[Kind]] is "accessor". + b. If P does not have a [[Get]] field, throw a TypeError exception. + c. Let getter be P.[[Get]]. + d. Return ? Call(getter, O). +features: [class-fields-public, class-fields-private, class] +---*/ + +class C { + #m = 44; + ["#m"] = this.#m / 11; + + checkPrivateField() { + assert.sameValue(this.hasOwnProperty("#m"), true); + assert.sameValue("#m" in this, true); + + assert.sameValue(this["#m"], 4); + + assert.sameValue(this.#m, 44); + + return 0; + } +} + +let c = new C(); +assert.sameValue(c.checkPrivateField(), 0); diff --git a/test/language/statements/class/elements/private-getter-is-not-a-own-property.js b/test/language/statements/class/elements/private-getter-is-not-a-own-property.js index 5e38c60e5f..03ddc9acfb 100644 --- a/test/language/statements/class/elements/private-getter-is-not-a-own-property.js +++ b/test/language/statements/class/elements/private-getter-is-not-a-own-property.js @@ -30,23 +30,16 @@ class C { get #m() { return "Test262"; } checkPrivateGetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupGetter__("#m"), undefined); assert.sameValue(this.#m, "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateGetter(); +assert.sameValue(c.checkPrivateGetter(), 0); diff --git a/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js b/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js new file mode 100644 index 0000000000..60adabb616 --- /dev/null +++ b/test/language/statements/class/elements/private-getter-is-not-clobbered-by-computed-property.js @@ -0,0 +1,43 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Private getter is not clobbered by computed property +esid: sec-privatefieldget +info: | + PrivateFieldGet (P, O) + 1. Assert: P is a Private Name. + 2. If O is not an object, throw a TypeError exception. + 3. If P.[[Kind]] is "field", + a. Let entry be PrivateFieldFind(P, O). + b. If entry is empty, throw a TypeError exception. + c. Return entry.[[PrivateFieldValue]]. + 4. Perform ? PrivateBrandCheck(O, P). + 5. If P.[[Kind]] is "method", + a. Return P.[[Value]]. + 6. Else, + a. Assert: P.[[Kind]] is "accessor". + b. If P does not have a [[Get]] field, throw a TypeError exception. + c. Let getter be P.[[Get]]. + d. Return ? Call(getter, O). +features: [class-methods-private, class-fields-public, class] +---*/ + +class C { + get #m() { return "Test262"; } + ["#m"] = 0; + + checkPrivateGetter() { + assert.sameValue(this.hasOwnProperty("#m"), true); + assert.sameValue("#m" in this, true); + + assert.sameValue(this["#m"], 0); + + assert.sameValue(this.#m, "Test262"); + + return 0; + } +} + +let c = new C(); +assert.sameValue(c.checkPrivateGetter(), 0); diff --git a/test/language/statements/class/elements/private-method-is-not-a-own-property.js b/test/language/statements/class/elements/private-method-is-not-a-own-property.js index 584f291912..3f4570191e 100644 --- a/test/language/statements/class/elements/private-method-is-not-a-own-property.js +++ b/test/language/statements/class/elements/private-method-is-not-a-own-property.js @@ -6,7 +6,6 @@ description: Private method is not stored as an own property of objects (field d esid: prod-FieldDefinition features: [class-methods-private, class] flags: [generated] -includes: [compareArray.js] info: | PrivateFieldGet (P, O) 1. Assert: P is a Private Name. @@ -31,23 +30,14 @@ class C { #m() { return "Test262"; } checkPrivateMethod() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); - assert.sameValue(this.#m(), "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateMethod(); +assert.sameValue(c.checkPrivateMethod(), 0); diff --git a/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js b/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js new file mode 100644 index 0000000000..a5a0a0cbbe --- /dev/null +++ b/test/language/statements/class/elements/private-method-is-not-clobbered-by-computed-property.js @@ -0,0 +1,43 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Private method is not clobbered by computed property +esid: sec-privatefieldget +info: | + PrivateFieldGet (P, O) + 1. Assert: P is a Private Name. + 2. If O is not an object, throw a TypeError exception. + 3. If P.[[Kind]] is "field", + a. Let entry be PrivateFieldFind(P, O). + b. If entry is empty, throw a TypeError exception. + c. Return entry.[[PrivateFieldValue]]. + 4. Perform ? PrivateBrandCheck(O, P). + 5. If P.[[Kind]] is "method", + a. Return P.[[Value]]. + 6. Else, + a. Assert: P.[[Kind]] is "accessor". + b. If P does not have a [[Get]] field, throw a TypeError exception. + c. Let getter be P.[[Get]]. + d. Return ? Call(getter, O). +features: [class-methods-private, class-fields-public, class] +---*/ + +class C { + #m() { return "Test262"; } + ["#m"] = 0; + + checkPrivateMethod() { + assert.sameValue(this.hasOwnProperty("#m"), true); + assert.sameValue("#m" in this, true); + + assert.sameValue(this["#m"], 0); + + assert.sameValue(this.#m(), "Test262"); + + return 0; + } +} + +let c = new C(); +assert.sameValue(c.checkPrivateMethod(), 0); diff --git a/test/language/statements/class/elements/private-setter-is-not-a-own-property.js b/test/language/statements/class/elements/private-setter-is-not-a-own-property.js index 6e7422d6ab..4b1ad372ec 100644 --- a/test/language/statements/class/elements/private-setter-is-not-a-own-property.js +++ b/test/language/statements/class/elements/private-setter-is-not-a-own-property.js @@ -30,24 +30,17 @@ class C { set #m(v) { this._v = v; } checkPrivateSetter() { - assert.sameValue(Object.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(Reflect.getOwnPropertyDescriptor(this, "#m"), undefined); - assert.sameValue(this.hasOwnProperty("#m"), false); - assert.sameValue(Reflect.has(this, "#m"), false); - - assert.compareArray(Object.getOwnPropertyNames(this), []); - assert.compareArray(Reflect.ownKeys(this), []); - assert.sameValue("#m" in this, false); - const descriptors = Object.getOwnPropertyDescriptors(this); - assert.sameValue("#m" in descriptors, false); + assert.sameValue(this.__lookupSetter__("#m"), undefined); this.#m = "Test262"; assert.sameValue(this._v, "Test262"); + + return 0; } } let c = new C(); -c.checkPrivateSetter(); +assert.sameValue(c.checkPrivateSetter(), 0); diff --git a/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js b/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js new file mode 100644 index 0000000000..d00cc733d1 --- /dev/null +++ b/test/language/statements/class/elements/private-setter-is-not-clobbered-by-computed-property.js @@ -0,0 +1,44 @@ +// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Private setter is not clobbered by computed property +esid: sec-privatefieldget +info: | + PrivateFieldGet (P, O) + 1. Assert: P is a Private Name. + 2. If O is not an object, throw a TypeError exception. + 3. If P.[[Kind]] is "field", + a. Let entry be PrivateFieldFind(P, O). + b. If entry is empty, throw a TypeError exception. + c. Return entry.[[PrivateFieldValue]]. + 4. Perform ? PrivateBrandCheck(O, P). + 5. If P.[[Kind]] is "method", + a. Return P.[[Value]]. + 6. Else, + a. Assert: P.[[Kind]] is "accessor". + b. If P does not have a [[Get]] field, throw a TypeError exception. + c. Let getter be P.[[Get]]. + d. Return ? Call(getter, O). +features: [class-methods-private, class-fields-public, class] +---*/ + +class C { + set #m(v) { this._v = v; } + ["#m"] = 0; + + checkPrivateSetter() { + assert.sameValue(this.hasOwnProperty("#m"), true); + assert.sameValue("#m" in this, true); + + assert.sameValue(this["#m"], 0); + + this.#m = "Test262"; + assert.sameValue(this._v, "Test262"); + + return 0; + } +} + +let c = new C(); +assert.sameValue(c.checkPrivateSetter(), 0);