X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/weak-set-constructor.js diff --git a/tests/stress/weak-set-constructor.js b/tests/stress/weak-set-constructor.js new file mode 100644 index 0000000..dbb7985 --- /dev/null +++ b/tests/stress/weak-set-constructor.js @@ -0,0 +1,146 @@ +// 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: WeakSet cannot be called as a function") + 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); +}