import type { SpyInstance } from 'vitest' import { describe, expect, test, beforeEach, vi, afterEach } from 'vitest' import RunnerStream from '../src/stdStream.js' describe('RunnerStream', () => { let stream: RunnerStream let pushSpy: SpyInstance const cb = vi.fn() beforeEach(() => { stream = new RunnerStream() pushSpy = vi.spyOn(stream, 'push') }) test('should have pipe listener', () => { stream._transform('foobar', 'utf8', cb) expect(cb).toBeCalledWith(undefined, 'foobar') }) test('should remove certain last listener on pipe', () => { const stream2 = new RunnerStream() stream.on('foobar', () => {}) stream.on('error', () => {}) stream2.pipe(stream) expect(stream.listeners('foobar')).toHaveLength(1) expect(stream.listeners('error')).toHaveLength(1) expect(stream.listeners('close')).toHaveLength(0) expect(stream.listeners('drain')).toHaveLength(0) expect(stream.listeners('finish')).toHaveLength(0) expect(stream.listeners('unpipe')).toHaveLength(0) }) afterEach(() => { cb.mockClear() pushSpy.mockClear() return new Promise((resolve) => stream.end(() => resolve())) }) })