Skip to content

Commit 46362a4

Browse files
committed
Add tests for end() method in AsyncIterableBuffer
1 parent 309ae93 commit 46362a4

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

tests/unit/AsyncIterableBuffer.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,41 @@ describe('AsyncIterableBuffer', () => {
157157
});
158158
});
159159

160+
describe('end()', () => {
161+
162+
it('prevents push() after end() is called', () => {
163+
const buffer = new AsyncIterableBuffer<number>();
164+
buffer.end();
165+
expect(() => buffer.push(42)).toThrow('Iterable buffer is already closed');
166+
});
167+
168+
it('allows next() to be called after end()', async () => {
169+
const buffer = new AsyncIterableBuffer<number>();
170+
buffer.push(1);
171+
buffer.push(2);
172+
buffer.end();
173+
174+
const result = await buffer.next();
175+
expect(result).toEqual({ done: false, value: 1 });
176+
const result2 = await buffer.next();
177+
expect(result2).toEqual({ done: false, value: 2 });
178+
const result3 = await buffer.next();
179+
expect(result3).toEqual({ done: true, value: undefined });
180+
});
181+
182+
it('resolves pending next() promises when end() is called', async () => {
183+
const buffer = new AsyncIterableBuffer<string>();
184+
const nextPromise = buffer.next();
185+
const nextPromise2 = buffer.next();
186+
buffer.push('hello');
187+
buffer.end();
188+
const result = await nextPromise;
189+
expect(result).toEqual({ done: false, value: 'hello' });
190+
const result2 = await nextPromise2;
191+
expect(result2).toEqual({ done: true, value: undefined });
192+
});
193+
});
194+
160195
describe('[Symbol.asyncIterator]()', () => {
161196

162197
it('returns the instance itself', () => {

0 commit comments

Comments
 (0)