Skip to content

Commit a1c73aa

Browse files
committed
test: multiple previews sharing same port
1 parent d05cd13 commit a1c73aa

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { assert, expect, test, vi } from 'vitest';
2+
import { PreviewsStore } from './previews.js';
3+
import type { PortListener, WebContainer } from '@webcontainer/api';
4+
5+
test('marks multiple preview infos ready', async () => {
6+
const { store, emit } = await getStore();
7+
8+
store.setPreviews([
9+
{ port: 3000, title: 'Dev' },
10+
{ port: 3000, title: 'Docs', pathname: '/docs' },
11+
]);
12+
13+
expect(store.previews.value).toHaveLength(2);
14+
expect(store.previews.value![0].ready).toBe(false);
15+
expect(store.previews.value![1].ready).toBe(false);
16+
17+
emit(3000, 'open', 'https://localhost');
18+
19+
await vi.waitFor(() => {
20+
expect(store.previews.value![0].ready).toBe(true);
21+
expect(store.previews.value![1].ready).toBe(true);
22+
});
23+
});
24+
25+
async function getStore() {
26+
const listeners: PortListener[] = [];
27+
28+
const webcontainer: Pick<WebContainer, 'on'> = {
29+
on: (type, listener) => {
30+
if (type === 'port') {
31+
listeners.push(listener as PortListener);
32+
}
33+
34+
return () => undefined;
35+
},
36+
};
37+
38+
const promise = new Promise<WebContainer>((resolve) => {
39+
resolve(webcontainer as WebContainer);
40+
});
41+
42+
await promise;
43+
44+
return {
45+
store: new PreviewsStore(promise),
46+
emit: (...args: Parameters<PortListener>) => {
47+
assert(listeners.length > 0, 'Port listeners were not captured');
48+
49+
listeners.forEach((cb) => cb(...args));
50+
},
51+
};
52+
}

0 commit comments

Comments
 (0)