mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-20 10:47:35 -05:00
This PR does two things: 1. introduce the first minimal version of a Plugin system. Plugins are subclasses of the Plugin class, and pyscript will call the relevant methods/hooks at the right time. Currently, I have added only the minimal sets of hooks which were needed for this PR. 2. Implement <py-terminal> as a plugin.
68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { type Stdio, CaptureStdio, StdioMultiplexer } from '../../src/stdio';
|
|
|
|
describe('CaptureStdio', () => {
|
|
it('captured streams are initialized to empty string', () => {
|
|
let stdio = new CaptureStdio();
|
|
expect(stdio.captured_stdout).toBe("");
|
|
expect(stdio.captured_stderr).toBe("");
|
|
});
|
|
|
|
it('stdout() and stderr() captures', () => {
|
|
let stdio = new CaptureStdio();
|
|
stdio.stdout_writeline("hello");
|
|
stdio.stdout_writeline("world");
|
|
stdio.stderr_writeline("this is an error");
|
|
expect(stdio.captured_stdout).toBe("hello\nworld\n");
|
|
expect(stdio.captured_stderr).toBe("this is an error\n");
|
|
});
|
|
|
|
it('reset() works', () => {
|
|
let stdio = new CaptureStdio();
|
|
stdio.stdout_writeline("aaa");
|
|
stdio.stderr_writeline("bbb");
|
|
stdio.reset();
|
|
expect(stdio.captured_stdout).toBe("");
|
|
expect(stdio.captured_stderr).toBe("");
|
|
});
|
|
|
|
});
|
|
|
|
|
|
describe('StdioMultiplexer', () => {
|
|
let a: CaptureStdio;
|
|
let b: CaptureStdio;
|
|
let multi: StdioMultiplexer;
|
|
|
|
beforeEach(() => {
|
|
a = new CaptureStdio();
|
|
b = new CaptureStdio();
|
|
multi = new StdioMultiplexer();
|
|
});
|
|
|
|
it('works without listeners', () => {
|
|
// no listeners, messages are ignored
|
|
multi.stdout_writeline('out 1');
|
|
multi.stderr_writeline('err 1');
|
|
expect(a.captured_stdout).toBe("");
|
|
expect(a.captured_stderr).toBe("");
|
|
expect(b.captured_stdout).toBe("");
|
|
expect(b.captured_stderr).toBe("");
|
|
});
|
|
|
|
it('redirects to multiple listeners', () => {
|
|
multi.addListener(a);
|
|
multi.stdout_writeline('out 1');
|
|
multi.stderr_writeline('err 1');
|
|
|
|
multi.addListener(b);
|
|
multi.stdout_writeline('out 2');
|
|
multi.stderr_writeline('err 2');
|
|
|
|
expect(a.captured_stdout).toBe("out 1\nout 2\n");
|
|
expect(a.captured_stderr).toBe("err 1\nerr 2\n");
|
|
|
|
expect(b.captured_stdout).toBe("out 2\n");
|
|
expect(b.captured_stderr).toBe("err 2\n");
|
|
});
|
|
});
|