@@ -16,7 +16,30 @@ describe('Async renderToString', () => {
16
16
</ Suspense >
17
17
) ;
18
18
19
- const expected = `<div class="foo">bar</div>` ;
19
+ const expected = `<!-- $s --><div class="foo">bar</div><!-- /$s -->` ;
20
+
21
+ suspended . resolve ( ) ;
22
+
23
+ const rendered = await promise ;
24
+
25
+ expect ( rendered ) . to . equal ( expected ) ;
26
+ } ) ;
27
+
28
+ it ( 'should correctly denote null returns of suspending components' , async ( ) => {
29
+ const { Suspender, suspended } = createSuspender ( ) ;
30
+
31
+ const Analytics = ( ) => null ;
32
+
33
+ const promise = renderToStringAsync (
34
+ < Suspense fallback = { < div > loading...</ div > } >
35
+ < Suspender >
36
+ < Analytics />
37
+ </ Suspender >
38
+ < div class = "foo" > bar</ div >
39
+ </ Suspense >
40
+ ) ;
41
+
42
+ const expected = `<!-- $s --><!-- /$s --><div class="foo">bar</div>` ;
20
43
21
44
suspended . resolve ( ) ;
22
45
@@ -26,10 +49,14 @@ describe('Async renderToString', () => {
26
49
} ) ;
27
50
28
51
it ( 'should render JSX with nested suspended components' , async ( ) => {
29
- const { Suspender : SuspenderOne , suspended : suspendedOne } =
30
- createSuspender ( ) ;
31
- const { Suspender : SuspenderTwo , suspended : suspendedTwo } =
32
- createSuspender ( ) ;
52
+ const {
53
+ Suspender : SuspenderOne ,
54
+ suspended : suspendedOne
55
+ } = createSuspender ( ) ;
56
+ const {
57
+ Suspender : SuspenderTwo ,
58
+ suspended : suspendedTwo
59
+ } = createSuspender ( ) ;
33
60
34
61
const promise = renderToStringAsync (
35
62
< ul >
@@ -45,7 +72,7 @@ describe('Async renderToString', () => {
45
72
</ ul >
46
73
) ;
47
74
48
- const expected = `<ul><li>one</li><li>two</li><li>three</li></ul>` ;
75
+ const expected = `<ul><!-- $s -->< li>one</li><!-- $s -->< li>two</li><!-- /$s -->< li>three</li><!-- /$s -- ></ul>` ;
49
76
50
77
suspendedOne . resolve ( ) ;
51
78
suspendedTwo . resolve ( ) ;
@@ -56,10 +83,14 @@ describe('Async renderToString', () => {
56
83
} ) ;
57
84
58
85
it ( 'should render JSX with nested suspense boundaries' , async ( ) => {
59
- const { Suspender : SuspenderOne , suspended : suspendedOne } =
60
- createSuspender ( ) ;
61
- const { Suspender : SuspenderTwo , suspended : suspendedTwo } =
62
- createSuspender ( ) ;
86
+ const {
87
+ Suspender : SuspenderOne ,
88
+ suspended : suspendedOne
89
+ } = createSuspender ( ) ;
90
+ const {
91
+ Suspender : SuspenderTwo ,
92
+ suspended : suspendedTwo
93
+ } = createSuspender ( ) ;
63
94
64
95
const promise = renderToStringAsync (
65
96
< ul >
@@ -77,23 +108,120 @@ describe('Async renderToString', () => {
77
108
</ ul >
78
109
) ;
79
110
80
- const expected = `<ul><li>one</li><li>two</li><li>three</li></ul>` ;
111
+ const expected = `<ul><!-- $s --><li>one</li><!-- $s --><li>two</li><!-- /$s --><li>three</li><!-- /$s --></ul>` ;
112
+
113
+ suspendedOne . resolve ( ) ;
114
+ suspendedTwo . resolve ( ) ;
115
+
116
+ const rendered = await promise ;
117
+
118
+ expect ( rendered ) . to . equal ( expected ) ;
119
+ } ) ;
120
+
121
+ it . skip ( 'should render JSX with nested suspense boundaries containing multiple suspending components' , async ( ) => {
122
+ const {
123
+ Suspender : SuspenderOne ,
124
+ suspended : suspendedOne
125
+ } = createSuspender ( ) ;
126
+ const {
127
+ Suspender : SuspenderTwo ,
128
+ suspended : suspendedTwo
129
+ } = createSuspender ( ) ;
130
+ const {
131
+ Suspender : SuspenderThree ,
132
+ suspended : suspendedThree
133
+ } = createSuspender ( ) ;
134
+
135
+ const promise = renderToStringAsync (
136
+ < ul >
137
+ < Suspense fallback = { null } >
138
+ < SuspenderOne >
139
+ < li > one</ li >
140
+ < Suspense fallback = { null } >
141
+ < SuspenderTwo >
142
+ < li > two</ li >
143
+ </ SuspenderTwo >
144
+ < SuspenderThree >
145
+ < li > three</ li >
146
+ </ SuspenderThree >
147
+ </ Suspense >
148
+ < li > four</ li >
149
+ </ SuspenderOne >
150
+ </ Suspense >
151
+ </ ul >
152
+ ) ;
153
+
154
+ const expected = `<ul><!-- $s --><li>one</li><!-- $s --><li>two</li><!-- /$s --><!-- $s --><li>three</li><!-- /$s --><li>four</li><!-- /$s --></ul>` ;
81
155
82
156
suspendedOne . resolve ( ) ;
83
157
suspendedTwo . resolve ( ) ;
158
+ suspendedThree . resolve ( ) ;
159
+
160
+ const rendered = await promise ;
161
+
162
+ expect ( rendered ) . to . equal ( expected ) ;
163
+ } ) ;
164
+
165
+ // TODO: does not work yet
166
+ it . skip ( 'should render JSX with deeply nested suspense boundaries' , async ( ) => {
167
+ const {
168
+ Suspender : SuspenderOne ,
169
+ suspended : suspendedOne
170
+ } = createSuspender ( ) ;
171
+ const {
172
+ Suspender : SuspenderTwo ,
173
+ suspended : suspendedTwo
174
+ } = createSuspender ( ) ;
175
+ const {
176
+ Suspender : SuspenderThree ,
177
+ suspended : suspendedThree
178
+ } = createSuspender ( ) ;
179
+
180
+ const promise = renderToStringAsync (
181
+ < ul >
182
+ < Suspense fallback = { null } >
183
+ < SuspenderOne >
184
+ < li > one</ li >
185
+ < Suspense fallback = { null } >
186
+ < SuspenderTwo >
187
+ < li > two</ li >
188
+ < Suspense fallback = { null } >
189
+ < SuspenderThree >
190
+ < li > three</ li >
191
+ </ SuspenderThree >
192
+ </ Suspense >
193
+ </ SuspenderTwo >
194
+ </ Suspense >
195
+ < li > four</ li >
196
+ </ SuspenderOne >
197
+ </ Suspense >
198
+ </ ul >
199
+ ) ;
200
+
201
+ const expected = `<ul><!-- $s --><li>one</li><!-- $s --><li>two</li><!-- $s --><li>three</li><!-- /$s --><!-- /$s --><li>four</li><!-- /$s --></ul>` ;
202
+
203
+ suspendedOne . resolve ( ) ;
204
+ suspendedTwo . resolve ( ) ;
205
+ suspendedThree . resolve ( ) ;
84
206
85
207
const rendered = await promise ;
86
208
87
209
expect ( rendered ) . to . equal ( expected ) ;
88
210
} ) ;
89
211
90
212
it ( 'should render JSX with multiple suspended direct children within a single suspense boundary' , async ( ) => {
91
- const { Suspender : SuspenderOne , suspended : suspendedOne } =
92
- createSuspender ( ) ;
93
- const { Suspender : SuspenderTwo , suspended : suspendedTwo } =
94
- createSuspender ( ) ;
95
- const { Suspender : SuspenderThree , suspended : suspendedThree } =
96
- createSuspender ( ) ;
213
+ const {
214
+ Suspender : SuspenderOne ,
215
+ suspended : suspendedOne
216
+ } = createSuspender ( ) ;
217
+ const {
218
+ Suspender : SuspenderTwo ,
219
+ suspended : suspendedTwo
220
+ } = createSuspender ( ) ;
221
+ const {
222
+ Suspender : SuspenderThree ,
223
+ suspended : suspendedThree
224
+ } = createSuspender ( ) ;
97
225
98
226
const promise = renderToStringAsync (
99
227
< ul >
@@ -113,7 +241,7 @@ describe('Async renderToString', () => {
113
241
</ ul >
114
242
) ;
115
243
116
- const expected = `<ul><li>one</li><li>two</li><li>three</li></ul>` ;
244
+ const expected = `<ul><!-- $s -->< li>one</li><!-- /$s --><!-- $s -->< li>two</li><!-- /$s --><!-- $s -->< li>three</li><!-- /$s -- ></ul>` ;
117
245
118
246
suspendedOne . resolve ( ) ;
119
247
suspendedTwo . resolve ( ) ;
@@ -173,6 +301,6 @@ describe('Async renderToString', () => {
173
301
174
302
suspended . resolve ( ) ;
175
303
const rendered = await promise ;
176
- expect ( rendered ) . to . equal ( '<p>ok</p>' ) ;
304
+ expect ( rendered ) . to . equal ( '<!-- $s -->< p>ok</p><!-- /$s -- >' ) ;
177
305
} ) ;
178
306
} ) ;
0 commit comments