blob: 37c243b0dafea52d38fd35a07f7e054cc348ab0d [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
let suite = InspectorTest.createSyncSuite("Set");
suite.addTestCase({
name: "Set.prototype.find",
test() {
let set = new Set(["a", "b"]);
InspectorTest.expectEqual(set.find((item) => item === "b"), "b", "Set can find a item it holds.");
InspectorTest.expectEqual(set.find((item) => typeof item === "string"), "a", "Set finds the first item if the given predicate matches multiple items.");
InspectorTest.expectEqual(set.find((item) => typeof item === "number"), undefined, "Set returns 'undefined' when attempting to find an item if the given predicate doesn't match anything.");
},
});
suite.addTestCase({
name: "Set.prototype.pushAll",
test() {
function test(iterable) {
let set = new Set([1, 2]);
function stringify(object)
{
let string = JSON.stringify(Array.from(object), function(key, value) {
if (value instanceof Node)
return "<" + value.localName + ">";
return value;
});
return string.replace(/"(<[^>]*>)"/g, "$1");
}
let before = stringify(set);
set.addAll(iterable);
let after = stringify(set);
InspectorTest.log(before + " => " + after);
}
InspectorTest.log("Array:");
test(["a1", "a2"]);
InspectorTest.newline();
InspectorTest.log("Set:");
const set = new Set(["s1", "s2"]);
test(set);
test(set.entries());
test(set.keys());
test(set.values());
InspectorTest.newline();
InspectorTest.log("Map:");
const map = new Map([["m1k", "m1v"], ["m2k", "m2v"]]);
test(map);
test(map.entries());
test(map.keys());
test(map.values());
InspectorTest.newline();
InspectorTest.log("Object:");
const object = {
o1k: "o1v",
o2k: "o2v",
};
test(Object.entries(object));
test(Object.keys(object));
test(Object.values(object));
InspectorTest.newline();
InspectorTest.log("Generator:");
function* generator() {
yield "g1";
yield "g2";
}
test(generator());
InspectorTest.newline();
InspectorTest.log("Node:");
const node = document.createElement("div");
node.appendChild(document.createElement("n1"));
node.appendChild(document.createElement("n2"));
test(node.children);
test(node.querySelectorAll("*"));
InspectorTest.newline();
InspectorTest.log("Object (doesn't have [Symbol.iterator]):");
InspectorTest.expectException(() => {
test(object);
});
},
});
suite.addTestCase({
name: "Set.prototype.take",
test() {
const key = "key";
let set = new Set;
set.add(key);
InspectorTest.expectEqual(set.take(key), key, "Set can take `key`.");
InspectorTest.expectFalse(set.has(key), "Set no longer has `key`.");
InspectorTest.expectEqual(set.take(key), undefined, "Set can NOT take `key`.");
InspectorTest.expectEqual(set.take("DNE"), undefined, "Set can NOT take `DNE`, as it does NOT exist.");
}
});
suite.addTestCase({
name: "Set.prototype.intersects",
test() {
function testTrue(a, b, message) {
InspectorTest.expectThat((new Set(a)).intersects(new Set(b)), message);
}
function testFalse(a, b, message) {
InspectorTest.expectFalse((new Set(a)).intersects(new Set(b)), message);
}
const object1 = {a: 1};
const object2 = {b: 2};
const object3 = {c: 3};
testFalse([], [], "an empty set should not intersect another empty set.");
testFalse([1, "a", object1], [], "a non-empty set should not intersect an empty set.");
testTrue([1, "a", object1], [1, "a", object1], "a set should intersect another set with the same values.");
testFalse([1, "a", object1], [2, "b", object2], "a set should not intersect another set with different values.");
testTrue([1, "a", object1], [1, 3, "a", "c", object1, object3], "a set should intersect another set with same and additional values.");
testTrue([1, 2, "a", "b", object1, object2], [1, 3, "a", "c", object1, object3], "a set should intersect another set with same and different values.");
}
});
suite.addTestCase({
name: "Set.prototype.isSubsetOf",
test() {
function testTrue(a, b, message) {
InspectorTest.expectThat((new Set(a)).isSubsetOf(new Set(b)), message);
}
function testFalse(a, b, message) {
InspectorTest.expectFalse((new Set(a)).isSubsetOf(new Set(b)), message);
}
const object1 = {a: 1};
const object2 = {b: 2};
const object3 = {c: 3};
testTrue([], [], "an empty set should be a subset of another empty set.");
testTrue([], [2, "b", object2], "an empty set should be a subset of a non-empty set.");
testTrue([1, "a", object1], [1, "a", object1], "a set should be a subset of another set with the same values.");
testFalse([1, "a", object1], [2, "b", object2], "a set should not be a subset of another set with different values.");
testTrue([1, "a", object1], [1, 3, "a", "c", object1, object3], "a set should be a subset of another set with same and additional values.");
testFalse([1, 2, "a", "b", object1, object2], [1, 3, "a", "c", object1, object3], "a set should not be a subset of another set with same and different values.");
}
});
suite.addTestCase({
name: "Set.prototype.equals",
test() {
function testTrue(a, b, message) {
InspectorTest.expectThat((new Set(a)).equals(new Set(b)), message);
}
function testFalse(a, b, message) {
InspectorTest.expectFalse((new Set(a)).equals(new Set(b)), message);
}
const object1 = {a: 1};
const object2 = {b: 2};
const object3 = {c: 3};
testTrue([], [], "an empty set should be equal to another empty set.");
testTrue([1, "a", object1], [1, "a", object1], "a set should be equal to another set with the same values.");
testTrue([1, "a", object1], [object1, 1, "a"], "a set should be equal to another set with the same values in a different order.");
testFalse([1, "a", object1], [2, "b", object2], "a set should not be a equal to another set with different values.");
testFalse([1, 2, "a", "b", object1, object2], [1, 3, "a", "c", object1, object3], "a set should not be equal to another set with same and different values.");
}
});
suite.addTestCase({
name: "Set.prototype.difference",
test() {
function testDifference({aValues, bValues, expectedDifference}) {
let a = new Set(aValues);
let b = new Set(bValues);
InspectorTest.log(`Given a Set with values [${aValues}], and another Set with values [${bValues}]:`);
let difference = a.difference(b);
InspectorTest.expectThat(difference.equals(new Set(expectedDifference)), `Set difference should be [${expectedDifference}].`);
InspectorTest.log("");
}
testDifference({
aValues: [],
bValues: [],
expectedDifference: [],
});
testDifference({
aValues: [1, 2, 3],
bValues: [],
expectedDifference: [1, 2, 3],
});
testDifference({
aValues: [],
bValues: [1, 2, 3],
expectedDifference: [],
});
testDifference({
aValues: [1, 2, 3],
bValues: [2, 3, 4],
expectedDifference: [1],
});
}
});
suite.addTestCase({
name: "Set.prototype.firstValue",
test() {
function testFirstValue(values) {
let expected = values[0];
InspectorTest.expectEqual(new Set(values).firstValue, expected, `Set with values [${values}] should have firstValue equal to ${expected}.`);
}
testFirstValue([]);
testFirstValue([1, 2, 3]);
}
});
suite.addTestCase({
name: "Set.prototype.lastValue",
test() {
function testLastValue(values) {
let expected = values.lastValue;
InspectorTest.expectEqual(new Set(values).lastValue, expected, `Set with values [${values}] should have lastValue equal to ${expected}.`);
}
testLastValue([]);
testLastValue([1, 2, 3]);
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onLoad="runTest()">
</body>
</html>