Skip to content

Commit e193be8

Browse files
authored
[Transition Tracing] Add Offscreen Test (#25035)
Add a test to make sure offscreen trees don't stop transitions from completing.
1 parent 9fcaf88 commit e193be8

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

packages/react-reconciler/src/__tests__/ReactTransitionTracing-test.js

+72
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ let act;
1616
let getCacheForType;
1717
let useState;
1818
let Suspense;
19+
let Offscreen;
1920
let startTransition;
2021

2122
let caches;
@@ -34,6 +35,7 @@ describe('ReactInteractionTracing', () => {
3435
useState = React.useState;
3536
startTransition = React.startTransition;
3637
Suspense = React.Suspense;
38+
Offscreen = React.unstable_Offscreen;
3739

3840
getCacheForType = React.unstable_getCacheForType;
3941

@@ -1362,4 +1364,74 @@ describe('ReactInteractionTracing', () => {
13621364
]);
13631365
});
13641366
});
1367+
1368+
// @gate enableTransitionTracing
1369+
it('offscreen trees should not stop transition from completing', async () => {
1370+
const transitionCallbacks = {
1371+
onTransitionStart: (name, startTime) => {
1372+
Scheduler.unstable_yieldValue(
1373+
`onTransitionStart(${name}, ${startTime})`,
1374+
);
1375+
},
1376+
onTransitionComplete: (name, startTime, endTime) => {
1377+
Scheduler.unstable_yieldValue(
1378+
`onTransitionComplete(${name}, ${startTime}, ${endTime})`,
1379+
);
1380+
},
1381+
onMarkerComplete: (transitioName, markerName, startTime, endTime) => {
1382+
Scheduler.unstable_yieldValue(
1383+
`onMarkerComplete(${transitioName}, ${markerName}, ${startTime}, ${endTime})`,
1384+
);
1385+
},
1386+
};
1387+
1388+
function App() {
1389+
return (
1390+
<React.unstable_TracingMarker name="marker">
1391+
<Suspense fallback={<Text text="Loading..." />}>
1392+
<AsyncText text="Text" />
1393+
</Suspense>
1394+
<Offscreen mode="hidden">
1395+
<Suspense fallback={<Text text="Hidden Loading..." />}>
1396+
<AsyncText text="Hidden Text" />
1397+
</Suspense>
1398+
</Offscreen>
1399+
</React.unstable_TracingMarker>
1400+
);
1401+
}
1402+
1403+
const root = ReactNoop.createRoot({
1404+
unstable_transitionCallbacks: transitionCallbacks,
1405+
});
1406+
await act(() => {
1407+
startTransition(() => root.render(<App />), {name: 'transition'});
1408+
ReactNoop.expire(1000);
1409+
advanceTimers(1000);
1410+
});
1411+
expect(Scheduler).toHaveYielded([
1412+
'Suspend [Text]',
1413+
'Loading...',
1414+
'Suspend [Hidden Text]',
1415+
'Hidden Loading...',
1416+
'onTransitionStart(transition, 0)',
1417+
]);
1418+
1419+
await act(() => {
1420+
resolveText('Text');
1421+
ReactNoop.expire(1000);
1422+
advanceTimers(1000);
1423+
});
1424+
expect(Scheduler).toHaveYielded([
1425+
'Text',
1426+
'onMarkerComplete(transition, marker, 0, 2000)',
1427+
'onTransitionComplete(transition, 0, 2000)',
1428+
]);
1429+
1430+
await act(() => {
1431+
resolveText('Hidden Text');
1432+
ReactNoop.expire(1000);
1433+
advanceTimers(1000);
1434+
});
1435+
expect(Scheduler).toHaveYielded(['Hidden Text']);
1436+
});
13651437
});

0 commit comments

Comments
 (0)