Skip to content

Add image smoke-test examples and Maestro flows to RNTester (#57306)#57306

Open
Abbondanzo wants to merge 2 commits into
react:mainfrom
Abbondanzo:export-D109316705
Open

Add image smoke-test examples and Maestro flows to RNTester (#57306)#57306
Abbondanzo wants to merge 2 commits into
react:mainfrom
Abbondanzo:export-D109316705

Conversation

@Abbondanzo

@Abbondanzo Abbondanzo commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Summary:

Adds three Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

  • Progressive JPEG (progressiveRenderingEnabled)
  • blurRadius combined with Image.prefetch (blur postprocessor over a prefetched bitmap)
  • Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Progressive JPEG is gated to Android (the prop is Android-only); the rest run on both platforms.

The Display-P3 wide-gamut example references an external sample URL as a stopgap and renders an onLoad/onError status so it degrades gracefully; it should be replaced with a committed asset in a follow-up.

A fourth example/flow (image caching via Image.queryCache) was dropped from this diff because its iOS assertion is structurally flaky: iOS queryCache reflects only NSURLCache, so a cache hit depends on an HTTP-cacheable external host plus a cache-write timing race. It is deferred to T277258227.

This diff is stacked on top of a prerequisite iOS Maestro harness fix (simulator boot-wait + driver-startup timeout + --debug-output); without it the iOS flows hang on simulator driver startup.

Changelog:
[Internal]

Reviewed By: cortinico

Differential Revision: D109316705

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Jun 22, 2026
@meta-codesync

meta-codesync Bot commented Jun 22, 2026

Copy link
Copy Markdown

@Abbondanzo has exported this pull request. If you are a Meta employee, you can view the originating Diff in D109316705.

Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 22, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
@meta-codesync meta-codesync Bot changed the title Add Android image smoke-test examples and Maestro flows to RNTester Add Android image smoke-test examples and Maestro flows to RNTester (#57306) Jun 22, 2026
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 22, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 22, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
@Abbondanzo Abbondanzo force-pushed the export-D109316705 branch 2 times, most recently from 56be22f to 6a02b9b Compare June 23, 2026 00:38
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 23, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 23, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 23, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds five Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- WebP (lossy/lossless/alpha) and AVIF format decoding
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Examples that exercise Android-specific decoding (progressive JPEG, WebP/AVIF) are gated to Android; the rest run on both platforms.

Format examples that lack a bundled asset (lossless/alpha WebP, AVIF, Display-P3) currently reference external sample URLs as a stopgap and render an onLoad/onError status so they degrade gracefully; these should be replaced with committed assets in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
Abbondanzo added a commit to Abbondanzo/react-native that referenced this pull request Jun 23, 2026
…eact#57306)

Summary:
Pull Request resolved: react#57306

Adds four Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- Image caching across a reload of the same URI (via `Image.queryCache`)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error, cache status) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Progressive JPEG is gated to Android (the prop is Android-only); the rest run on both platforms.

The Display-P3 wide-gamut example references an external sample URL as a stopgap and renders an onLoad/onError status so it degrades gracefully; it should be replaced with a committed asset in a follow-up.

Changelog:
[Internal]

Differential Revision: D109316705
@Abbondanzo Abbondanzo changed the title Add Android image smoke-test examples and Maestro flows to RNTester (#57306) Add image smoke-test examples and Maestro flows to RNTester (#57306) Jun 23, 2026

@cortinico cortinico left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

Summary:
The iOS RNTester Maestro suite is flaky because several flows assert the landing screen immediately after `launchApp`, with no wait. On a CI simulator the JS bundle hasn't rendered yet when the assertion fires, so flows fail with `Assertion is false: "Components" is visible` (e.g. `text`, `modal`) or fail downstream after entering through the shared launch helper (e.g. `pressable`). It is a race, not a deterministic failure — `flatlist`/`button` use the same pattern and pass on faster runs.

Replace the bare landing-screen `assertVisible` with `extendedWaitUntil` (30s) so the bundle has time to render:
- `helpers/launch-app-and-search.yml` (`Components`) — the shared entry path for `text`, `pressable`, `image`, and the new image smoke-test flows.
- `modal.yml`, `flatlist.yml`, `button.yml` (`Components`).
- `legacy-native-module.yml` (`APIs`).

`extendedWaitUntil` returns as soon as the element appears, so this adds no time on the happy path — only headroom on cold start.

This is the actual fix for the red iOS E2E; the earlier `spawnSync ETIMEDOUT` was the suite failing + retrying + occasionally overrunning the 10-minute per-attempt cap, not a simulator/driver-startup problem. No harness/setup changes.

Changelog: [Internal]

Differential Revision: D109742688
)

Summary:
Pull Request resolved: react#57306

Adds three Image examples to RNTester plus matching Maestro end-to-end flows, covering image-loading behaviors that previously had little or no RNTester coverage:

- Progressive JPEG (`progressiveRenderingEnabled`)
- `blurRadius` combined with `Image.prefetch` (blur postprocessor over a prefetched bitmap)
- Wide-gamut (Display-P3) vs sRGB and alpha transparency

Each example renders status text (load/error) with stable testIDs so the Maestro flows can assert behavior; the visual cases also capture screenshots. Progressive JPEG is gated to Android (the prop is Android-only); the rest run on both platforms.

The Display-P3 wide-gamut example references an external sample URL as a stopgap and renders an onLoad/onError status so it degrades gracefully; it should be replaced with a committed asset in a follow-up.

A fourth example/flow (image caching via `Image.queryCache`) was dropped from this diff because its iOS assertion is structurally flaky: iOS `queryCache` reflects only `NSURLCache`, so a cache hit depends on an HTTP-cacheable external host plus a cache-write timing race. It is deferred to T277258227.

This diff is stacked on top of a prerequisite iOS Maestro harness fix (simulator boot-wait + driver-startup timeout + `--debug-output`); without it the iOS flows hang on simulator driver startup.

Changelog:
[Internal]

Reviewed By: cortinico

Differential Revision: D109316705
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants