
Native asset tests use `flutter create --no-pub --template=package_ffi`. The template used for this is checked in. It then adds extra dependencies to checked-in packages in flutter/flutter (which have pinned deps) in those generated templates. It then pins all dependencies in the modified template project. This can lead to constraint violations when flutter updates pinned dependencies, because the template uses old constraints (which are turned from `^x` to `=x`) and the additional dependency on flutter/flutter checked in package brings in different pinned dependencies. In a previous PR we already made this more robust by using flutter's pinned versions over the the versions from the template (that are changed from `^x` to `=x`). Though a new upgrade of flutters pinned packages reveals that this isn't quite sufficient: The template uses `test` at `^X`. The additional dependency to `link_hook` doesn't depend on `test`. It therefore turns it into `=X`. BUT `link_hooks` has a non-dev dependency on `test_core` which is incompatible with `=X`. => So we relax this even more by prefering to choose (pinned) versions of the flutter/flutter `link_hook` dependencies and (new) dev dependencies over the template dependencies. => This will make use use the pinned `test` version from `link_hooks` instead of from the template.
Integration tests
These tests are not hermetic, and use the actual Flutter SDK. While
they don't require actual devices, they run flutter_tester
to test
Dart VM and Flutter integration.
Use this command to run (from the flutter_tools
directory):
../../bin/cache/dart-sdk/bin/dart run test test/integration.shard
You need to have downloaded the Dart SDK in your Flutter clone for this
to work. Running ../../bin/flutter
will automatically download it.
Coverage exclusion
These tests are expensive to run and do not give meaningful coverage
information for the flutter
tool (since they are black-box tests that
run the tool as a subprocess, rather than being unit tests). For this
reason, they are in a separate shard when running on continuous
integration and are not run when calculating coverage.
Adding new test files
When adding a new test file make sure that it ends with _test.dart
, or else it will not be run.