ladybird/Libraries/LibJS/Tests/functions/function-spread.js
Matthew Olsson a51b2393f2 LibJS: Integrate iterator protocol into language features
Finally use Symbol.iterator protocol in language features :) currently
only used in for-of loops and spread expressions, but will have more
uses later (Maps, Sets, Array.from, etc).
2020-07-14 17:58:42 +02:00

38 lines
889 B
JavaScript

test("basic functionality", () => {
const sum = (a, b, c) => a + b + c;
const a = [1, 2, 3];
expect(sum(...a)).toBe(6);
expect(sum(1, ...a)).toBe(4);
expect(sum(...a, 10)).toBe(6);
const foo = (a, b, c) => c;
const o = { bar: [1, 2, 3] };
expect(foo(...o.bar)).toBe(3);
expect(foo(..."abc")).toBe("c");
});
test("spreading custom iterable", () => {
let o = {
[Symbol.iterator]() {
return {
i: 0,
next() {
if (this.i++ === 3) {
return { done: true };
}
return { value: this.i };
},
};
},
};
expect(Math.max(...o)).toBe(3);
});
test("spreading non iterable", () => {
expect(() => {
[...1];
}).toThrowWithMessage(TypeError, "1 is not iterable");
});