Repository navigation
Desktop testing: declare and select WDIO cases by input lane, platform and scope - #4464
Merged
Merged
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Finish part 1 of the input-lane work started in f5a90cd. Cases declare how they run with desktopIt, and a run selects the cases that apply to its input lane, platform and scope and accounts for everything it excludes. desktop-driver - Add pure case selection and click-mode resolution, and move the requirement preflight and click-mode helpers here. - Add the authoring/input leaf export so config-loading code can import scope helpers from source without the authoring index. desktop-test - Report the lane: a lane run is incomplete when it has skipped or undeclared-unsupported results, an empty selection or nothing executed. - Add the Jasmine adapter (desktop-test/jasmine) with desktopIt and desktopDescribe, plus config-level test scopes and --input. storybook-desktop - Add --input accessible|physical to storybook test, driver and smoke. The lane comes from the flag, DESKTOP_INPUT or the attached driver. - Select cases before they run, resolve declared gaps, assess each cohort, and reject direct input calls in declared cases at extraction. - Fail closed when an accessible lane attaches to a driver that does not mask keyboard, physical click and wheel input. native-core and apps/E2E - Migrate the native-core Callout and FocusZone tests and ButtonV1.spec.win.ts to desktopIt. Update the package references and add patch changesets. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Bundle size reportTree-shaken, minified production esbuild bundles with React and React Native runtimes externalized.
The job is advisory: size changes are reported but do not fail the pull request. Bundle or analysis errors still fail. |
Jason Morse (JasonVMo)
enabled auto-merge (squash)
November 7, 2026 02:11
Vladimir Morozov (vmoroz)
approved these changes
Nov 7, 2026
Jason Morse (JasonVMo)
added a commit
that referenced
this pull request
Nov 7, 2026
Integrate merged phase 1 (#4464) and the package-version release without rewriting phase 2 history. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This was referenced Nov 7, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Platforms Impacted
Description of changes
Part 1 of 3 in a planned sequence for controlling and assessing physical and accessible input in desktop tests. WDIO cases now declare how they run, and a run selects the cases that apply to its input lane, platform and scope. This is test tooling only: no product or native code and no CI workflow changes. The follow-ups are separate PRs: migrate the remaining story callbacks and replace their
skipgates, split CI into accessible and physical lanes, then enforce and attribute input policy in the session.Related: #4349 and #4431 (Win32 Storybook accessibility and physical-input CI lanes). This PR changes no workflow, so lane CI is left to the follow-ups.
Declaring a case.
desktopIt(name, descriptor?, run)declares a Storybook case.desktopItanddesktopDescribefrom@fluentui-react-native/desktop-test/jasminedeclare WebdriverIO Jasmine specs. The descriptor is a strict static literal:requiresinputaccessible,physicalorboth. Defaults to whatrequiresderives, elseboth, and can only narrow a derivedboth.platformsmacos,windows,win32) as an allowlist or a!negation list, never mixed. Omitted means all.scope{ 'rn.renderer': ['fabric'] }. Consumers add their own keys through the desktop config'stestScopesandtestScope.unsupported,quarantineexpiresdate for quarantine) that replace run-timeskip. An expired quarantine fails the run.keyboard,physical-clickandwheelderivephysical,accessibility-clickderivesaccessible, and the rest deriveboth. The newclickrequirement is lane-neutral:element.click()is an accessibility click in the accessible lane and a physical click in the physical lane.Selecting and accounting.
storybook test,driverandsmoketake--input accessibleor--input physical. Without the flag the lane comes fromDESKTOP_INPUT, then from the driver atestattaches to. With no lane, every case runs as before (compatibility mode).test --listwith their first reason.test --input accessiblestops as an infrastructure failure when an attached driver does not report all three as unavailable.incomplete, not passed, when it has a run-time skip, an undeclared unsupported case, an empty selection or nothing executed. A failure outranks incomplete.browser.keys,setValue,addValue,clearValueand key, pointer or wheel actions in any case that can run in the accessible lane, unless the case declares the matching requirement.By package.
desktop-driver: descriptor types and validation (authoring/input), pure selection and click-mode resolution (authoring/selection), the requirement preflight, and the union of configured and environment input masks inNativeDesktopHost. The newauthoring/inputexport is a leaf with only type imports, so config-loading code can use it from source.desktop-test: lane-aware reporting and run summaries (reporting/lane), the Jasmine adapter (./jasmine),--input, and validatedtestScopesandtestScope.storybook-desktop:--inputon the CLI, manifestcasesextraction, selection and lane verdicts (testing/selection,testing/laneVerdict), the direct-call check, and thedesktopIthelper.native-core: the Callout, legacy Callout and FocusZone story tests usedesktopIt(22 cases). All 20 run-timeskip(calls becomerequiresand declared gaps, such as the Win32 Tab-exit gap (Components: Add popup-family transactions and owner-relative focus restoration #4377).apps/E2E:ButtonV1.spec.win.tsis migrated as the Jasmine pilot.desktop-driver,desktop-testandstorybook-desktoptogether;native-core).Known limits.
--input accessibleworks on a managed Mac, and macOS lanes are a follow-up.DESKTOP_REPORT_CONTEXT) ignores the parent's lane option and enforces its own cohort.rn.rendereris not re-verified against the session's reported renderer.desktop-testlane run against the unmigratedapps/E2Especs stops and lists the undeclared specs until they migrate.--input allis not implemented.Review order:
authoring/input.tsandauthoring/selection.tsin desktop-driver, thenreporting/lane.tsin desktop-test andtesting/selection.tsin storybook-desktop. The rest follows from them.Verification
Automated, in each changed workspace (desktop-driver, desktop-test, storybook-desktop, desktop-driver-mcp, native-core, apps/E2E):
yarn buildandyarn lint: passed in all six.yarn format: passed in desktop-driver, desktop-test, storybook-desktop and native-core.yarn test: passed. desktop-driver 842 tests (61 skipped), desktop-test 168, storybook-desktop 285 (2 skipped), desktop-driver-mcp 26, native-core 56, apps/E2E 7. The runs include the real-WDIO lane contracts against a fake host (contractsin desktop-test,wdioRunnerin storybook-desktop).From the repository root:
yarn oxfmt --check: passed.yarn check-agent-instructions: passed.yarn lage test-links: passed, 90 tasks, 0 failed.yarn change:check: passed.yarn clean-lage-cache, thenyarn lage buildci: passed, 178 tasks, 0 failed.Not run: native or physical-input runs against a real app and driver, and hosted CI for lane runs (this PR changes no workflow). The contracts use a fake host, so they are not native qualification.
skip(reason)at run time. A run cannot select by input modality, platform or scope.requires,platforms,scopeand known gaps.--input accessibleor--input physicalselects them, masks the host for the accessible lane and reports what it excluded.Pull request checklist
This PR has considered (when applicable):
Keyboard accessibility, VoiceOver and internationalization do not apply: there are no product UI or native behavior changes.