Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[flutter_test] Add flag to send device pointer events to the framework #108430

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 3, 2022

Conversation

jiahaog
Copy link
Member

@jiahaog jiahaog commented Jul 27, 2022

#107976 was an alternative to overcome the limitation of how pointer events from adb shell input and other physical taps cannot be received by the app.

The reason for this limitation is that these events surface as TestBindingEventSource.device, and are not propagated to the actual gesture handlers when TestWidgetsFlutterBinding is used. Specifically for LiveTestWidgetsFlutterBinding, these events result in a diagnostic message on finders that can be used to interact with widgets at the location of the tap.

This PR adds a shouldPropagateDevicePointerEvents flag to send these pointer events to the actual gesture handlers when it is true, so customer: money will be able to use adb shell input to control the app in tests.

Fixes #107934
b/239762849

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.

@flutter-dashboard flutter-dashboard bot added a: tests "flutter test", flutter_test, or one of our tests framework flutter/packages/flutter repository. See also f: labels. labels Jul 27, 2022
@jiahaog
Copy link
Member Author

jiahaog commented Jul 27, 2022

I haven't had time to add the tests yet, but @dnfield @goderbauer do let me know what you think about this approach in the meantime 🙂.

cc @HelioStrike

/// on Android.
///
/// See also [pointerEventSource].
bool shouldPropagateDevicePointerEvents = false;
Copy link
Contributor

Choose a reason for hiding this comment

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

If we land this, we'd need ways to make sure it gets reset after tests.

The frameworks normal solution here would be to subclass the bindings. Is that still not possible in google's testing environment?

Copy link
Member Author

Choose a reason for hiding this comment

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

We can subclass the binding in Google3, just that it adds a bit of complexity and I don't think it's necessary if this is more formally supported through a setting like this.

Is it important for us to reset the value though? I think users should be free to change this value wherever as some sort of "global" - whether it is in a testWidgets() or at the top of their main(), depending on their use case.

Copy link
Member Author

Choose a reason for hiding this comment

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

Done in the other comment below

/// on Android.
///
/// See also [pointerEventSource].
bool shouldPropagateDevicePointerEvents = false;
Copy link
Member

Choose a reason for hiding this comment

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

nit: maybe drop the should from the name?

Copy link
Member Author

@jiahaog jiahaog Jul 27, 2022

Choose a reason for hiding this comment

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

Effective Dart tells us to prefix it with a should though. I don't feel very strongly about this though, happy to remove it.

/// on Android.
///
/// See also [pointerEventSource].
bool shouldPropagateDevicePointerEvents = false;
Copy link
Member

Choose a reason for hiding this comment

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

How do we make sure this setting doesn't leak between tests?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not sure I understand, can you elaborate more on what you mean by leaking the setting?

Copy link
Contributor

Choose a reason for hiding this comment

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

Basically if you have several tests in a file, and one test changes the value of this, there should be some validation at the end of the test that makes sure it is unset.

If you grep the repo for debugAssertAllPaintingVarsUnset for example, we make sure that these global sorts of things get reset at the end of each testWidgets call.

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks, I'll try to add that.

Copy link
Member Author

Choose a reason for hiding this comment

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

Done

@jiahaog jiahaog force-pushed the pointer branch 4 times, most recently from 7926770 to 06d5a73 Compare August 1, 2022 09:07
@jiahaog jiahaog marked this pull request as ready for review August 1, 2022 10:55
@jiahaog jiahaog requested review from goderbauer and dnfield August 1, 2022 10:56
@jiahaog
Copy link
Member Author

jiahaog commented Aug 3, 2022

Ping :)

Copy link
Contributor

@dnfield dnfield left a comment

Choose a reason for hiding this comment

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

This LGTM if LGT @goderbauer

Copy link
Member

@goderbauer goderbauer left a comment

Choose a reason for hiding this comment

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

LGTM

@dnfield dnfield added the autosubmit Merge PR when tree becomes green via auto submit App label Aug 3, 2022
@auto-submit auto-submit bot merged commit 4d73448 into flutter:master Aug 3, 2022
@jiahaog jiahaog deleted the pointer branch August 3, 2022 23:31
hannah-hyj added a commit that referenced this pull request Aug 4, 2022
* M3 counter error style

* polish

* Update text_field_template.dart

* Roll Flutter Engine from 3cba105 to cf0db3e (1 revision) (#108716)

* resolve comments

* Roll Plugins from 257eacb1e2aa to a6d42f1e01d3 (3 revisions) (#108738)

* Override PlaceholderDimensions equality operator to avoid unnecessary TextPainter re-layouts (#108623)

* Roll Flutter Engine from cf0db3e to aa90044 (1 revision) (#108734)

* Roll Flutter Engine from aa90044 to 6d2fd23 (5 revisions) (#108744)

* Fix lerp to eccentric circle. (#108743)

* Roll Flutter Engine from 6d2fd23 to f182794 (4 revisions) (#108749)

* Roll Flutter Engine from f182794 to 25e8021 (1 revision) (#108751)

* Sync with flutter/.github#13 (#108754)

* Roll Flutter Engine from 25e8021 to e771729 (2 revisions) (#108755)

* clean-up analysis_options.yaml (#108747)

* Fix ExpansionTile shows children background when expanded (#107834)

* Create `containsSemantics` to allow for partial matching of semantics in tests. (#108573)

* Roll Flutter Engine from e771729 to 7d0f6d2 (2 revisions) (#108757)

* Enable conditional_uri_does_not_exist (#108652)

* Roll Flutter Engine from 7d0f6d2 to b257966 (3 revisions) (#108763)

* Roll Flutter Engine from b257966 to 60e5eb6 (3 revisions) (#108766)

* Reland `Linux_samsung_a02 openpay_benchmarks__scroll_perf` (#108466) (#108769)

* [SelectionOverlay]Move the debug statement to the scope of the assertion. (#108508)

* Roll Flutter Engine from 60e5eb6 to 1c3b1b3 (11 revisions) (#108780)

* Roll Flutter Engine from 1c3b1b3 to b607811 (1 revision) (#108782)

* Roll Flutter Engine from b607811 to 3b2bd24 (1 revision) (#108784)

* Roll Flutter Engine from 3b2bd24 to 0e5392c (1 revision) (#108788)

* Roll Flutter Engine from 0e5392c to 4b19256 (1 revision) (#108793)

* Roll Flutter Engine from 4b19256 to e0b5edc (2 revisions) (#108798)

* Roll Flutter Engine from e0b5edc to b164c5c (1 revision) (#108814)

* Update text_field.dart

* Roll Flutter Engine from b164c5c to eb2b57b (4 revisions) (#108821)

* Roll Plugins from a6d42f1e01d3 to 0d6d03a94ed5 (1 revision) (#108822)

* Roll Flutter Engine from eb2b57b to 978d8e2 (2 revisions) (#108825)

* Loupe Android + iOS (#107477)

* added Magnifier for iOS and Android

* Mark `Mac_ios microbenchmarks_ios_flaky` flaky (#108820)

* Deprecate `toggleableActiveColor` (#97972)

* Roll Flutter Engine from 978d8e2 to 2b31732 (4 revisions) (#108830)

* [flutter_tools] Test that DAP process terminates at the end of a session (#108301)

* Roll Flutter Engine from 2b31732 to 4e9c869 (1 revision) (#108833)

* fix noop toString() diagnostics (#108836)

* [flutter_tools] Migrate more tool tests to null-safety (#108639)

* Revert "Fix ExpansionTile shows children background when expanded" (#108844)

* Roll Flutter Engine from 4e9c869 to 6724561 (2 revisions) (#108838)

* Marks Linux_android clipper_cache_perf__e2e_summary to be unflaky (#104088)

* Update documentation to match implementation (#108843)

* Reland "Add shadowColor and surfaceTintColor to Dialog and DialogTheme." #108718

* Roll Flutter Engine from 6724561 to f3deaba (8 revisions) (#108847)

* Roll Flutter Engine from f3deaba to c07e1ac (2 revisions) (#108849)

* Roll Flutter Engine from c07e1ac to a1e77ae (5 revisions) (#108850)

* Roll Flutter Engine from a1e77ae to c456476 (2 revisions) (#108853)

* Roll Flutter Engine from c456476 to 6cd744b (1 revision) (#108857)

* Roll Flutter Engine from 6cd744b to 51296a6 (1 revision) (#108860)

* Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (#108862)

* Revert "Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (#108862)" (#108882)

This reverts commit a880c4e.

* Roll Plugins from 0d6d03a94ed5 to e74c42028d39 (5 revisions) (#108887)

* Roll Flutter Engine from 51296a6 to 2c28298 (6 revisions) (#108899)

* [flutter_test] Add flag to send device pointer events to the framework (#108430)

* Roll Flutter Engine from 2c28298 to adba702 (2 revisions) (#108903)

* fix flutter not finding custom device (#108884)

* Force a11y services to off for complex_layout_semantics_perf test (#108906)

* Update `equalsIgnoringHashCodes` to take a list of Strings (#108507)

* [macOS] Use editing intents from engine (#105407)

* Added `IconButtonTheme` and apply it to `IconButton` in M3 (#108332)

* Created IconButtonTheme and apply it to IconButton

* [web] Add onEntrypointLoaded to FlutterLoader. (#108776)

* Roll pub packages (#108919)

* [flutter_test] perf: find.ancestor (#108868)

* Roll Flutter Engine from adba702 to 1188a80 (4 revisions) (#108922)

* Bump github/codeql-action from 2.1.17 to 2.1.18 (#108923)

* Remove some outdated ignores from framework (#108915)

* Roll Flutter Engine from 1188a80 to 1743d1d (1 revision) (#108925)

* Clean up ScrollbarPainter (#107179)

* Remove outdated ignores (#108924)

* Add more logs to diagnose Gold flake (#108930)

* M3 counter error style

* polish

* Update text_field_template.dart

* resolve comments

* Update text_field.dart

Co-authored-by: engine-flutter-autoroll <[email protected]>
Co-authored-by: Tomasz Gucio <[email protected]>
Co-authored-by: Greg Spencer <[email protected]>
Co-authored-by: Ian Hickson <[email protected]>
Co-authored-by: Michael Goderbauer <[email protected]>
Co-authored-by: Bruno Leroux <[email protected]>
Co-authored-by: pdblasi-google <[email protected]>
Co-authored-by: Kaushik Iska <[email protected]>
Co-authored-by: xubaolin <[email protected]>
Co-authored-by: Anthony Oleinik <[email protected]>
Co-authored-by: keyonghan <[email protected]>
Co-authored-by: Taha Tesser <[email protected]>
Co-authored-by: Danny Tuppeny <[email protected]>
Co-authored-by: Phil Quitslund <[email protected]>
Co-authored-by: Christopher Fujino <[email protected]>
Co-authored-by: Kate Lovett <[email protected]>
Co-authored-by: Flutter GitHub Bot <[email protected]>
Co-authored-by: parkershepherd <[email protected]>
Co-authored-by: Darren Austin <[email protected]>
Co-authored-by: Zachary Anderson <[email protected]>
Co-authored-by: Jia Hao <[email protected]>
Co-authored-by: Hannes Winkler <[email protected]>
Co-authored-by: Matej Knopp <[email protected]>
Co-authored-by: Qun Cheng <[email protected]>
Co-authored-by: David Iglesias <[email protected]>
Co-authored-by: Pascal Welsch <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Aug 4, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 4, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 4, 2022
camsim99 pushed a commit to camsim99/flutter that referenced this pull request Aug 10, 2022
* M3 counter error style

* polish

* Update text_field_template.dart

* Roll Flutter Engine from 3cba105 to cf0db3e (1 revision) (flutter#108716)

* resolve comments

* Roll Plugins from 257eacb1e2aa to a6d42f1e01d3 (3 revisions) (flutter#108738)

* Override PlaceholderDimensions equality operator to avoid unnecessary TextPainter re-layouts (flutter#108623)

* Roll Flutter Engine from cf0db3e to aa90044 (1 revision) (flutter#108734)

* Roll Flutter Engine from aa90044 to 6d2fd23 (5 revisions) (flutter#108744)

* Fix lerp to eccentric circle. (flutter#108743)

* Roll Flutter Engine from 6d2fd23 to f182794 (4 revisions) (flutter#108749)

* Roll Flutter Engine from f182794 to 25e8021 (1 revision) (flutter#108751)

* Sync with flutter/.github#13 (flutter#108754)

* Roll Flutter Engine from 25e8021 to e771729 (2 revisions) (flutter#108755)

* clean-up analysis_options.yaml (flutter#108747)

* Fix ExpansionTile shows children background when expanded (flutter#107834)

* Create `containsSemantics` to allow for partial matching of semantics in tests. (flutter#108573)

* Roll Flutter Engine from e771729 to 7d0f6d2 (2 revisions) (flutter#108757)

* Enable conditional_uri_does_not_exist (flutter#108652)

* Roll Flutter Engine from 7d0f6d2 to b257966 (3 revisions) (flutter#108763)

* Roll Flutter Engine from b257966 to 60e5eb6 (3 revisions) (flutter#108766)

* Reland `Linux_samsung_a02 openpay_benchmarks__scroll_perf` (flutter#108466) (flutter#108769)

* [SelectionOverlay]Move the debug statement to the scope of the assertion. (flutter#108508)

* Roll Flutter Engine from 60e5eb6 to 1c3b1b3 (11 revisions) (flutter#108780)

* Roll Flutter Engine from 1c3b1b3 to b607811 (1 revision) (flutter#108782)

* Roll Flutter Engine from b607811 to 3b2bd24 (1 revision) (flutter#108784)

* Roll Flutter Engine from 3b2bd24 to 0e5392c (1 revision) (flutter#108788)

* Roll Flutter Engine from 0e5392c to 4b19256 (1 revision) (flutter#108793)

* Roll Flutter Engine from 4b19256 to e0b5edc (2 revisions) (flutter#108798)

* Roll Flutter Engine from e0b5edc to b164c5c (1 revision) (flutter#108814)

* Update text_field.dart

* Roll Flutter Engine from b164c5c to eb2b57b (4 revisions) (flutter#108821)

* Roll Plugins from a6d42f1e01d3 to 0d6d03a94ed5 (1 revision) (flutter#108822)

* Roll Flutter Engine from eb2b57b to 978d8e2 (2 revisions) (flutter#108825)

* Loupe Android + iOS (flutter#107477)

* added Magnifier for iOS and Android

* Mark `Mac_ios microbenchmarks_ios_flaky` flaky (flutter#108820)

* Deprecate `toggleableActiveColor` (flutter#97972)

* Roll Flutter Engine from 978d8e2 to 2b31732 (4 revisions) (flutter#108830)

* [flutter_tools] Test that DAP process terminates at the end of a session (flutter#108301)

* Roll Flutter Engine from 2b31732 to 4e9c869 (1 revision) (flutter#108833)

* fix noop toString() diagnostics (flutter#108836)

* [flutter_tools] Migrate more tool tests to null-safety (flutter#108639)

* Revert "Fix ExpansionTile shows children background when expanded" (flutter#108844)

* Roll Flutter Engine from 4e9c869 to 6724561 (2 revisions) (flutter#108838)

* Marks Linux_android clipper_cache_perf__e2e_summary to be unflaky (flutter#104088)

* Update documentation to match implementation (flutter#108843)

* Reland "Add shadowColor and surfaceTintColor to Dialog and DialogTheme." flutter#108718

* Roll Flutter Engine from 6724561 to f3deaba (8 revisions) (flutter#108847)

* Roll Flutter Engine from f3deaba to c07e1ac (2 revisions) (flutter#108849)

* Roll Flutter Engine from c07e1ac to a1e77ae (5 revisions) (flutter#108850)

* Roll Flutter Engine from a1e77ae to c456476 (2 revisions) (flutter#108853)

* Roll Flutter Engine from c456476 to 6cd744b (1 revision) (flutter#108857)

* Roll Flutter Engine from 6cd744b to 51296a6 (1 revision) (flutter#108860)

* Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (flutter#108862)

* Revert "Roll Flutter Engine from 51296a6 to 05228ad (1 revision) (flutter#108862)" (flutter#108882)

This reverts commit a880c4e.

* Roll Plugins from 0d6d03a94ed5 to e74c42028d39 (5 revisions) (flutter#108887)

* Roll Flutter Engine from 51296a6 to 2c28298 (6 revisions) (flutter#108899)

* [flutter_test] Add flag to send device pointer events to the framework (flutter#108430)

* Roll Flutter Engine from 2c28298 to adba702 (2 revisions) (flutter#108903)

* fix flutter not finding custom device (flutter#108884)

* Force a11y services to off for complex_layout_semantics_perf test (flutter#108906)

* Update `equalsIgnoringHashCodes` to take a list of Strings (flutter#108507)

* [macOS] Use editing intents from engine (flutter#105407)

* Added `IconButtonTheme` and apply it to `IconButton` in M3 (flutter#108332)

* Created IconButtonTheme and apply it to IconButton

* [web] Add onEntrypointLoaded to FlutterLoader. (flutter#108776)

* Roll pub packages (flutter#108919)

* [flutter_test] perf: find.ancestor (flutter#108868)

* Roll Flutter Engine from adba702 to 1188a80 (4 revisions) (flutter#108922)

* Bump github/codeql-action from 2.1.17 to 2.1.18 (flutter#108923)

* Remove some outdated ignores from framework (flutter#108915)

* Roll Flutter Engine from 1188a80 to 1743d1d (1 revision) (flutter#108925)

* Clean up ScrollbarPainter (flutter#107179)

* Remove outdated ignores (flutter#108924)

* Add more logs to diagnose Gold flake (flutter#108930)

* M3 counter error style

* polish

* Update text_field_template.dart

* resolve comments

* Update text_field.dart

Co-authored-by: engine-flutter-autoroll <[email protected]>
Co-authored-by: Tomasz Gucio <[email protected]>
Co-authored-by: Greg Spencer <[email protected]>
Co-authored-by: Ian Hickson <[email protected]>
Co-authored-by: Michael Goderbauer <[email protected]>
Co-authored-by: Bruno Leroux <[email protected]>
Co-authored-by: pdblasi-google <[email protected]>
Co-authored-by: Kaushik Iska <[email protected]>
Co-authored-by: xubaolin <[email protected]>
Co-authored-by: Anthony Oleinik <[email protected]>
Co-authored-by: keyonghan <[email protected]>
Co-authored-by: Taha Tesser <[email protected]>
Co-authored-by: Danny Tuppeny <[email protected]>
Co-authored-by: Phil Quitslund <[email protected]>
Co-authored-by: Christopher Fujino <[email protected]>
Co-authored-by: Kate Lovett <[email protected]>
Co-authored-by: Flutter GitHub Bot <[email protected]>
Co-authored-by: parkershepherd <[email protected]>
Co-authored-by: Darren Austin <[email protected]>
Co-authored-by: Zachary Anderson <[email protected]>
Co-authored-by: Jia Hao <[email protected]>
Co-authored-by: Hannes Winkler <[email protected]>
Co-authored-by: Matej Knopp <[email protected]>
Co-authored-by: Qun Cheng <[email protected]>
Co-authored-by: David Iglesias <[email protected]>
Co-authored-by: Pascal Welsch <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@bartekpacia
Copy link
Member

If customer: money wants to test their native views, they might want to check out Patrol.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a: tests "flutter test", flutter_test, or one of our tests autosubmit Merge PR when tree becomes green via auto submit App customer: money (g3) framework flutter/packages/flutter repository. See also f: labels.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Allow adb to interact with the app during flutter integration tests
4 participants