mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 23:17:45 +00:00
LibJS: Add most of the Set.prototype methods
Specifically all aside from "values" and "entries" which require an implementation of the SetIterator object.
This commit is contained in:
parent
670be04c81
commit
0b0f1eda05
9 changed files with 164 additions and 0 deletions
|
@ -27,5 +27,10 @@ describe("normal behavior", () => {
|
|||
var a = new Set([0, 1, 2]);
|
||||
expect(a instanceof Set).toBeTrue();
|
||||
expect(a).toHaveSize(3);
|
||||
var seen = [false, false, false];
|
||||
a.forEach(x => {
|
||||
seen[x] = true;
|
||||
});
|
||||
expect(seen[0] && seen[1] && seen[2]);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
test("basic functionality", () => {
|
||||
expect(Set.prototype.add).toHaveLength(1);
|
||||
|
||||
const set = new Set(["a", "b", "c"]);
|
||||
expect(set).toHaveSize(3);
|
||||
expect(set.add("d")).toBe(set);
|
||||
expect(set).toHaveSize(4);
|
||||
expect(set.add("a")).toBe(set);
|
||||
expect(set).toHaveSize(4);
|
||||
});
|
|
@ -0,0 +1,8 @@
|
|||
test("basic functionality", () => {
|
||||
expect(Set.prototype.clear).toHaveLength(0);
|
||||
|
||||
const set = new Set(["a", "b", "c"]);
|
||||
expect(set).toHaveSize(3);
|
||||
set.clear();
|
||||
expect(set).toHaveSize(0);
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
test("basic functionality", () => {
|
||||
expect(Set.prototype.delete).toHaveLength(1);
|
||||
|
||||
const set = new Set(["a", "b", "c"]);
|
||||
expect(set).toHaveSize(3);
|
||||
expect(set.delete("b")).toBeTrue();
|
||||
expect(set).toHaveSize(2);
|
||||
expect(set.delete("b")).toBeFalse();
|
||||
expect(set).toHaveSize(2);
|
||||
});
|
|
@ -0,0 +1,48 @@
|
|||
test("length is 1", () => {
|
||||
expect(Set.prototype.forEach).toHaveLength(1);
|
||||
});
|
||||
|
||||
describe("errors", () => {
|
||||
test("requires at least one argument", () => {
|
||||
expect(() => {
|
||||
new Set().forEach();
|
||||
}).toThrowWithMessage(TypeError, "undefined is not a function");
|
||||
});
|
||||
|
||||
test("callback must be a function", () => {
|
||||
expect(() => {
|
||||
new Set().forEach(undefined);
|
||||
}).toThrowWithMessage(TypeError, "undefined is not a function");
|
||||
});
|
||||
});
|
||||
|
||||
describe("normal behavior", () => {
|
||||
test("never calls callback with empty set", () => {
|
||||
var callbackCalled = 0;
|
||||
expect(
|
||||
new Set().forEach(() => {
|
||||
callbackCalled++;
|
||||
})
|
||||
).toBeUndefined();
|
||||
expect(callbackCalled).toBe(0);
|
||||
});
|
||||
|
||||
test("calls callback once for every item", () => {
|
||||
var callbackCalled = 0;
|
||||
expect(
|
||||
new Set([1, 2, 3]).forEach(() => {
|
||||
callbackCalled++;
|
||||
})
|
||||
).toBeUndefined();
|
||||
expect(callbackCalled).toBe(3);
|
||||
});
|
||||
|
||||
test("callback receives value twice and set", () => {
|
||||
var a = new Set([1, 2, 3]);
|
||||
a.forEach((value1, value2, set) => {
|
||||
expect(a.has(value1)).toBeTrue();
|
||||
expect(value1).toBe(value2);
|
||||
expect(set).toBe(a);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,13 @@
|
|||
test("length is 1", () => {
|
||||
expect(Set.prototype.has).toHaveLength(1);
|
||||
});
|
||||
|
||||
test("basic functionality", () => {
|
||||
var set = new Set(["hello", "friends", 1, 2, false]);
|
||||
|
||||
expect(new Set().has()).toBeFalse();
|
||||
expect(new Set([undefined]).has()).toBeTrue();
|
||||
expect(set.has("hello")).toBeTrue();
|
||||
expect(set.has(1)).toBeTrue();
|
||||
expect(set.has("serenity")).toBeFalse();
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue