X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/weak-map-constructor.js diff --git a/tests/stress/weak-map-constructor.js b/tests/stress/weak-map-constructor.js new file mode 100644 index 0000000..3f26053 --- /dev/null +++ b/tests/stress/weak-map-constructor.js @@ -0,0 +1,144 @@ +// WeakMap constructor behaviors. + +if (typeof WeakMap !== 'function') + throw "Error: bad value" + typeof WeakMap; + +function testCallTypeError(item) { + var error = null; + try { + var map = WeakMap(item); + } catch (e) { + error = e; + } + if (!error) + throw "Error: error not thrown"; + if (String(error) !== "TypeError: WeakMap cannot be called as a function") + throw "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, 1], + [obj2, 2], + [obj3, 3], + ], + + [ + [obj1, 1], + [obj1, 2], + [obj1, 3], + ], + + [ + { 0: obj2, 1: 'O' }, + { 0: obj3, 1: 'K' }, + { 0: obj4, 1: 'K' }, + ], + + new Map([ + [obj1, 1], + [obj2, 2], + [obj3, 3], + ]), + + new Map([ + [obj1, 1], + [obj1, 2], + [obj1, 3], + ]), + + new Map([ + { 0: obj2, 1: 'O' }, + { 0: obj3, 1: 'K' }, + { 0: obj4, 1: 'K' }, + ]), +]; + +for (var value of pass) { + var map = new WeakMap(value); + testCallTypeError(value); +} + +function testTypeError(item, message) { + var error = null; + try { + var map = new WeakMap(item); + } catch (e) { + error = e; + } + if (!error) + throw "Error: error not thrown"; + if (!message) + message = "TypeError: Type error"; + if (String(error) !== message) + 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); +} + +var nonObjectKeys = [ + [ + [0, 1], + [1, 2], + [1, 3], + ], + + [ + [1, 1], + [1, 2], + [1, 3], + ], + + [ + { 0: 'C', 1: 'O' }, + { 0: 'C', 1: 'K' }, + { 0: 'V', 1: 'K' }, + ], +]; + +for (var item of nonObjectKeys) { + testTypeError(item, 'TypeError: Attempted to set a non-object key in a WeakMap'); + testCallTypeError(item); +}