1import { beforeAll, afterAll, it, expect } from 'vitest';
2import { enable, disable, fiber } from '../src/index';
3
4beforeAll(() => {
5 enable();
6});
7
8afterAll(() => {
9 disable();
10});
11
12it('prevents async resources from being shared into a fiber (sync)', async () => {
13 const shared = new Promise(resolve => {
14 setImmediate(resolve);
15 });
16
17 await expect(() => {
18 return fiber(async () => {
19 await shared;
20 }).return;
21 }).rejects.toMatchObject({
22 code: 'PARENT_ASYNC_TRIGGER',
23 });
24});
25
26it('prevents async resources from being shared into a fiber (async)', async () => {
27 const shared = new Promise(resolve => {
28 setImmediate(resolve);
29 });
30
31 await expect(() => {
32 return fiber(async () => {
33 await Promise.resolve();
34 await shared;
35 }).return;
36 }).rejects.toMatchObject({
37 code: 'PARENT_ASYNC_TRIGGER',
38 });
39});
40
41it('prevents async resources from being shared across fibers (sync)', async () => {
42 let shared: Promise<unknown>;
43
44 fiber(async () => {
45 shared = new Promise(resolve => {
46 setImmediate(resolve);
47 });
48 });
49
50 await expect(() => {
51 return fiber(async () => {
52 await shared;
53 }).return;
54 }).rejects.toMatchObject({
55 code: 'FOREIGN_ASYNC_TRIGGER',
56 });
57});
58
59it('prevents async resources from being shared across fibers (async)', async () => {
60 let shared: Promise<unknown>;
61
62 fiber(async () => {
63 shared = new Promise(resolve => {
64 setImmediate(resolve);
65 });
66 });
67
68 await expect(() => {
69 return fiber(async () => {
70 await Promise.resolve();
71 await shared;
72 }).return;
73 }).rejects.toMatchObject({
74 code: 'FOREIGN_ASYNC_TRIGGER',
75 });
76});
77
78it('prevents `new Promise` stalls from waiting indefinitely (sync)', async () => {
79 await expect(() => {
80 return fiber(async () => {
81 await new Promise(() => {
82 /*noop*/
83 });
84 }).return;
85 }).rejects.toMatchObject({
86 code: 'FIBER_STALL',
87 });
88});
89
90it('prevents `new Promise` stalls from waiting indefinitely (async)', async () => {
91 await expect(() => {
92 return fiber(async () => {
93 await Promise.resolve();
94 await new Promise(() => {
95 /*noop*/
96 });
97 }).return;
98 }).rejects.toMatchObject({
99 code: 'FIBER_STALL',
100 });
101});