@samitouri / QOS-React-2 / commits / 8a83073753

[test] Fix DevTools regression tests (#35501)

Sebastian "Sebbie" Silbermann committed Jan 13, 2026 at 16:00 UTC 8a83073753125156d62db14726e8527706411962
1 file changed +93 -2
packages/react-devtools-shared/src/__tests__/store-test.js
+93 -2
@@ -7,7 +7,12 @@
7 * @flow
8 */
9
10 +import semver from 'semver';
11 +
12 import {getVersionedRenderImplementation} from './utils';
13 +import {ReactVersion} from '../../../../ReactVersions';
14 +
15 +const ReactVersionTestingAgainst = process.env.REACT_VERSION || ReactVersion;
16
17 describe('Store', () => {
18 let React;
@@ -3143,8 +3148,9 @@ describe('Store', () => {
3148 expect(store).toMatchInlineSnapshot(``);
3149 });
3150
3146 - // @reactVersion >= 17.0
3147 - it('should track suspended by in filtered fallback', async () => {
3151 + // Can't suspend the root in React 17.
3152 + // @reactVersion >= 18.0
3153 + it('should track suspended-by in filtered fallback suspending the root', async () => {
3154 function IgnoreMe({promise}) {
3155 return readValue(promise);
3156 }
@@ -3196,6 +3202,91 @@ describe('Store', () => {
3202 `);
3203 });
3204
3205 + // @reactVersion >= 17.0
3206 + it('should track suspended-by in filtered fallback', async () => {
3207 + function IgnoreMe({promise}) {
3208 + return readValue(promise);
3209 + }
3210 +
3211 + function Component({promise}) {
3212 + if (promise) {
3213 + return readValue(promise);
3214 + }
3215 + return null;
3216 + }
3217 +
3218 + await actAsync(
3219 + async () =>
3220 + (store.componentFilters = [createDisplayNameFilter('^IgnoreMe', true)]),
3221 + );
3222 +
3223 + let resolveFallback;
3224 + const fallbackPromise = new Promise(resolve => {
3225 + resolveFallback = resolve;
3226 + });
3227 + let resolveContent;
3228 + const contentPromise = new Promise(resolve => {
3229 + resolveContent = resolve;
3230 + });
3231 +
3232 + await actAsync(() =>
3233 + render(
3234 + <React.Suspense
3235 + fallback={<Component key="root-fallback" />}
3236 + name="root">
3237 + <React.Suspense
3238 + name="main"
3239 + fallback={<IgnoreMe promise={fallbackPromise} />}>
3240 + <Component promise={contentPromise} />
3241 + </React.Suspense>
3242 + </React.Suspense>,
3243 + ),
3244 + );
3245 +
3246 + if (semver.lt(ReactVersionTestingAgainst, '18.0.0')) {
3247 + // React 17 commits partial trees hidden which causes the "main"
3248 + // Suspense boundary to be included.
3249 + // React 18 and upwards excluded partial tree entirely.
3250 + expect(store).toMatchInlineSnapshot(`
3251 + [root]
3252 + ▾ <Suspense name="root">
3253 + <Component key="root-fallback">
3254 + [suspense-root] rects={null}
3255 + <Suspense name="root" rects={null}>
3256 + <Suspense name="main" rects={null}>
3257 + `);
3258 + } else {
3259 + expect(store).toMatchInlineSnapshot(`
3260 + [root]
3261 + ▾ <Suspense name="root">
3262 + <Component key="root-fallback">
3263 + [suspense-root] rects={null}
3264 + <Suspense name="root" rects={null}>
3265 + `);
3266 + }
3267 +
3268 + await actAsync(() => resolveFallback('loading'));
3269 + expect(store).toMatchInlineSnapshot(`
3270 + [root]
3271 + ▾ <Suspense name="root">
3272 + <Suspense name="main">
3273 + [suspense-root] rects={null}
3274 + <Suspense name="root" rects={null}>
3275 + <Suspense name="main" rects={null}>
3276 + `);
3277 +
3278 + await actAsync(() => resolveContent('content'));
3279 + expect(store).toMatchInlineSnapshot(`
3280 + [root]
3281 + ▾ <Suspense name="root">
3282 + ▾ <Suspense name="main">
3283 + <Component>
3284 + [suspense-root] rects={null}
3285 + <Suspense name="root" rects={null}>
3286 + <Suspense name="main" rects={null}>
3287 + `);
3288 + });
3289 +
3290 // @reactVersion >= 19
3291 it('should keep suspended boundaries in the Suspense tree but not hidden Activity', async () => {
3292 const Activity = React.Activity || React.unstable_Activity;