| /* Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ */ |
| |
| // Symbols follow all other property keys in the result list. |
| var log; |
| function LoggingProxy() { |
| return new Proxy({}, { |
| defineProperty: (t, key, desc) => { |
| log.push(key); |
| return true; |
| } |
| }); |
| } |
| |
| var keys = [ |
| "before", |
| Symbol(), |
| "during", |
| Symbol.for("during"), |
| Symbol.iterator, |
| "after" |
| ]; |
| var descs = {}; |
| for (var k of keys) |
| descs[k] = {configurable: true, value: 0}; |
| |
| function test(descsObj) { |
| log = []; |
| Object.defineProperties(LoggingProxy(), descs); |
| assertEq(log.length, keys.length); |
| assertDeepEq(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]); |
| for (var key of keys) |
| assertEq(log.indexOf(key) !== -1, true); |
| } |
| |
| test(descs); |
| test(new Proxy(descs, {})); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0, 0); |