]>
Commit | Line | Data |
---|---|---|
ed1e77d3 A |
1 | // WeakSet constructor behaviors. |
2 | ||
3 | if (typeof WeakSet !== 'function') | |
4 | throw new Error("bad value" + typeof WeakSet); | |
5 | ||
6 | function testCallTypeError(item) { | |
7 | var error = null; | |
8 | try { | |
9 | var set = WeakSet(item); | |
10 | } catch (e) { | |
11 | error = e; | |
12 | } | |
13 | if (!error) | |
14 | throw new Error("error not thrown"); | |
15 | if (String(error) !== "TypeError: WeakSet cannot be called as a function") | |
16 | throw new Error("bad error " + String(error)); | |
17 | } | |
18 | var obj1 = {}; | |
19 | var obj2 = []; | |
20 | var obj3 = new Date(); | |
21 | var obj4 = new Error(); | |
22 | ||
23 | var pass = [ | |
24 | null, | |
25 | undefined, | |
26 | [], | |
27 | new Set(), | |
28 | new Map(), | |
29 | "", | |
30 | ||
31 | [ | |
32 | obj1, | |
33 | obj2, | |
34 | obj3, | |
35 | ], | |
36 | ||
37 | [ | |
38 | obj1, | |
39 | obj1, | |
40 | obj1, | |
41 | ], | |
42 | ||
43 | [ | |
44 | obj2, | |
45 | obj3, | |
46 | obj4, | |
47 | ], | |
48 | ||
49 | new Map([ | |
50 | [obj1, 1], | |
51 | [obj2, 2], | |
52 | [obj3, 3], | |
53 | ]), | |
54 | ||
55 | new Map([ | |
56 | [obj1, 1], | |
57 | [obj1, 2], | |
58 | [obj1, 3], | |
59 | ]), | |
60 | ||
61 | new Set([ | |
62 | obj1, | |
63 | obj2, | |
64 | obj3, | |
65 | ]), | |
66 | ||
67 | new Set([ | |
68 | obj1, | |
69 | obj1, | |
70 | obj1, | |
71 | ]), | |
72 | ||
73 | new Map([ | |
74 | { 0: obj2, 1: 'O' }, | |
75 | { 0: obj3, 1: 'K' }, | |
76 | { 0: obj4, 1: 'K' }, | |
77 | ]), | |
78 | ||
79 | new Set([ | |
80 | obj2, | |
81 | obj3, | |
82 | obj4, | |
83 | ]) | |
84 | ]; | |
85 | ||
86 | for (var value of pass) { | |
87 | var set = new WeakSet(value); | |
88 | testCallTypeError(value); | |
89 | } | |
90 | ||
91 | function testTypeError(item, message) { | |
92 | var error = null; | |
93 | try { | |
94 | var set = new WeakSet(item); | |
95 | } catch (e) { | |
96 | error = e; | |
97 | } | |
98 | if (!error) | |
99 | throw new Error("error not thrown"); | |
100 | if (!message) | |
101 | message = "TypeError: Type error"; | |
102 | if (String(error) !== message) | |
103 | throw new Error("bad error " + String(error)); | |
104 | } | |
105 | ||
106 | var nonIterable = [ | |
107 | 42, | |
108 | Symbol("Cappuccino"), | |
109 | true, | |
110 | false, | |
111 | {}, | |
112 | new Date(), | |
113 | new Error(), | |
114 | Object(Symbol("Matcha")), | |
115 | (function () { }), | |
116 | ]; | |
117 | ||
118 | for (var item of nonIterable) { | |
119 | testTypeError(item); | |
120 | testCallTypeError(item); | |
121 | } | |
122 | ||
123 | var nonObjectKeys = [ | |
124 | [ | |
125 | 0, | |
126 | 1, | |
127 | 1, | |
128 | ], | |
129 | ||
130 | [ | |
131 | 1, | |
132 | 1, | |
133 | 1, | |
134 | ], | |
135 | ||
136 | [ | |
137 | 'C', | |
138 | 'C', | |
139 | 'V', | |
140 | ], | |
141 | ]; | |
142 | ||
143 | for (var item of nonObjectKeys) { | |
144 | testTypeError(item, 'TypeError: Attempted to add a non-object key to a WeakSet'); | |
145 | testCallTypeError(item); | |
146 | } |