blob: 0b5d3f1df4f0a8f42b425fd0ad05e01c1a2f82db [file] [log] [blame]
description("Tests for Array.of");
shouldBe("Array.of.length", "0");
shouldBe("Array.of.name", "'of'");
shouldBe("Array.of(1)", "[1]");
shouldBe("Array.of(1, 2)", "[1, 2]");
shouldBe("Array.of(1, 2, 3)", "[1, 2, 3]");
shouldBe("Array.of()", "[]");
shouldBe("Array.of(undefined)", "[undefined]");
shouldBe("Array.of('hello')", "['hello']");
debug("Construct nested Array with Array.of(Array.of(1, 2, 3), Array.of(4, 5, 6, 7, 8)).");
var x = Array.of(Array.of(1, 2, 3), Array.of(4, 5, 6, 7, 8));
shouldBe("x.length", "2");
shouldBe("x[0].length", "3");
shouldBe("x[1].length", "5");
debug("Check that a setter isn't called.");
Array.prototype.__defineSetter__("0", function (value) {
throw new Error("This should not be called.");
});
shouldNotThrow("Array.of(1, 2, 3)");
debug("\"this\" is a constructor");
var Foo = function FooBar(length) { this.givenLength = length; };
shouldBeTrue("Array.of.call(Foo, 'a', 'b', 'c') instanceof Foo");
shouldBe("Array.of.call(Foo, 'a', 'b', 'c').givenLength", "3");
shouldBe("var foo = Array.of.call(Foo, 'a', 'b', 'c'); [foo.length, foo[0], foo[1], foo[2]]", "[3, 'a', 'b', 'c']");
debug("\"this\" is not a constructor");
var nonConstructorWasCalled = false;
var nonConstructor = () => { nonConstructorWasCalled = true; };
shouldBe("Array.of.call(nonConstructor, Foo).constructor", "Array");
shouldBe("Object.getPrototypeOf(Array.of.call(nonConstructor, Foo))", "Array.prototype");
shouldBe("Array.of.call(nonConstructor, Foo).length", "1");
shouldBe("Array.of.call(nonConstructor, Foo)[0]", "Foo");
shouldBeFalse("nonConstructorWasCalled");