| /* Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ */ |
| |
| var symbols = [ |
| Symbol(), |
| Symbol("one"), |
| Symbol.for("two"), |
| Symbol.iterator, |
| Object(Symbol()) |
| ]; |
| |
| for (var sym of symbols) { |
| var obj = {}; |
| |
| // access a nonexistent property |
| assertEq(sym in obj, false); |
| assertEq(obj.hasOwnProperty(sym), false); |
| assertEq(obj[sym], undefined); |
| assertEq(typeof obj[sym], "undefined"); |
| assertEq(Object.getOwnPropertyDescriptor(obj, sym), undefined); |
| |
| // assign, then try accessing again |
| obj[sym] = "ok"; |
| assertEq(sym in obj, true); |
| assertEq(obj.hasOwnProperty(sym), true); |
| assertEq(obj[sym], "ok"); |
| assertDeepEq(Object.getOwnPropertyDescriptor(obj, sym), { |
| value: "ok", |
| writable: true, |
| enumerable: true, |
| configurable: true |
| }); |
| |
| // assign again, observe value is overwritten |
| obj[sym] = 12; |
| assertEq(obj[sym], 12); |
| |
| // increment |
| assertEq(obj[sym]++, 12); |
| assertEq(obj[sym], 13); |
| } |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0, 0); |