mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-03 23:00:58 +00:00 
			
		
		
		
	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).
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			889 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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");
 | 
						|
});
 |