diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/non262/Record/property-descriptors.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/Record/property-descriptors.js')
-rw-r--r-- | js/src/tests/non262/Record/property-descriptors.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/js/src/tests/non262/Record/property-descriptors.js b/js/src/tests/non262/Record/property-descriptors.js new file mode 100644 index 0000000000..fea6187536 --- /dev/null +++ b/js/src/tests/non262/Record/property-descriptors.js @@ -0,0 +1,89 @@ +// |reftest| skip-if(!this.hasOwnProperty("Record")) + +var rec = Record({ x: 1, y: 2, a: 3 }); + +var desc = Object.getOwnPropertyDescriptor(rec, "x"); +assertEq(desc.value, 1); +assertEq(desc.writable, false); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); + +assertEq(Object.getOwnPropertyDescriptor(rec, "z"), undefined); + +var recO = Object(rec); + +assertThrowsInstanceOf( + () => Object.defineProperty(rec, "x", { value: 1 }), + TypeError, + "#{ \"a\": 3, \"x\": 1, \"y\": 2 } is not a non-null object" +); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, "b", {}), + TypeError, + "can't define property \"b\": Record is not extensible" +); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, Symbol(), {}), + TypeError, + "can't define property \"b\": Record is not extensible" +); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, "x", { value: 2 }), + TypeError, + '"x" is read-only' +); + +Object.defineProperty(recO, "x", { value: 1 }); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, "x", { value: 2, writable: true }), + TypeError, + 'Invalid record property descriptor' +); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, "x", { value: 2, enumerable: false }), + TypeError, + 'Invalid record property descriptor' +); + +assertThrowsInstanceOf( + () => Object.defineProperty(recO, "x", { value: 2, configurable: true }), + TypeError, + 'Invalid record property descriptor' +); + +assertEq(Object.prototype.propertyIsEnumerable.call(rec, "x"), true); +assertEq(Object.prototype.propertyIsEnumerable.call(rec, "x"), true); +assertEq(Object.prototype.propertyIsEnumerable.call(rec, "w"), false); +assertEq(Object.prototype.propertyIsEnumerable.call(rec, "w"), false); +assertEq(Object.prototype.propertyIsEnumerable.call(recO, "x"), true); +assertEq(Object.prototype.propertyIsEnumerable.call(recO, "x"), true); +assertEq(Object.prototype.propertyIsEnumerable.call(recO, "w"), false); +assertEq(Object.prototype.propertyIsEnumerable.call(recO, "w"), false); + +assertEq(Object.prototype.hasOwnProperty.call(rec, "x"), true); +assertEq(Object.prototype.hasOwnProperty.call(rec, "x"), true); +assertEq(Object.prototype.hasOwnProperty.call(rec, "w"), false); +assertEq(Object.prototype.hasOwnProperty.call(rec, "w"), false); +assertEq(Object.prototype.hasOwnProperty.call(recO, "x"), true); +assertEq(Object.prototype.hasOwnProperty.call(recO, "x"), true); +assertEq(Object.prototype.hasOwnProperty.call(recO, "w"), false); +assertEq(Object.prototype.hasOwnProperty.call(recO, "w"), false); + +assertEq("x" in recO, true); +assertEq("w" in recO, false); + +assertEq(delete rec.x, false); +assertEq(delete rec.x, false); +assertEq(delete rec.w, true); +assertEq(delete rec.w, true); +assertEq(delete recO.x, false); +assertEq(delete recO.x, false); +assertEq(delete recO.w, true); +assertEq(delete recO.w, true); + +if (typeof reportCompare === "function") reportCompare(0, 0); |