]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/weak-set-constructor.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / 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 (file)
index 0000000..dbb7985
--- /dev/null
@@ -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);
+}