185
186
const resolveText = resolveMostRecentTextCache;
187
188
- function span(prop, children = []) {
189
- return {type: 'span', children, prop, hidden: false};
190
- }
191
-
192
- function spanHidden(prop, children = []) {
193
- return {type: 'span', children, prop, hidden: true};
194
- }
195
-
188
function advanceTimers(ms) {
189
// Note: This advances Jest's virtual time but not React's. Use
190
// ReactNoop.expire for that.
270
'Text:Outside create passive',
271
'App create passive',
272
]);
281
- expect(ReactNoop.getChildren()).toEqual([
282
- span('Fallback'),
283
- span('Outside'),
284
- ]);
273
+ expect(ReactNoop).toMatchRenderedOutput(
274
+ <>
275
+ <span prop="Fallback" />
276
+ <span prop="Outside" />
277
+ </>,
278
+ );
279
280
// Resolving the suspended resource should
281
await act(async () => {
293
'Text:Inside:Before create passive',
294
'AsyncText:Async create passive',
295
]);
302
- expect(ReactNoop.getChildren()).toEqual([
303
- span('Inside:Before'),
304
- span('Async'),
305
- span('Inside:After'),
306
- span('Outside'),
307
- ]);
296
+ expect(ReactNoop).toMatchRenderedOutput(
297
+ <>
298
+ <span prop="Inside:Before" />
299
+ <span prop="Async" />
300
+ <span prop="Inside:After" />
301
+ <span prop="Outside" />
302
+ </>,
303
+ );
304
305
await act(async () => {
306
ReactNoop.render(null);
316
'AsyncText:Async destroy passive',
317
'Text:Outside destroy passive',
318
]);
323
- expect(ReactNoop.getChildren()).toEqual([]);
319
+ expect(ReactNoop).toMatchRenderedOutput(null);
320
});
321
322
// @gate enableLegacyCache
394
'Text:Outside create passive',
395
'App create passive',
396
]);
401
- expect(ReactNoop.getChildren()).toEqual([
402
- spanHidden('Inside:Before'),
403
- spanHidden('Inside:After'),
404
- span('Fallback'),
405
- span('Outside'),
406
- ]);
397
+ expect(ReactNoop).toMatchRenderedOutput(
398
+ <>
399
+ <span prop="Inside:Before" hidden={true} />
400
+ <span prop="Inside:After" hidden={true} />
401
+ <span prop="Fallback" />
402
+ <span prop="Outside" />
403
+ </>,
404
+ );
405
406
// Resolving the suspended resource should
407
await act(async () => {
414
'Text:Fallback destroy passive',
415
'AsyncText:Async create passive',
416
]);
419
- expect(ReactNoop.getChildren()).toEqual([
420
- span('Inside:Before'),
421
- span('Async'),
422
- span('Inside:After'),
423
- span('Outside'),
424
- ]);
417
+ expect(ReactNoop).toMatchRenderedOutput(
418
+ <>
419
+ <span prop="Inside:Before" />
420
+ <span prop="Async" />
421
+ <span prop="Inside:After" />
422
+ <span prop="Outside" />
423
+ </>,
424
+ );
425
426
await act(async () => {
427
ReactNoop.renderLegacySyncRoot(null);
437
'AsyncText:Async destroy passive',
438
'Text:Outside destroy passive',
439
]);
440
- expect(ReactNoop.getChildren()).toEqual([]);
440
+ expect(ReactNoop).toMatchRenderedOutput(null);
441
});
442
});
443
488
'Text:Outside create passive',
489
'App create passive',
490
]);
491
- expect(ReactNoop.getChildren()).toEqual([
492
- span('Inside:Before'),
493
- span('Inside:After'),
494
- span('Outside'),
495
- ]);
491
+ expect(ReactNoop).toMatchRenderedOutput(
492
+ <>
493
+ <span prop="Inside:Before" />
494
+ <span prop="Inside:After" />
495
+ <span prop="Outside" />
496
+ </>,
497
+ );
498
499
// Schedule an update that causes React to suspend.
500
act(() => {
514
'Text:Fallback create layout',
515
'Text:Fallback create passive',
516
]);
515
- expect(ReactNoop.getChildren()).toEqual([
516
- spanHidden('Inside:Before'),
517
- spanHidden('Inside:After'),
518
- span('Fallback'),
519
- span('Outside'),
520
- ]);
517
+ expect(ReactNoop).toMatchRenderedOutput(
518
+ <>
519
+ <span prop="Inside:Before" hidden={true} />
520
+ <span prop="Inside:After" hidden={true} />
521
+ <span prop="Fallback" />
522
+ <span prop="Outside" />
523
+ </>,
524
+ );
525
526
await advanceTimers(1000);
527
528
// Noop since sync root has already committed
529
expect(Scheduler).toHaveYielded([]);
526
- expect(ReactNoop.getChildren()).toEqual([
527
- spanHidden('Inside:Before'),
528
- spanHidden('Inside:After'),
529
- span('Fallback'),
530
- span('Outside'),
531
- ]);
530
+ expect(ReactNoop).toMatchRenderedOutput(
531
+ <>
532
+ <span prop="Inside:Before" hidden={true} />
533
+ <span prop="Inside:After" hidden={true} />
534
+ <span prop="Fallback" />
535
+ <span prop="Outside" />
536
+ </>,
537
+ );
538
539
// Resolving the suspended resource should re-create inner layout effects.
540
await act(async () => {
547
'Text:Fallback destroy passive',
548
'AsyncText:Async create passive',
549
]);
544
- expect(ReactNoop.getChildren()).toEqual([
545
- span('Inside:Before'),
546
- span('Async'),
547
- span('Inside:After'),
548
- span('Outside'),
549
- ]);
550
+ expect(ReactNoop).toMatchRenderedOutput(
551
+ <>
552
+ <span prop="Inside:Before" />
553
+ <span prop="Async" />
554
+ <span prop="Inside:After" />
555
+ <span prop="Outside" />
556
+ </>,
557
+ );
558
559
await act(async () => {
560
ReactNoop.renderLegacySyncRoot(null);
618
'Text:Outside create passive',
619
'App create passive',
620
]);
613
- expect(ReactNoop.getChildren()).toEqual([
614
- span('Inside:Before'),
615
- span('Inside:After'),
616
- span('Outside'),
617
- ]);
621
+ expect(ReactNoop).toMatchRenderedOutput(
622
+ <>
623
+ <span prop="Inside:Before" />
624
+ <span prop="Inside:After" />
625
+ <span prop="Outside" />
626
+ </>,
627
+ );
628
629
// Schedule an update that causes React to suspend.
630
act(() => {
642
'Text:Fallback render',
643
'Text:Outside render',
644
]);
635
- expect(ReactNoop.getChildren()).toEqual([
636
- span('Inside:Before'),
637
- span('Inside:After'),
638
- span('Outside'),
639
- ]);
645
+ expect(ReactNoop).toMatchRenderedOutput(
646
+ <>
647
+ <span prop="Inside:Before" />
648
+ <span prop="Inside:After" />
649
+ <span prop="Outside" />
650
+ </>,
651
+ );
652
653
await advanceTimers(1000);
654
659
'Text:Fallback create layout',
660
]);
661
expect(Scheduler).toFlushAndYield(['Text:Fallback create passive']);
650
- expect(ReactNoop.getChildren()).toEqual([
651
- spanHidden('Inside:Before'),
652
- spanHidden('Inside:After'),
653
- span('Fallback'),
654
- span('Outside'),
655
- ]);
662
+ expect(ReactNoop).toMatchRenderedOutput(
663
+ <>
664
+ <span prop="Inside:Before" hidden={true} />
665
+ <span prop="Inside:After" hidden={true} />
666
+ <span prop="Fallback" />
667
+ <span prop="Outside" />
668
+ </>,
669
+ );
670
671
// Resolving the suspended resource should re-create inner layout effects.
672
await act(async () => {
683
'Text:Fallback destroy passive',
684
'AsyncText:Async create passive',
685
]);
672
- expect(ReactNoop.getChildren()).toEqual([
673
- span('Inside:Before'),
674
- span('Async'),
675
- span('Inside:After'),
676
- span('Outside'),
677
- ]);
686
+ expect(ReactNoop).toMatchRenderedOutput(
687
+ <>
688
+ <span prop="Inside:Before" />
689
+ <span prop="Async" />
690
+ <span prop="Inside:After" />
691
+ <span prop="Outside" />
692
+ </>,
693
+ );
694
695
await act(async () => {
696
ReactNoop.render(null);
774
'App create layout',
775
'App create passive',
776
]);
761
- expect(ReactNoop.getChildren()).toEqual([
762
- span('Inside:Before'),
763
- span('Inside:After'),
764
- span('Outside'),
765
- ]);
777
+ expect(ReactNoop).toMatchRenderedOutput(
778
+ <>
779
+ <span prop="Inside:Before" />
780
+ <span prop="Inside:After" />
781
+ <span prop="Outside" />
782
+ </>,
783
+ );
784
785
// Schedule an update that causes React to suspend.
786
act(() => {
798
'ClassText:Fallback render',
799
'ClassText:Outside render',
800
]);
783
- expect(ReactNoop.getChildren()).toEqual([
784
- span('Inside:Before'),
785
- span('Inside:After'),
786
- span('Outside'),
787
- ]);
801
+ expect(ReactNoop).toMatchRenderedOutput(
802
+ <>
803
+ <span prop="Inside:Before" />
804
+ <span prop="Inside:After" />
805
+ <span prop="Outside" />
806
+ </>,
807
+ );
808
809
await advanceTimers(1000);
810
815
'ClassText:Fallback componentDidMount',
816
'ClassText:Outside componentDidUpdate',
817
]);
798
- expect(ReactNoop.getChildren()).toEqual([
799
- spanHidden('Inside:Before'),
800
- spanHidden('Inside:After'),
801
- span('Fallback'),
802
- span('Outside'),
803
- ]);
818
+ expect(ReactNoop).toMatchRenderedOutput(
819
+ <>
820
+ <span prop="Inside:Before" hidden={true} />
821
+ <span prop="Inside:After" hidden={true} />
822
+ <span prop="Fallback" />
823
+ <span prop="Outside" />
824
+ </>,
825
+ );
826
827
// Resolving the suspended resource should re-create inner layout effects.
828
await act(async () => {
838
'ClassText:Inside:After componentDidMount',
839
'AsyncText:Async create passive',
840
]);
819
- expect(ReactNoop.getChildren()).toEqual([
820
- span('Inside:Before'),
821
- span('Async'),
822
- span('Inside:After'),
823
- span('Outside'),
824
- ]);
825
-
841
+ expect(ReactNoop).toMatchRenderedOutput(
842
+ <>
843
+ <span prop="Inside:Before" />
844
+ <span prop="Async" />
845
+ <span prop="Inside:After" />
846
+ <span prop="Outside" />
847
+ </>,
848
+ );
849
await act(async () => {
850
ReactNoop.render(null);
851
});
901
'Text:Outer create passive',
902
'App create passive',
903
]);
881
- expect(ReactNoop.getChildren()).toEqual([span('Outer', [span('Inner')])]);
904
+ expect(ReactNoop).toMatchRenderedOutput(
905
+ <span prop="Outer">
906
+ <span prop="Inner" />
907
+ </span>,
908
+ );
909
910
// Schedule an update that causes React to suspend.
911
act(() => {
922
'Text:Inner render',
923
'Text:Fallback render',
924
]);
898
- expect(ReactNoop.getChildren()).toEqual([span('Outer', [span('Inner')])]);
925
+ expect(ReactNoop).toMatchRenderedOutput(
926
+ <span prop="Outer">
927
+ <span prop="Inner" />
928
+ </span>,
929
+ );
930
931
await advanceTimers(1000);
932
937
'Text:Fallback create layout',
938
]);
939
expect(Scheduler).toFlushAndYield(['Text:Fallback create passive']);
909
- expect(ReactNoop.getChildren()).toEqual([
910
- spanHidden('Outer', [span('Inner')]),
911
- span('Fallback'),
912
- ]);
940
+ expect(ReactNoop).toMatchRenderedOutput(
941
+ <>
942
+ <span hidden={true} prop="Outer">
943
+ <span prop="Inner" />
944
+ </span>
945
+ <span prop="Fallback" />
946
+ </>,
947
+ );
948
949
// Resolving the suspended resource should re-create inner layout effects.
950
await act(async () => {
961
'Text:Fallback destroy passive',
962
'AsyncText:Async create passive',
963
]);
929
- expect(ReactNoop.getChildren()).toEqual([
930
- span('Async'),
931
- span('Outer', [span('Inner')]),
932
- ]);
964
+ expect(ReactNoop).toMatchRenderedOutput(
965
+ <>
966
+ <span prop="Async" />
967
+ <span prop="Outer">
968
+ <span prop="Inner" />
969
+ </span>
970
+ </>,
971
+ );
972
973
await act(async () => {
974
ReactNoop.render(null);
1028
'Text:Outer create passive',
1029
'App create passive',
1030
]);
992
- expect(ReactNoop.getChildren()).toEqual([
993
- span('Outer', [span('MemoizedInner')]),
994
- ]);
1031
+ expect(ReactNoop).toMatchRenderedOutput(
1032
+ <span prop="Outer">
1033
+ <span prop="MemoizedInner" />
1034
+ </span>,
1035
+ );
1036
1037
// Schedule an update that causes React to suspend.
1038
act(() => {
1049
// Text:MemoizedInner is memoized
1050
'Text:Fallback render',
1051
]);
1011
- expect(ReactNoop.getChildren()).toEqual([
1012
- span('Outer', [span('MemoizedInner')]),
1013
- ]);
1052
+ expect(ReactNoop).toMatchRenderedOutput(
1053
+ <span prop="Outer">
1054
+ <span prop="MemoizedInner" />
1055
+ </span>,
1056
+ );
1057
1058
await advanceTimers(1000);
1059
1065
'Text:Fallback create layout',
1066
]);
1067
expect(Scheduler).toFlushAndYield(['Text:Fallback create passive']);
1025
- expect(ReactNoop.getChildren()).toEqual([
1026
- spanHidden('Outer', [span('MemoizedInner')]),
1027
- span('Fallback'),
1028
- ]);
1068
+ expect(ReactNoop).toMatchRenderedOutput(
1069
+ <>
1070
+ <span hidden={true} prop="Outer">
1071
+ <span prop="MemoizedInner" />
1072
+ </span>
1073
+ <span prop="Fallback" />
1074
+ </>,
1075
+ );
1076
1077
// Resolving the suspended resource should re-create inner layout effects.
1078
await act(async () => {
1088
'Text:Fallback destroy passive',
1089
'AsyncText:Async create passive',
1090
]);
1044
- expect(ReactNoop.getChildren()).toEqual([
1045
- span('Async'),
1046
- span('Outer', [span('MemoizedInner')]),
1047
- ]);
1091
+ expect(ReactNoop).toMatchRenderedOutput(
1092
+ <>
1093
+ <span prop="Async" />
1094
+ <span prop="Outer">
1095
+ <span prop="MemoizedInner" />
1096
+ </span>
1097
+ </>,
1098
+ );
1099
1100
await act(async () => {
1101
ReactNoop.render(null);
1139
'Text:Outer create passive',
1140
'Text:Inner create passive',
1141
]);
1091
- expect(ReactNoop.getChildren()).toEqual([span('Outer'), span('Inner')]);
1142
+ expect(ReactNoop).toMatchRenderedOutput(
1143
+ <>
1144
+ <span prop="Outer" />
1145
+ <span prop="Inner" />
1146
+ </>,
1147
+ );
1148
1149
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
1150
act(() => {
1162
'Text:InnerFallback create layout',
1163
]);
1164
expect(Scheduler).toFlushAndYield(['Text:InnerFallback create passive']);
1109
- expect(ReactNoop.getChildren()).toEqual([
1110
- span('Outer'),
1111
- spanHidden('Inner'),
1112
- span('InnerFallback'),
1113
- ]);
1165
+ expect(ReactNoop).toMatchRenderedOutput(
1166
+ <>
1167
+ <span prop="Outer" />
1168
+ <span prop="Inner" hidden={true} />
1169
+ <span prop="InnerFallback" />
1170
+ </>,
1171
+ );
1172
1173
// Suspend the outer Suspense subtree (outer effects and inner fallback effects should be destroyed)
1174
// (This check also ensures we don't destroy effects for mounted inner fallback.)
1193
'Text:OuterFallback create layout',
1194
]);
1195
expect(Scheduler).toFlushAndYield(['Text:OuterFallback create passive']);
1138
- expect(ReactNoop.getChildren()).toEqual([
1139
- spanHidden('Outer'),
1140
- spanHidden('Inner'),
1141
- spanHidden('InnerFallback'),
1142
- span('OuterFallback'),
1143
- ]);
1196
+ expect(ReactNoop).toMatchRenderedOutput(
1197
+ <>
1198
+ <span prop="Outer" hidden={true} />
1199
+ <span prop="Inner" hidden={true} />
1200
+ <span prop="InnerFallback" hidden={true} />
1201
+ <span prop="OuterFallback" />
1202
+ </>,
1203
+ );
1204
1205
// Show the inner Suspense subtree (no effects should be recreated)
1206
await act(async () => {
1212
'Text:Inner render',
1213
'AsyncText:InnerAsync_1 render',
1214
]);
1155
- expect(ReactNoop.getChildren()).toEqual([
1156
- spanHidden('Outer'),
1157
- spanHidden('Inner'),
1158
- spanHidden('InnerFallback'),
1159
- span('OuterFallback'),
1160
- ]);
1215
+ expect(ReactNoop).toMatchRenderedOutput(
1216
+ <>
1217
+ <span prop="Outer" hidden={true} />
1218
+ <span prop="Inner" hidden={true} />
1219
+ <span prop="InnerFallback" hidden={true} />
1220
+ <span prop="OuterFallback" />
1221
+ </>,
1222
+ );
1223
1224
// Suspend the inner Suspense subtree (no effects should be destroyed)
1225
act(() => {
1239
'Text:InnerFallback render',
1240
'Text:OuterFallback render',
1241
]);
1180
- expect(ReactNoop.getChildren()).toEqual([
1181
- spanHidden('Outer'),
1182
- spanHidden('Inner'),
1183
- spanHidden('InnerFallback'),
1184
- span('OuterFallback'),
1185
- ]);
1242
+ expect(ReactNoop).toMatchRenderedOutput(
1243
+ <>
1244
+ <span prop="Outer" hidden={true} />
1245
+ <span prop="Inner" hidden={true} />
1246
+ <span prop="InnerFallback" hidden={true} />
1247
+ <span prop="OuterFallback" />
1248
+ </>,
1249
+ );
1250
1251
// Show the outer Suspense subtree (only outer effects should be recreated)
1252
await act(async () => {
1265
'Text:OuterFallback destroy passive',
1266
'AsyncText:OuterAsync_1 create passive',
1267
]);
1204
- expect(ReactNoop.getChildren()).toEqual([
1205
- span('Outer'),
1206
- span('OuterAsync_1'),
1207
- spanHidden('Inner'),
1208
- span('InnerFallback'),
1209
- ]);
1268
+ expect(ReactNoop).toMatchRenderedOutput(
1269
+ <>
1270
+ <span prop="Outer" />
1271
+ <span prop="OuterAsync_1" />
1272
+ <span prop="Inner" hidden={true} />
1273
+ <span prop="InnerFallback" />
1274
+ </>,
1275
+ );
1276
1277
// Show the inner Suspense subtree (only inner effects should be recreated)
1278
await act(async () => {
1287
'Text:InnerFallback destroy passive',
1288
'AsyncText:InnerAsync_2 create passive',
1289
]);
1224
- expect(ReactNoop.getChildren()).toEqual([
1225
- span('Outer'),
1226
- span('OuterAsync_1'),
1227
- span('Inner'),
1228
- span('InnerAsync_2'),
1229
- ]);
1290
+ expect(ReactNoop).toMatchRenderedOutput(
1291
+ <>
1292
+ <span prop="Outer" />
1293
+ <span prop="OuterAsync_1" />
1294
+ <span prop="Inner" />
1295
+ <span prop="InnerAsync_2" />
1296
+ </>,
1297
+ );
1298
1299
// Suspend the outer Suspense subtree (all effects should be destroyed)
1300
act(() => {
1318
'AsyncText:InnerAsync_2 destroy layout',
1319
'Text:OuterFallback create layout',
1320
]);
1253
- expect(ReactNoop.getChildren()).toEqual([
1254
- spanHidden('Outer'),
1255
- spanHidden('OuterAsync_1'),
1256
- spanHidden('Inner'),
1257
- spanHidden('InnerAsync_2'),
1258
- span('OuterFallback'),
1259
- ]);
1321
+ expect(ReactNoop).toMatchRenderedOutput(
1322
+ <>
1323
+ <span prop="Outer" hidden={true} />
1324
+ <span prop="OuterAsync_1" hidden={true} />
1325
+ <span prop="Inner" hidden={true} />
1326
+ <span prop="InnerAsync_2" hidden={true} />
1327
+ <span prop="OuterFallback" />
1328
+ </>,
1329
+ );
1330
1331
// Show the outer Suspense subtree (all effects should be recreated)
1332
await act(async () => {
1345
'AsyncText:InnerAsync_2 create layout',
1346
'Text:OuterFallback destroy passive',
1347
]);
1278
- expect(ReactNoop.getChildren()).toEqual([
1279
- span('Outer'),
1280
- span('OuterAsync_2'),
1281
- span('Inner'),
1282
- span('InnerAsync_2'),
1283
- ]);
1348
+ expect(ReactNoop).toMatchRenderedOutput(
1349
+ <>
1350
+ <span prop="Outer" />
1351
+ <span prop="OuterAsync_2" />
1352
+ <span prop="Inner" />
1353
+ <span prop="InnerAsync_2" />
1354
+ </>,
1355
+ );
1356
});
1357
1358
// @gate enableLegacyCache
1382
'Text:Outer create passive',
1383
'Text:Inner create passive',
1384
]);
1313
- expect(ReactNoop.getChildren()).toEqual([span('Outer'), span('Inner')]);
1385
+ expect(ReactNoop).toMatchRenderedOutput(
1386
+ <>
1387
+ <span prop="Outer" />
1388
+ <span prop="Inner" />
1389
+ </>,
1390
+ );
1391
1392
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
1393
act(() => {
1405
'Text:InnerFallback create layout',
1406
]);
1407
expect(Scheduler).toFlushAndYield(['Text:InnerFallback create passive']);
1331
- expect(ReactNoop.getChildren()).toEqual([
1332
- span('Outer'),
1333
- spanHidden('Inner'),
1334
- span('InnerFallback'),
1335
- ]);
1408
+ expect(ReactNoop).toMatchRenderedOutput(
1409
+ <>
1410
+ <span prop="Outer" />
1411
+ <span prop="Inner" hidden={true} />
1412
+ <span prop="InnerFallback" />
1413
+ </>,
1414
+ );
1415
1416
// Suspend the outer Suspense subtree (outer effects and inner fallback effects should be destroyed)
1417
// (This check also ensures we don't destroy effects for mounted inner fallback.)
1436
'Text:OuterFallback create layout',
1437
]);
1438
expect(Scheduler).toFlushAndYield(['Text:OuterFallback create passive']);
1360
- expect(ReactNoop.getChildren()).toEqual([
1361
- spanHidden('Outer'),
1362
- spanHidden('Inner'),
1363
- spanHidden('InnerFallback'),
1364
- span('OuterFallback'),
1365
- ]);
1439
+ expect(ReactNoop).toMatchRenderedOutput(
1440
+ <>
1441
+ <span prop="Outer" hidden={true} />
1442
+ <span prop="Inner" hidden={true} />
1443
+ <span prop="InnerFallback" hidden={true} />
1444
+ <span prop="OuterFallback" />
1445
+ </>,
1446
+ );
1447
1448
// Resolve both suspended trees.
1449
await act(async () => {
1465
'AsyncText:OuterAsync_1 create passive',
1466
'AsyncText:InnerAsync_1 create passive',
1467
]);
1387
- expect(ReactNoop.getChildren()).toEqual([
1388
- span('Outer'),
1389
- span('OuterAsync_1'),
1390
- span('Inner'),
1391
- span('InnerAsync_1'),
1392
- ]);
1468
+ expect(ReactNoop).toMatchRenderedOutput(
1469
+ <>
1470
+ <span prop="Outer" />
1471
+ <span prop="OuterAsync_1" />
1472
+ <span prop="Inner" />
1473
+ <span prop="InnerAsync_1" />
1474
+ </>,
1475
+ );
1476
});
1477
1478
// @gate enableLegacyCache
1510
'Text:Inside create passive',
1511
'Text:Outside create passive',
1512
]);
1430
- expect(ReactNoop.getChildren()).toEqual([
1431
- span('Inside'),
1432
- span('Outside'),
1433
- ]);
1513
+ expect(ReactNoop).toMatchRenderedOutput(
1514
+ <>
1515
+ <span prop="Inside" />
1516
+ <span prop="Outside" />
1517
+ </>,
1518
+ );
1519
1520
// Suspend the outer shell
1521
act(() => {
1530
'Text:Fallback:Outside render',
1531
'Text:Outside render',
1532
]);
1448
- expect(ReactNoop.getChildren()).toEqual([
1449
- span('Inside'),
1450
- span('Outside'),
1451
- ]);
1533
+ expect(ReactNoop).toMatchRenderedOutput(
1534
+ <>
1535
+ <span prop="Inside" />
1536
+ <span prop="Outside" />
1537
+ </>,
1538
+ );
1539
1540
// Timing out should commit the fallback and destroy inner layout effects.
1541
await advanceTimers(1000);
1548
'Text:Fallback:Inside create passive',
1549
'Text:Fallback:Outside create passive',
1550
]);
1464
- expect(ReactNoop.getChildren()).toEqual([
1465
- spanHidden('Inside'),
1466
- span('Fallback:Inside'),
1467
- span('Fallback:Outside'),
1468
- span('Outside'),
1469
- ]);
1551
+ expect(ReactNoop).toMatchRenderedOutput(
1552
+ <>
1553
+ <span prop="Inside" hidden={true} />
1554
+ <span prop="Fallback:Inside" />
1555
+ <span prop="Fallback:Outside" />
1556
+ <span prop="Outside" />
1557
+ </>,
1558
+ );
1559
1560
// Suspend the fallback and verify that it's effects get cleaned up as well
1561
act(() => {
1575
'Text:Fallback:Outside render',
1576
'Text:Outside render',
1577
]);
1489
- expect(ReactNoop.getChildren()).toEqual([
1490
- spanHidden('Inside'),
1491
- span('Fallback:Inside'),
1492
- span('Fallback:Outside'),
1493
- span('Outside'),
1494
- ]);
1578
+ expect(ReactNoop).toMatchRenderedOutput(
1579
+ <>
1580
+ <span prop="Inside" hidden={true} />
1581
+ <span prop="Fallback:Inside" />
1582
+ <span prop="Fallback:Outside" />
1583
+ <span prop="Outside" />
1584
+ </>,
1585
+ );
1586
1587
// Timing out should commit the inner fallback and destroy outer fallback layout effects.
1588
await advanceTimers(1000);
1593
expect(Scheduler).toFlushAndYield([
1594
'Text:Fallback:Fallback create passive',
1595
]);
1505
- expect(ReactNoop.getChildren()).toEqual([
1506
- spanHidden('Inside'),
1507
- spanHidden('Fallback:Inside'),
1508
- span('Fallback:Fallback'),
1509
- span('Fallback:Outside'),
1510
- span('Outside'),
1511
- ]);
1596
+ expect(ReactNoop).toMatchRenderedOutput(
1597
+ <>
1598
+ <span prop="Inside" hidden={true} />
1599
+ <span prop="Fallback:Inside" hidden={true} />
1600
+ <span prop="Fallback:Fallback" />
1601
+ <span prop="Fallback:Outside" />
1602
+ <span prop="Outside" />
1603
+ </>,
1604
+ );
1605
1606
// Resolving both resources should cleanup fallback effects and recreate main effects
1607
await act(async () => {
1620
'Text:Fallback:Outside destroy passive',
1621
'AsyncText:OutsideAsync create passive',
1622
]);
1530
- expect(ReactNoop.getChildren()).toEqual([
1531
- span('Inside'),
1532
- span('OutsideAsync'),
1533
- span('Outside'),
1534
- ]);
1623
+ expect(ReactNoop).toMatchRenderedOutput(
1624
+ <>
1625
+ <span prop="Inside" />
1626
+ <span prop="OutsideAsync" />
1627
+ <span prop="Outside" />
1628
+ </>,
1629
+ );
1630
});
1631
1632
// @gate enableLegacyCache
1664
'Text:Inside create passive',
1665
'Text:Outside create passive',
1666
]);
1572
- expect(ReactNoop.getChildren()).toEqual([
1573
- span('Inside'),
1574
- span('Outside'),
1575
- ]);
1667
+ expect(ReactNoop).toMatchRenderedOutput(
1668
+ <>
1669
+ <span prop="Inside" />
1670
+ <span prop="Outside" />
1671
+ </>,
1672
+ );
1673
1674
// Suspend both the outer boundary and the fallback
1675
act(() => {
1697
'Text:Fallback:Fallback create passive',
1698
'Text:Fallback:Outside create passive',
1699
]);
1603
- expect(ReactNoop.getChildren()).toEqual([
1604
- spanHidden('Inside'),
1605
- span('Fallback:Fallback'),
1606
- span('Fallback:Outside'),
1607
- span('Outside'),
1608
- ]);
1700
+ expect(ReactNoop).toMatchRenderedOutput(
1701
+ <>
1702
+ <span prop="Inside" hidden={true} />
1703
+ <span prop="Fallback:Fallback" />
1704
+ <span prop="Fallback:Outside" />
1705
+ <span prop="Outside" />
1706
+ </>,
1707
+ );
1708
1709
// Resolving the inside fallback
1710
await act(async () => {
1720
'Text:Fallback:Inside create passive',
1721
'AsyncText:FallbackAsync create passive',
1722
]);
1624
- expect(ReactNoop.getChildren()).toEqual([
1625
- spanHidden('Inside'),
1626
- span('Fallback:Inside'),
1627
- span('FallbackAsync'),
1628
- span('Fallback:Outside'),
1629
- span('Outside'),
1630
- ]);
1723
+ expect(ReactNoop).toMatchRenderedOutput(
1724
+ <>
1725
+ <span prop="Inside" hidden={true} />
1726
+ <span prop="Fallback:Inside" />
1727
+ <span prop="FallbackAsync" />
1728
+ <span prop="Fallback:Outside" />
1729
+ <span prop="Outside" />
1730
+ </>,
1731
+ );
1732
1733
// Resolving the outer fallback only
1734
await act(async () => {
1747
'Text:Fallback:Outside destroy passive',
1748
'AsyncText:OutsideAsync create passive',
1749
]);
1649
- expect(ReactNoop.getChildren()).toEqual([
1650
- span('Inside'),
1651
- span('OutsideAsync'),
1652
- span('Outside'),
1653
- ]);
1750
+ expect(ReactNoop).toMatchRenderedOutput(
1751
+ <>
1752
+ <span prop="Inside" />
1753
+ <span prop="OutsideAsync" />
1754
+ <span prop="Outside" />
1755
+ </>,
1756
+ );
1757
});
1758
1759
// @gate enableLegacyCache
1788
'Text:Inside create passive',
1789
'Text:Outside create passive',
1790
]);
1688
- expect(ReactNoop.getChildren()).toEqual([
1689
- span('Inside'),
1690
- span('Outside'),
1691
- ]);
1791
+ expect(ReactNoop).toMatchRenderedOutput(
1792
+ <>
1793
+ <span prop="Inside" />
1794
+ <span prop="Outside" />
1795
+ </>,
1796
+ );
1797
1798
// Suspending a component in the middle of the tree
1799
// should still properly cleanup effects deeper in the tree
1805
'Text:Fallback render',
1806
'Text:Outside render',
1807
]);
1703
- expect(ReactNoop.getChildren()).toEqual([
1704
- span('Inside'),
1705
- span('Outside'),
1706
- ]);
1808
+ expect(ReactNoop).toMatchRenderedOutput(
1809
+ <>
1810
+ <span prop="Inside" />
1811
+ <span prop="Outside" />
1812
+ </>,
1813
+ );
1814
1815
// Timing out should commit the inner fallback and destroy outer fallback layout effects.
1816
await advanceTimers(1000);
1819
'Text:Fallback create layout',
1820
]);
1821
expect(Scheduler).toFlushAndYield(['Text:Fallback create passive']);
1715
- expect(ReactNoop.getChildren()).toEqual([
1716
- spanHidden('Inside'),
1717
- span('Fallback'),
1718
- span('Outside'),
1719
- ]);
1822
+ expect(ReactNoop).toMatchRenderedOutput(
1823
+ <>
1824
+ <span prop="Inside" hidden={true} />
1825
+ <span prop="Fallback" />
1826
+ <span prop="Outside" />
1827
+ </>,
1828
+ );
1829
1830
// Resolving should cleanup.
1831
await act(async () => {
1837
'Text:Inside create layout',
1838
'Text:Fallback destroy passive',
1839
]);
1731
- expect(ReactNoop.getChildren()).toEqual([
1732
- span('Inside'),
1733
- span('Outside'),
1734
- ]);
1840
+ expect(ReactNoop).toMatchRenderedOutput(
1841
+ <>
1842
+ <span prop="Inside" />
1843
+ <span prop="Outside" />
1844
+ </>,
1845
+ );
1846
});
1847
1848
describe('that throw errors', () => {
1908
'Text:Inside create passive',
1909
'Text:Outside create passive',
1910
]);
1800
- expect(ReactNoop.getChildren()).toEqual([
1801
- span('ThrowsInDidMount'),
1802
- span('Inside'),
1803
- span('Outside'),
1804
- ]);
1911
+ expect(ReactNoop).toMatchRenderedOutput(
1912
+ <>
1913
+ <span prop="ThrowsInDidMount" />
1914
+ <span prop="Inside" />
1915
+ <span prop="Outside" />
1916
+ </>,
1917
+ );
1918
1919
// Schedule an update that causes React to suspend.
1920
await act(async () => {
1939
'Text:Fallback create layout',
1940
'Text:Fallback create passive',
1941
]);
1829
- expect(ReactNoop.getChildren()).toEqual([
1830
- spanHidden('ThrowsInDidMount'),
1831
- spanHidden('Inside'),
1832
- span('Fallback'),
1833
- span('Outside'),
1834
- ]);
1942
+ expect(ReactNoop).toMatchRenderedOutput(
1943
+ <>
1944
+ <span prop="ThrowsInDidMount" hidden={true} />
1945
+ <span prop="Inside" hidden={true} />
1946
+ <span prop="Fallback" />
1947
+ <span prop="Outside" />
1948
+ </>,
1949
+ );
1950
1951
// Resolve the pending suspense and throw
1952
componentDidMountShouldThrow = true;
1985
'Text:Error create layout',
1986
'Text:Error create passive',
1987
]);
1873
- expect(ReactNoop.getChildren()).toEqual([span('Error')]);
1988
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Error" />);
1989
});
1990
1991
// @gate enableLegacyCache
2048
'Text:Inside create passive',
2049
'Text:Outside create passive',
2050
]);
1936
- expect(ReactNoop.getChildren()).toEqual([
1937
- span('ThrowsInWillUnmount'),
1938
- span('Inside'),
1939
- span('Outside'),
1940
- ]);
2051
+ expect(ReactNoop).toMatchRenderedOutput(
2052
+ <>
2053
+ <span prop="ThrowsInWillUnmount" />
2054
+ <span prop="Inside" />
2055
+ <span prop="Outside" />
2056
+ </>,
2057
+ );
2058
2059
// Schedule an update that suspends and triggers our error code.
2060
await act(async () => {
2098
'Text:Error create layout',
2099
'Text:Error create passive',
2100
]);
1984
- expect(ReactNoop.getChildren()).toEqual([span('Error')]);
2101
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Error" />);
2102
});
2103
2104
// @gate enableLegacyCache
2164
'Text:Inside create passive',
2165
'Text:Outside create passive',
2166
]);
2050
- expect(ReactNoop.getChildren()).toEqual([
2051
- span('ThrowsInLayoutEffect'),
2052
- span('Inside'),
2053
- span('Outside'),
2054
- ]);
2167
+ expect(ReactNoop).toMatchRenderedOutput(
2168
+ <>
2169
+ <span prop="ThrowsInLayoutEffect" />
2170
+ <span prop="Inside" />
2171
+ <span prop="Outside" />
2172
+ </>,
2173
+ );
2174
2175
// Schedule an update that causes React to suspend.
2176
await act(async () => {
2195
'Text:Fallback create layout',
2196
'Text:Fallback create passive',
2197
]);
2079
- expect(ReactNoop.getChildren()).toEqual([
2080
- spanHidden('ThrowsInLayoutEffect'),
2081
- spanHidden('Inside'),
2082
- span('Fallback'),
2083
- span('Outside'),
2084
- ]);
2198
+ expect(ReactNoop).toMatchRenderedOutput(
2199
+ <>
2200
+ <span prop="ThrowsInLayoutEffect" hidden={true} />
2201
+ <span prop="Inside" hidden={true} />
2202
+ <span prop="Fallback" />
2203
+ <span prop="Outside" />
2204
+ </>,
2205
+ );
2206
2207
// Resolve the pending suspense and throw
2208
useLayoutEffectShouldThrow = true;
2241
'Text:Error create layout',
2242
'Text:Error create passive',
2243
]);
2123
- expect(ReactNoop.getChildren()).toEqual([span('Error')]);
2244
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Error" />);
2245
});
2246
2247
// @gate enableLegacyCache
2303
'Text:Inside create passive',
2304
'Text:Outside create passive',
2305
]);
2185
- expect(ReactNoop.getChildren()).toEqual([
2186
- span('ThrowsInLayoutEffectDestroy'),
2187
- span('Inside'),
2188
- span('Outside'),
2189
- ]);
2306
+ expect(ReactNoop).toMatchRenderedOutput(
2307
+ <>
2308
+ <span prop="ThrowsInLayoutEffectDestroy" />
2309
+ <span prop="Inside" />
2310
+ <span prop="Outside" />
2311
+ </>,
2312
+ );
2313
2314
// Schedule an update that suspends and triggers our error code.
2315
await act(async () => {
2353
'Text:Error create layout',
2354
'Text:Error create passive',
2355
]);
2233
- expect(ReactNoop.getChildren()).toEqual([span('Error')]);
2356
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Error" />);
2357
});
2358
});
2359
2401
'ClassText:Class componentDidMount',
2402
'Text:Function create passive',
2403
]);
2281
- expect(ReactNoop.getChildren()).toEqual([
2282
- span('Function'),
2283
- span('Class'),
2284
- ]);
2404
+ expect(ReactNoop).toMatchRenderedOutput(
2405
+ <>
2406
+ <span prop="Function" />
2407
+ <span prop="Class" />
2408
+ </>,
2409
+ );
2410
2411
// Schedule an update that causes React to suspend.
2412
act(() => {
2424
'ClassText:Class render',
2425
'ClassText:Fallback render',
2426
]);
2302
- expect(ReactNoop.getChildren()).toEqual([
2303
- span('Function'),
2304
- span('Class'),
2305
- ]);
2427
+ expect(ReactNoop).toMatchRenderedOutput(
2428
+ <>
2429
+ <span prop="Function" />
2430
+ <span prop="Class" />
2431
+ </>,
2432
+ );
2433
2434
await advanceTimers(1000);
2435
2439
'ClassText:Class componentWillUnmount',
2440
'ClassText:Fallback componentDidMount',
2441
]);
2315
- expect(ReactNoop.getChildren()).toEqual([
2316
- spanHidden('Function'),
2317
- spanHidden('Class'),
2318
- span('Fallback'),
2319
- ]);
2442
+ expect(ReactNoop).toMatchRenderedOutput(
2443
+ <>
2444
+ <span prop="Function" hidden={true} />
2445
+ <span prop="Class" hidden={true} />
2446
+ <span prop="Fallback" />
2447
+ </>,
2448
+ );
2449
2450
// Resolving the suspended resource should re-create inner layout effects.
2451
await act(async () => {
2457
'Suspend:Async_2',
2458
'ClassText:Class render',
2459
]);
2331
- expect(ReactNoop.getChildren()).toEqual([
2332
- spanHidden('Function'),
2333
- spanHidden('Class'),
2334
- span('Fallback'),
2335
- ]);
2460
+ expect(ReactNoop).toMatchRenderedOutput(
2461
+ <>
2462
+ <span prop="Function" hidden={true} />
2463
+ <span prop="Class" hidden={true} />
2464
+ <span prop="Fallback" />
2465
+ </>,
2466
+ );
2467
2468
// Resolving the suspended resource should re-create inner layout effects.
2469
await act(async () => {
2482
'AsyncText:Async_1 create passive',
2483
'AsyncText:Async_2 create passive',
2484
]);
2354
- expect(ReactNoop.getChildren()).toEqual([
2355
- span('Function'),
2356
- span('Async_1'),
2357
- span('Async_2'),
2358
- span('Class'),
2359
- ]);
2485
+ expect(ReactNoop).toMatchRenderedOutput(
2486
+ <>
2487
+ <span prop="Function" />
2488
+ <span prop="Async_1" />
2489
+ <span prop="Async_2" />
2490
+ <span prop="Class" />
2491
+ </>,
2492
+ );
2493
2494
await act(async () => {
2495
ReactNoop.render(null);
2560
'ClassText:Class componentDidMount',
2561
'Text:Function create passive',
2562
]);
2430
- expect(ReactNoop.getChildren()).toEqual([
2431
- span('Function'),
2432
- span('Suspender'),
2433
- span('Class'),
2434
- ]);
2563
+ expect(ReactNoop).toMatchRenderedOutput(
2564
+ <>
2565
+ <span prop="Function" />
2566
+ <span prop="Suspender" />
2567
+ <span prop="Class" />
2568
+ </>,
2569
+ );
2570
2571
// Schedule an update that causes React to suspend.
2572
textToRead = 'A';
2580
'ClassText:Class render',
2581
'ClassText:Fallback render',
2582
]);
2448
- expect(ReactNoop.getChildren()).toEqual([
2449
- span('Function'),
2450
- span('Suspender'),
2451
- span('Class'),
2452
- ]);
2583
+ expect(ReactNoop).toMatchRenderedOutput(
2584
+ <>
2585
+ <span prop="Function" />
2586
+ <span prop="Suspender" />
2587
+ <span prop="Class" />
2588
+ </>,
2589
+ );
2590
2591
await advanceTimers(1000);
2592
2596
'ClassText:Class componentWillUnmount',
2597
'ClassText:Fallback componentDidMount',
2598
]);
2462
- expect(ReactNoop.getChildren()).toEqual([
2463
- spanHidden('Function'),
2464
- spanHidden('Suspender'),
2465
- spanHidden('Class'),
2466
- span('Fallback'),
2467
- ]);
2599
+ expect(ReactNoop).toMatchRenderedOutput(
2600
+ <>
2601
+ <span prop="Function" hidden={true} />
2602
+ <span prop="Suspender" hidden={true} />
2603
+ <span prop="Class" hidden={true} />
2604
+ <span prop="Fallback" />
2605
+ </>,
2606
+ );
2607
2608
// Resolving the suspended resource should re-create inner layout effects.
2609
textToRead = 'B';
2616
'Suspend:B',
2617
'ClassText:Class render',
2618
]);
2480
- expect(ReactNoop.getChildren()).toEqual([
2481
- spanHidden('Function'),
2482
- spanHidden('Suspender'),
2483
- spanHidden('Class'),
2484
- span('Fallback'),
2485
- ]);
2619
+ expect(ReactNoop).toMatchRenderedOutput(
2620
+ <>
2621
+ <span prop="Function" hidden={true} />
2622
+ <span prop="Suspender" hidden={true} />
2623
+ <span prop="Class" hidden={true} />
2624
+ <span prop="Fallback" />
2625
+ </>,
2626
+ );
2627
2628
// Resolving the suspended resource should re-create inner layout effects.
2629
await act(async () => {
2637
'Text:Function create layout',
2638
'ClassText:Class componentDidMount',
2639
]);
2499
- expect(ReactNoop.getChildren()).toEqual([
2500
- span('Function'),
2501
- span('Suspender'),
2502
- span('Class'),
2503
- ]);
2640
+ expect(ReactNoop).toMatchRenderedOutput(
2641
+ <>
2642
+ <span prop="Function" />
2643
+ <span prop="Suspender" />
2644
+ <span prop="Class" />
2645
+ </>,
2646
+ );
2647
2648
await act(async () => {
2649
ReactNoop.render(null);
2752
'RefCheckerOuter refCallback value? true',
2753
'RefCheckerOuter create layout refObject? true refCallback? true',
2754
]);
2612
- expect(ReactNoop.getChildren()).toEqual([]);
2755
+ expect(ReactNoop).toMatchRenderedOutput(null);
2756
2757
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
2758
act(() => {
2773
'Text:Fallback create layout',
2774
'Text:Fallback create passive',
2775
]);
2633
- expect(ReactNoop.getChildren()).toEqual([span('Fallback')]);
2776
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Fallback" />);
2777
2778
// Resolving the suspended resource should re-create inner layout effects.
2779
await act(async () => {
2786
'Text:Fallback destroy passive',
2787
'AsyncText:Async create passive',
2788
]);
2646
- expect(ReactNoop.getChildren()).toEqual([span('Async')]);
2789
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Async" />);
2790
2791
await act(async () => {
2792
ReactNoop.renderLegacySyncRoot(null);
2799
'RefCheckerInner:refCallback destroy layout ref? false',
2800
'AsyncText:Async destroy passive',
2801
]);
2659
- expect(ReactNoop.getChildren()).toEqual([]);
2802
+ expect(ReactNoop).toMatchRenderedOutput(null);
2803
});
2804
2805
// @gate enableLegacyCache
2828
'RefCheckerOuter refCallback value? true',
2829
'RefCheckerOuter create layout refObject? true refCallback? true',
2830
]);
2688
- expect(ReactNoop.getChildren()).toEqual([
2689
- span('refObject'),
2690
- span('refCallback'),
2691
- ]);
2831
+ expect(ReactNoop).toMatchRenderedOutput(
2832
+ <>
2833
+ <span prop="refObject" />
2834
+ <span prop="refCallback" />
2835
+ </>,
2836
+ );
2837
2838
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
2839
act(() => {
2855
'RefCheckerInner:refCallback destroy layout ref? false',
2856
'Text:Fallback create layout',
2857
]);
2713
- expect(ReactNoop.getChildren()).toEqual([
2714
- spanHidden('refObject'),
2715
- spanHidden('refCallback'),
2716
- span('Fallback'),
2717
- ]);
2858
+ expect(ReactNoop).toMatchRenderedOutput(
2859
+ <>
2860
+ <span prop="refObject" hidden={true} />
2861
+ <span prop="refCallback" hidden={true} />
2862
+ <span prop="Fallback" />
2863
+ </>,
2864
+ );
2865
2866
// Resolving the suspended resource should re-create inner layout effects.
2867
await act(async () => {
2882
'Text:Fallback destroy passive',
2883
'AsyncText:Async create passive',
2884
]);
2738
- expect(ReactNoop.getChildren()).toEqual([
2739
- span('Async'),
2740
- span('refObject'),
2741
- span('refCallback'),
2742
- ]);
2885
+ expect(ReactNoop).toMatchRenderedOutput(
2886
+ <>
2887
+ <span prop="Async" />
2888
+ <span prop="refObject" />
2889
+ <span prop="refCallback" />
2890
+ </>,
2891
+ );
2892
2893
await act(async () => {
2894
ReactNoop.render(null);
2901
'RefCheckerInner:refCallback destroy layout ref? false',
2902
'AsyncText:Async destroy passive',
2903
]);
2755
- expect(ReactNoop.getChildren()).toEqual([]);
2904
+ expect(ReactNoop).toMatchRenderedOutput(null);
2905
});
2906
2907
// @gate enableLegacyCache
2941
'RefCheckerOuter refCallback value? true',
2942
'RefCheckerOuter create layout refObject? true refCallback? true',
2943
]);
2795
- expect(ReactNoop.getChildren()).toEqual([]);
2944
+ expect(ReactNoop).toMatchRenderedOutput(null);
2945
2946
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
2947
act(() => {
2965
'RefCheckerInner:refCallback destroy layout ref? false',
2966
'Text:Fallback create layout',
2967
]);
2819
- expect(ReactNoop.getChildren()).toEqual([span('Fallback')]);
2968
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Fallback" />);
2969
2970
// Resolving the suspended resource should re-create inner layout effects.
2971
await act(async () => {
2988
'Text:Fallback destroy passive',
2989
'AsyncText:Async create passive',
2990
]);
2842
- expect(ReactNoop.getChildren()).toEqual([span('Async')]);
2991
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Async" />);
2992
2993
await act(async () => {
2994
ReactNoop.render(null);
3001
'RefCheckerInner:refCallback destroy layout ref? false',
3002
'AsyncText:Async destroy passive',
3003
]);
2855
- expect(ReactNoop.getChildren()).toEqual([]);
3004
+ expect(ReactNoop).toMatchRenderedOutput(null);
3005
});
3006
3007
// @gate enableLegacyCache
3045
'RefCheckerOuter refCallback value? true',
3046
'RefCheckerOuter create layout refObject? true refCallback? true',
3047
]);
2899
- expect(ReactNoop.getChildren()).toEqual([]);
3048
+ expect(ReactNoop).toMatchRenderedOutput(null);
3049
3050
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
3051
act(() => {
3069
'RefCheckerInner:refCallback destroy layout ref? false',
3070
'Text:Fallback create layout',
3071
]);
2923
- expect(ReactNoop.getChildren()).toEqual([span('Fallback')]);
3072
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Fallback" />);
3073
3074
// Resolving the suspended resource should re-create inner layout effects.
3075
await act(async () => {
3092
'Text:Fallback destroy passive',
3093
'AsyncText:Async create passive',
3094
]);
2946
- expect(ReactNoop.getChildren()).toEqual([span('Async')]);
3095
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Async" />);
3096
3097
await act(async () => {
3098
ReactNoop.render(null);
3105
'RefCheckerInner:refCallback destroy layout ref? false',
3106
'AsyncText:Async destroy passive',
3107
]);
2959
- expect(ReactNoop.getChildren()).toEqual([]);
3108
+ expect(ReactNoop).toMatchRenderedOutput(null);
3109
});
3110
3111
// @gate enableLegacyCache
3158
'RefChecker create layout ref? true',
3159
'App create layout ref? true',
3160
]);
3012
- expect(ReactNoop.getChildren()).toEqual([]);
3161
+ expect(ReactNoop).toMatchRenderedOutput(null);
3162
3163
// Suspend the inner Suspense subtree (only inner effects should be destroyed)
3164
act(() => {
3175
'RefChecker destroy layout ref? true',
3176
'Text:Fallback create layout',
3177
]);
3029
- expect(ReactNoop.getChildren()).toEqual([span('Fallback')]);
3178
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Fallback" />);
3179
3180
// Resolving the suspended resource should re-create inner layout effects.
3181
await act(async () => {
3191
'Text:Fallback destroy passive',
3192
'AsyncText:Async create passive',
3193
]);
3045
- expect(ReactNoop.getChildren()).toEqual([span('Async')]);
3194
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Async" />);
3195
3196
await act(async () => {
3197
ReactNoop.render(null);
3202
'RefChecker destroy layout ref? true',
3203
'AsyncText:Async destroy passive',
3204
]);
3056
- expect(ReactNoop.getChildren()).toEqual([]);
3205
+ expect(ReactNoop).toMatchRenderedOutput(null);
3206
});
3207
3208
describe('that throw errors', () => {
3264
'Text:Inside create passive',
3265
'Text:Outside create passive',
3266
]);
3118
- expect(ReactNoop.getChildren()).toEqual([
3119
- span('ThrowsInRefCallback'),
3120
- span('Inside'),
3121
- span('Outside'),
3122
- ]);
3267
+ expect(ReactNoop).toMatchRenderedOutput(
3268
+ <>
3269
+ <span prop="ThrowsInRefCallback" />
3270
+ <span prop="Inside" />
3271
+ <span prop="Outside" />
3272
+ </>,
3273
+ );
3274
3275
// Schedule an update that causes React to suspend.
3276
await act(async () => {
3295
'Text:Fallback create layout',
3296
'Text:Fallback create passive',
3297
]);
3147
- expect(ReactNoop.getChildren()).toEqual([
3148
- spanHidden('ThrowsInRefCallback'),
3149
- spanHidden('Inside'),
3150
- span('Fallback'),
3151
- span('Outside'),
3152
- ]);
3298
+ expect(ReactNoop).toMatchRenderedOutput(
3299
+ <>
3300
+ <span prop="ThrowsInRefCallback" hidden={true} />
3301
+ <span prop="Inside" hidden={true} />
3302
+ <span prop="Fallback" />
3303
+ <span prop="Outside" />
3304
+ </>,
3305
+ );
3306
3307
// Resolve the pending suspense and throw
3308
useRefCallbackShouldThrow = true;
3341
'Text:Error create layout',
3342
'Text:Error create passive',
3343
]);
3191
- expect(ReactNoop.getChildren()).toEqual([span('Error')]);
3344
+ expect(ReactNoop).toMatchRenderedOutput(<span prop="Error" />);
3345
});
3346
});
3347
});