Skip to content

Commit caf816a

Browse files
committed
update simple suspense rendere
1 parent 03b90eb commit caf816a

File tree

3 files changed

+69
-57
lines changed

3 files changed

+69
-57
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"copy-typescript-definition": "copyfiles -f src/*.d.ts dist",
3636
"test": "eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench",
3737
"test:mocha": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js",
38-
"test:mocha:compat": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'",
38+
"test:mocha:compat": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/*.test.js'",
3939
"test:mocha:debug": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'",
4040
"format": "prettier src/**/*.{d.ts,js} test/**/*.js --write",
4141
"prepublishOnly": "npm run build",

test/compat/async.test.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import render from '../../src/index.js';
2+
import {
3+
h,
4+
Component,
5+
createContext,
6+
Fragment,
7+
options,
8+
createRef
9+
} from 'preact';
10+
import { Suspense } from 'preact/compat';
11+
import { expect } from 'chai';
12+
import { createSuspender } from '../utils.js';
13+
14+
describe('Async renderToString', () => {
15+
it('should render JSX after a suspense boundary', async () => {
16+
const { Suspender, suspended } = createSuspender();
17+
18+
const promise = render(
19+
<Suspense fallback={<div>loading...</div>}>
20+
<Suspender>
21+
<div class="foo">bar</div>
22+
</Suspender>
23+
</Suspense>
24+
);
25+
26+
const expected = `<div class="foo">bar</div>`;
27+
28+
suspended.resolve();
29+
30+
const rendered = await promise;
31+
32+
expect(rendered).to.equal(expected);
33+
});
34+
35+
it('should render JSX with nested suspense boundary', async () => {
36+
const {
37+
Suspender: SuspenderOne,
38+
suspended: suspendedOne
39+
} = createSuspender();
40+
const {
41+
Suspender: SuspenderTwo,
42+
suspended: suspendedTwo
43+
} = createSuspender();
44+
45+
const promise = render(
46+
<ul>
47+
<Suspense fallback={null}>
48+
<SuspenderOne>
49+
<li>one</li>
50+
<SuspenderTwo>
51+
<li>two</li>
52+
</SuspenderTwo>
53+
<li>three</li>
54+
</SuspenderOne>
55+
</Suspense>
56+
</ul>
57+
);
58+
59+
const expected = `<ul><li>one</li><li>two</li><li>three</li></ul>`;
60+
61+
suspendedOne.resolve();
62+
suspendedTwo.resolve();
63+
64+
const rendered = await promise;
65+
66+
expect(rendered).to.equal(expected);
67+
});
68+
});

test/render.test.js

-56
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import render from '../src/index.js';
22
import renderToStringPretty from '../src/pretty.js';
33
import renderToStringJSX from '../src/jsx.js';
4-
import { createSuspender } from './utils.js';
54
import {
65
h,
76
Component,
@@ -18,7 +17,6 @@ import {
1817
useMemo,
1918
useId
2019
} from 'preact/hooks';
21-
import { Suspense } from 'preact/compat';
2220
import { expect } from 'chai';
2321
import { spy, stub, match } from 'sinon';
2422
import { svgAttributes, htmlAttributes } from './utils.js';
@@ -41,60 +39,6 @@ describe('render', () => {
4139
expect(rendered).to.equal(expected);
4240
});
4341

44-
it('should render JSX after a suspense boundary', async () => {
45-
const { Suspender, suspended } = createSuspender();
46-
47-
const promise = render(
48-
<Suspense fallback={<div>loading...</div>}>
49-
<Suspender>
50-
<div class="foo">bar</div>
51-
</Suspender>
52-
</Suspense>
53-
);
54-
55-
const expected = `<div class="foo">bar</div>`;
56-
57-
suspended.resolve();
58-
59-
const rendered = await promise;
60-
61-
expect(rendered).to.equal(expected);
62-
});
63-
64-
it('should render JSX with nested suspense boundary', async () => {
65-
const {
66-
Suspender: SuspenderOne,
67-
suspended: suspendedOne
68-
} = createSuspender();
69-
const {
70-
Suspender: SuspenderTwo,
71-
suspended: suspendedTwo
72-
} = createSuspender();
73-
74-
const promise = render(
75-
<ul>
76-
<Suspense fallback={null}>
77-
<SuspenderOne>
78-
<li>one</li>
79-
<SuspenderTwo>
80-
<li>two</li>
81-
</SuspenderTwo>
82-
<li>three</li>
83-
</SuspenderOne>
84-
</Suspense>
85-
</ul>
86-
);
87-
88-
const expected = `<ul><li>one</li><li>two</li><li>three</li></ul>`;
89-
90-
suspendedOne.resolve();
91-
suspendedTwo.resolve();
92-
93-
const rendered = await promise;
94-
95-
expect(rendered).to.equal(expected);
96-
});
97-
9842
describe('whitespace', () => {
9943
it('should omit whitespace between elements', () => {
10044
let children = [];

0 commit comments

Comments
 (0)