Sitelet https://github.com/flutter/flutter/pull/191438
Skip to content

[flutter_tools] Add tests for negative lookahead regex in test runner and batch entrypoints - #191438

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
bkonyi:investigation/issue-84270
Aug 22, 2026
Merged

auto-submit[bot] merged 4 commits into
flutter:masterfrom
bkonyi:investigation/issue-84270

Conversation

@bkonyi

@bkonyi bkonyi commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Description

Fixes #84270

The root cause of #84270 (delayed variable expansion in batch scripts stripping ! from CLI arguments like ^(?!Golden).+) was previously addressed in #106861, which removed SETLOCAL ENABLEDELAYEDEXPANSION from bin/flutter.bat, bin/dart.bat, and bin/internal/shared.bat.

However, #84270 was left open without dedicated regression tests. This PR:

  1. Adds a hermetic unit test in test_test.dart verifying that TestCommand preserves and forwards negative lookahead regexes (^(?!Golden).+) to FlutterTestRunner.
  2. Adds a case-insensitive static test in script_test.dart asserting that Windows entrypoint batch scripts do not enable delayed expansion.
  3. Unskips and modernizes the integration test in variable_expansion_windows_test.dart verifying that bin/dart.bat preserves lookahead regexes on Windows.

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
  • I signed the CLA.
  • I listed at least one issue that this PR fixes in the description above.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is test-exempt.
  • All existing and new tests are passing.

bkonyi added 2 commits August 20, 2026 19:06
… and batch entrypoints

Ensures negative lookahead regular expression syntax (e.g. ^(?!Golden).+)
is preserved and forwarded properly in the flutter test runner command and
that Windows entrypoint batch scripts do not enable delayed variable expansion.
… integration test

Also make the static check for delayed expansion in batch entrypoints case-insensitive.
@github-actions github-actions Bot added tool Affects the "flutter" command-line tool. See also t: labels. team-windows Owned by the Windows platform team labels Aug 20, 2026
@bkonyi bkonyi added the CICD Run CI/CD label Aug 20, 2026
@bkonyi
bkonyi marked this pull request as ready for review August 20, 2026 19:19
@bkonyi
bkonyi requested a review from a team as a code owner August 20, 2026 19:19

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request adds and updates tests in the Flutter tools package. It introduces a test to verify that regular expression lookaheads in the --name argument are correctly passed to the test runner, adds a test to ensure Windows entrypoint batch scripts do not enable delayed expansion, and updates a Windows integration test to verify that the Dart command does not expand variables. Feedback suggests asserting that the process exits successfully before checking its standard output in the integration test.

),
r'^(?!Golden).+',
]);
expect(result.stdout, contains(r'args: [^(?!Golden).+]'));

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.

medium

It is highly recommended to assert that the process exited successfully (exitCode == 0) before asserting on the stdout. If the process fails (e.g., if dart.bat is missing or fails to execute), the test will fail with a much clearer error message showing the stderr instead of a generic stdout mismatch.

    expect(result.exitCode, 0, reason: 'Process failed with stderr: ${result.stderr}');
    expect(result.stdout, contains(r'args: [^(?!Golden).+]'));

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done. Added the exitCode == 0 assertion with the stderr output in the reason string.

…n variable_expansion_windows_test

Addresses review comment by asserting on exitCode == 0 with stderr output in the reason string.
@bkonyi
bkonyi requested a review from loic-sharma August 20, 2026 19:58
loic-sharma
loic-sharma previously approved these changes Aug 20, 2026

@loic-sharma loic-sharma left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Very nice, thanks for adding these!

…elayed expansion substring preservation

Check for presence of (?!Golden) and absence of (?Golden) to avoid dependence on shell caret escaping.
@bkonyi bkonyi added the autosubmit Merge PR when tree becomes green via auto submit App label Aug 22, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Aug 22, 2026
Merged via the queue into flutter:master with commit 915812c Aug 22, 2026
21 of 22 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Aug 22, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Aug 22, 2026
Roll Flutter from c2437523d308 to 65c9a8dc60bc (195 revisions)

flutter/flutter@c243752...65c9a8d

2026-08-22 engine-flutter-autoroll@skia.org Roll ICU from d578f2e8b7bd to 8cc91d9b6ab9 (1 revision) (flutter/flutter#191542)
2026-08-22 engine-flutter-autoroll@skia.org Roll Skia from 666a9b3d5cf0 to ad2106c0bb64 (3 revisions) (flutter/flutter#191527)
2026-08-22 engine-flutter-autoroll@skia.org Roll Fuchsia Test Scripts from KaOq3EE4qJ9fnaaaK... to 0iCv10IlKfiilEBOU... (flutter/flutter#191524)
2026-08-22 bkonyi@google.com [flutter_tools] Add tests for negative lookahead regex in test runner and batch entrypoints (flutter/flutter#191438)
2026-08-22 engine-flutter-autoroll@skia.org Roll Skia from 0c37868737fa to 666a9b3d5cf0 (2 revisions) (flutter/flutter#191518)
2026-08-21 10456171+caroqliu@users.noreply.github.com Revert "[input] Migrate fuchsia.ui.pointerinjector to TouchSource (#190855) (flutter/flutter#191509)
2026-08-21 30870216+gaaclarke@users.noreply.github.com Fixes windows gallery benchmarks by forcing mobile layout (flutter/flutter#191507)
2026-08-21 bkonyi@google.com [flutter_tools] Restrict WebAssetServer source resolution to source map extensions (flutter/flutter#191501)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from f6900c5b8439 to 0c37868737fa (2 revisions) (flutter/flutter#191504)
2026-08-21 bkonyi@google.com Refactor `FlutterDevice.connect` and VM service discovery (flutter/flutter#191221)
2026-08-21 bkonyi@google.com [flutter_tools] Fix crash when migrating flow-style exclude lists in analysis_options.yaml (flutter/flutter#191269)
2026-08-21 269567208+reidbaker-agent@users.noreply.github.com [rules] Add packages/flutter_tools/gradle/AGENTS.md rules (flutter/flutter#191486)
2026-08-21 kevmoo@users.noreply.github.com [flutter_tools] refactor CLI argument architecture with typed option descriptors and bundles (PoC) (flutter/flutter#191018)
2026-08-21 bkonyi@google.com tools: Extract Dart SDK to temp directory before moving to final location (flutter/flutter#191263)
2026-08-21 1961493+harryterkelsen@users.noreply.github.com [web] Move CanvasKit fragment shader classes to canvaskit/fragment_shader.dart (flutter/flutter#191451)
2026-08-21 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from GCQlmt6h-esJsNubS... to ic6GjOSn-KN508XyK... (flutter/flutter#191485)
2026-08-21 bkonyi@google.com [Widget Preview] Isolate PageStorage scope in widget preview group expansion tile (flutter/flutter#191378)
2026-08-21 bkonyi@google.com [flutter_tools] Deprecate --build and --no-build flags on flutter run (flutter/flutter#191358)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from 70988bed1b3b to f6900c5b8439 (2 revisions) (flutter/flutter#191481)
2026-08-21 engine-flutter-autoroll@skia.org Roll Packages from 1785501 to 252bb33 (6 revisions) (flutter/flutter#191480)
2026-08-21 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 20IJas24bZiNmCZTK... to GCQlmt6h-esJsNubS... (flutter/flutter#191415)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from 2ba6971bd0d1 to 70988bed1b3b (2 revisions) (flutter/flutter#191476)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from 1d5f72537ba6 to 2ba6971bd0d1 (2 revisions) (flutter/flutter#191473)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from 2c25efd2e369 to 1d5f72537ba6 (1 revision) (flutter/flutter#191472)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from 09b1b810850a to 2c25efd2e369 (9 revisions) (flutter/flutter#191470)
2026-08-21 flar@google.com [Impeller] fix position of cached single glyph text shadows (flutter/flutter#191325)
2026-08-21 engine-flutter-autoroll@skia.org Roll Skia from abdf8821f313 to 09b1b810850a (15 revisions) (flutter/flutter#191458)
2026-08-21 me@bnsaed.com Document that programmatic TextEditingController changes do not run input formatters (flutter/flutter#190166)
2026-08-21 30870216+gaaclarke@users.noreply.github.com Adds new gallery benchmarks to windows (skia and impeller) (flutter/flutter#191454)
2026-08-21 chris@bracken.jp iOS: Deprecate FlutterEngine.isGpuDisabled (flutter/flutter#191393)
2026-08-21 154381524+flutteractionsbot@users.noreply.github.com Revert: [web] Unskip decoration image lerp tests (flutter/flutter#191462)
2026-08-20 awolff@google.com android_hardware_smoke_test: Improve reliability (flutter/flutter#191374)
2026-08-20 77467499+wilyan09007@users.noreply.github.com Don't size or offset the Android platform view before it is laid out (flutter/flutter#190895)
2026-08-20 15619084+vashworth@users.noreply.github.com [iOS][add2app] Skip building SwiftPM plugins when generating CocoaPods artifacts (flutter/flutter#190736)
2026-08-20 33794642+FelixMittermeier@users.noreply.github.com Optimize JSONMessageCodec UTF-8 conversion (flutter/flutter#190529)
2026-08-20 bkonyi@google.com [FML] Replace deprecated wstring_convert with Win32 APIs (flutter/flutter#191394)
2026-08-20 victorsanniay@gmail.com SliverFillRemaining extends beyond viewport size when fillOverscroll is true (flutter/flutter#191236)
2026-08-20 bkonyi@google.com [flutter_tools] Update argParser usageLineLength when --wrap-column is passed (flutter/flutter#191264)
2026-08-20 bkonyi@google.com [flutter_tools] Fix UNC path resolution in depfile parsing on Windows (flutter/flutter#191265)
2026-08-20 1961493+harryterkelsen@users.noreply.github.com [web] Unskip decoration image lerp tests (flutter/flutter#191426)
2026-08-20 bkonyi@google.com Do not inject 'type' and 'method' into service extension responses (flutter/flutter#190946)
2026-08-20 bkonyi@google.com [flutter_tools] Fix crash in symbolize command on stream error (flutter/flutter#191273)
2026-08-20 bkonyi@google.com [flutter_tools] Prevent deletion of shared native asset hooks outputs as stale (flutter/flutter#191272)
2026-08-20 bkonyi@google.com [flutter_tools] Support package wildcard assets in app pubspec (flutter/flutter#191266)
2026-08-20 108678139+manu-sncf@users.noreply.github.com Add SliverClipRect and SliverClipRRect (flutter/flutter#179003)
2026-08-20 bkonyi@google.com [flutter_tools] Implement Diagnostics extension slice and doctor integration (flutter/flutter#191162)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD team-windows Owned by the Windows platform team tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

flutter test --name not accepting lookahead syntax due to SETLOCAL ENABLEDELAYEDEXPANSION in batch entrypoint

2 participants