| // Map constructor behaviors. |
| |
| if (typeof Map !== 'function') |
| throw "Error: bad value" + typeof Map; |
| |
| function testCallTypeError(item) { |
| var error = null; |
| try { |
| var map = Map(item); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw "Error: error not thrown"; |
| if (String(error) !== "TypeError: calling Map constructor without new is invalid") |
| throw "Error: bad error " + String(error); |
| } |
| |
| var pass = [ |
| [ null, 0 ], |
| [ undefined, 0 ], |
| [ [], 0 ], |
| [ new Set(), 0], |
| [ new Map(), 0], |
| [ "", 0], |
| |
| [ |
| [ |
| [0, 1], |
| [1, 2], |
| [1, 3], |
| ], |
| 2 |
| ], |
| |
| [ |
| [ |
| [1, 1], |
| [1, 2], |
| [1, 3], |
| ], |
| 1 |
| ], |
| |
| [ |
| new Map([ |
| { 0: 'C', 1: 'O' }, |
| { 0: 'C', 1: 'K' }, |
| { 0: 'V', 1: 'K' }, |
| ]), |
| 2 |
| ], |
| |
| [ |
| new Map([ |
| [0, 1], |
| [1, 2], |
| [1, 3], |
| ]), |
| 2 |
| ], |
| |
| [ |
| new Map([ |
| [1, 1], |
| [1, 2], |
| [1, 3], |
| ]), |
| 1 |
| ], |
| |
| [ |
| new Map([ |
| { 0: 'C', 1: 'O' }, |
| { 0: 'C', 1: 'K' }, |
| { 0: 'V', 1: 'K' }, |
| ]), |
| 2 |
| ], |
| ]; |
| |
| for (var pair of pass) { |
| var map = new Map(pair[0]); |
| if (map.size !== pair[1]) |
| throw "Error: bad map size " + map.size; |
| testCallTypeError(pair[0]); |
| } |
| |
| function testTypeError(item) { |
| var error = null; |
| try { |
| var map = new Map(item); |
| } catch (e) { |
| error = e; |
| } |
| if (!error) |
| throw "Error: error not thrown"; |
| if (String(error) !== "TypeError: Type error") |
| throw "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 notContainNextItem = [ |
| "Cocoa", |
| [0, 1, 2, 3, 4], |
| [0, 0, 0, 1, 0], |
| ["A", "B", "A"], |
| new String("cocoa"), |
| new String("Cocoa"), |
| new Set([0,1,2,3,4]), |
| new Set([1,1,1,1]), |
| ]; |
| |
| for (var item of notContainNextItem) { |
| testTypeError(item); |
| testCallTypeError(item); |
| } |