|
import { describe, expect, it } from "vitest"; |
|
import { eventToGenerator } from "./eventToGenerator"; |
|
|
|
describe("eventToGenerator", () => { |
|
it("should handle synchronous events", async () => { |
|
const it = eventToGenerator<number, number>((yieldCallback, returnCallback) => { |
|
yieldCallback(1); |
|
yieldCallback(2); |
|
returnCallback(3); |
|
}); |
|
|
|
const results = []; |
|
let res: IteratorResult<number, number>; |
|
do { |
|
res = await it.next(); |
|
if (!res.done) { |
|
results.push(res.value); |
|
} |
|
} while (!res.done); |
|
|
|
expect(results).toEqual([1, 2]); |
|
expect(res.value).toBe(3); |
|
}); |
|
|
|
it("should handle asynchronous events", async () => { |
|
const it = eventToGenerator<number, number>((yieldCallback, returnCallback) => { |
|
setTimeout(() => yieldCallback(1), 100); |
|
setTimeout(() => yieldCallback(2), 200); |
|
setTimeout(() => returnCallback(3), 300); |
|
}); |
|
|
|
const results = []; |
|
let res: IteratorResult<number, number>; |
|
do { |
|
res = await it.next(); |
|
if (!res.done) { |
|
results.push(res.value); |
|
} |
|
} while (!res.done); |
|
|
|
expect(results).toEqual([1, 2]); |
|
expect(res.value).toBe(3); |
|
}); |
|
}); |
|
|