| // WeakSet constructor behaviors. |
| |
| if (typeof WeakSet !== 'function') |
| throw new Error("bad value" + typeof WeakSet); |
| |
| function testCallTypeError(item) { |
| var error = null; |
| try { |
| var set = WeakSet(item); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw new Error("error not thrown"); |
| if (String(error) !== "TypeError: calling WeakSet constructor without new is invalid") |
| throw new Error("bad error " + String(error)); |
| } |
| var obj1 = {}; |
| var obj2 = []; |
| var obj3 = new Date(); |
| var obj4 = new Error(); |
| |
| var pass = [ |
| null, |
| undefined, |
| [], |
| new Set(), |
| new Map(), |
| "", |
| |
| [ |
| obj1, |
| obj2, |
| obj3, |
| ], |
| |
| [ |
| obj1, |
| obj1, |
| obj1, |
| ], |
| |
| [ |
| obj2, |
| obj3, |
| obj4, |
| ], |
| |
| new Map([ |
| [obj1, 1], |
| [obj2, 2], |
| [obj3, 3], |
| ]), |
| |
| new Map([ |
| [obj1, 1], |
| [obj1, 2], |
| [obj1, 3], |
| ]), |
| |
| new Set([ |
| obj1, |
| obj2, |
| obj3, |
| ]), |
| |
| new Set([ |
| obj1, |
| obj1, |
| obj1, |
| ]), |
| |
| new Map([ |
| { 0: obj2, 1: 'O' }, |
| { 0: obj3, 1: 'K' }, |
| { 0: obj4, 1: 'K' }, |
| ]), |
| |
| new Set([ |
| obj2, |
| obj3, |
| obj4, |
| ]) |
| ]; |
| |
| for (var value of pass) { |
| var set = new WeakSet(value); |
| testCallTypeError(value); |
| } |
| |
| function testTypeError(item, message) { |
| var error = null; |
| try { |
| var set = new WeakSet(item); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw new Error("error not thrown"); |
| if (!message) |
| message = "TypeError: Type error"; |
| if (String(error) !== message) |
| throw new Error("bad error " + String(error)); |
| } |
| |
| var nonIterable = [ |
| 42, |
| Symbol("Cappuccino"), |
| true, |
| false, |
| {}, |
| new Date(), |
| new Error(), |
| Object(Symbol("Matcha")), |
| (function () { }), |
| ]; |
| |
| for (var item of nonIterable) { |
| testTypeError(item); |
| testCallTypeError(item); |
| } |
| |
| var nonObjectKeys = [ |
| [ |
| 0, |
| 1, |
| 1, |
| ], |
| |
| [ |
| 1, |
| 1, |
| 1, |
| ], |
| |
| [ |
| 'C', |
| 'C', |
| 'V', |
| ], |
| ]; |
| |
| for (var item of nonObjectKeys) { |
| testTypeError(item, 'TypeError: Attempted to add a non-object key to a WeakSet'); |
| testCallTypeError(item); |
| } |