Skip to content

Commit 15bac5c

Browse files
committed
Test for failing Suspense fallback reconciliaton in DevTools
1 parent 534bed5 commit 15bac5c

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

packages/react-devtools-shared/src/__tests__/store-test.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2696,4 +2696,77 @@ describe('Store', () => {
26962696
<ClientComponent key="D">
26972697
`);
26982698
});
2699+
2700+
// @reactVersion >= 19.0
2701+
it('can reconcile Suspense in fallback positions', async () => {
2702+
let resolveFallback;
2703+
const fallbackPromise = new Promise(resolve => {
2704+
resolveFallback = resolve;
2705+
});
2706+
let resolveContent;
2707+
const contentPromise = new Promise(resolve => {
2708+
resolveContent = resolve;
2709+
});
2710+
2711+
function Component({children, promise}) {
2712+
if (promise) {
2713+
React.use(promise);
2714+
}
2715+
return <div>{children}</div>;
2716+
}
2717+
2718+
await actAsync(() =>
2719+
render(
2720+
<React.Suspense
2721+
name="content"
2722+
fallback={
2723+
<React.Suspense
2724+
name="fallback"
2725+
fallback={
2726+
<Component key="fallback-fallback">
2727+
Loading fallback...
2728+
</Component>
2729+
}>
2730+
<Component key="fallback-content" promise={fallbackPromise}>
2731+
Loading...
2732+
</Component>
2733+
</React.Suspense>
2734+
}>
2735+
<Component key="content" promise={contentPromise}>
2736+
done
2737+
</Component>
2738+
</React.Suspense>,
2739+
),
2740+
);
2741+
2742+
expect(store).toMatchInlineSnapshot(`
2743+
[root]
2744+
▾ <Suspense name="content">
2745+
▾ <Suspense name="fallback">
2746+
<Component key="fallback-fallback">
2747+
[shell]
2748+
<Suspense name="content" rects={null}>
2749+
<Suspense name="fallback" rects={null}>
2750+
`);
2751+
2752+
await actAsync(() => {
2753+
resolveFallback();
2754+
});
2755+
2756+
expect(store).toMatchInlineSnapshot(`
2757+
[root]
2758+
▾ <Suspense name="content">
2759+
▾ <Suspense name="fallback">
2760+
<Component key="fallback-content">
2761+
[shell]
2762+
<Suspense name="content" rects={null}>
2763+
<Suspense name="fallback" rects={[{x:1,y:2,width:10,height:1}]}>
2764+
`);
2765+
2766+
await actAsync(() => {
2767+
resolveContent();
2768+
});
2769+
2770+
expect(store).toMatchInlineSnapshot();
2771+
});
26992772
});

0 commit comments

Comments
 (0)