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