// 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); }