| /* Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ */ |
| |
| // Symbols can be shared across realms. |
| |
| if (typeof Reflect !== "undefined" && typeof Reflect.Realm === "function") { |
| throw new Error("Congratulations on implementing Reflect.Realm! " + |
| "Please update this test to use it."); |
| } |
| if (typeof newGlobal === "function") { |
| var g = newGlobal(); |
| var gj = g.eval("jones = Symbol('jones')"); |
| assertEq(typeof gj, "symbol"); |
| assertEq(g.jones, g.jones); |
| assertEq(gj, g.jones); |
| assertEq(gj !== Symbol("jones"), true); |
| |
| // A symbol can be round-tripped to another realm and back; |
| // the result is the original symbol. |
| var smith = Symbol("smith"); |
| g.smith = smith; // put smith into the realm |
| assertEq(g.smith, smith); // pull it back out |
| |
| // Spot-check that non-generic methods can be applied to symbols and Symbol |
| // objects from other realms. |
| assertEq(Symbol.prototype.toString.call(gj), "Symbol(jones)"); |
| assertEq(Symbol.prototype.toString.call(g.eval("Object(Symbol('brown'))")), |
| "Symbol(brown)"); |
| |
| // Symbol.for functions share a symbol registry across all realms. |
| assertEq(g.Symbol.for("ponies"), Symbol.for("ponies")); |
| assertEq(g.eval("Symbol.for('rainbows')"), Symbol.for("rainbows")); |
| } |
| |
| if (typeof reportCompare === "function") |
| reportCompare(0, 0); |