2018-04-20 08:02:44 +00:00
|
|
|
# Flutter Tools
|
2015-07-23 06:46:27 +00:00
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
This section of the Flutter repository contains the command line developer tools
|
|
|
|
for building Flutter applications.
|
2015-08-08 11:05:32 +00:00
|
|
|
|
2019-07-23 16:47:06 +00:00
|
|
|
## Working on Flutter Tools
|
2018-10-18 17:58:16 +00:00
|
|
|
|
2019-07-23 16:47:06 +00:00
|
|
|
Be sure to follow the instructions on [CONTRIBUTING.md](../../CONTRIBUTING.md)
|
2020-02-04 16:19:59 +00:00
|
|
|
to set up your development environment. Further, familiarize yourself with the
|
|
|
|
[style guide](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo),
|
|
|
|
which we follow.
|
2015-08-08 11:05:32 +00:00
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
### Setting up
|
2019-07-23 16:47:06 +00:00
|
|
|
|
|
|
|
First, ensure that the Dart SDK and other necessary artifacts are available by
|
|
|
|
invoking the Flutter Tools wrapper script. In this directory run:
|
|
|
|
```shell
|
2020-11-12 21:52:09 +00:00
|
|
|
$ flutter --version
|
2019-07-23 16:47:06 +00:00
|
|
|
```
|
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
### Running the Tool
|
2019-07-23 16:47:06 +00:00
|
|
|
|
|
|
|
To run Flutter Tools from source, in this directory run:
|
|
|
|
```shell
|
2020-11-12 21:52:09 +00:00
|
|
|
$ dart bin/flutter_tools.dart
|
2019-07-23 16:47:06 +00:00
|
|
|
```
|
2020-07-23 01:23:47 +00:00
|
|
|
followed by command-line arguments, as usual.
|
2019-07-23 16:47:06 +00:00
|
|
|
|
2019-10-11 18:23:12 +00:00
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
### Running the analyzer
|
2019-07-23 16:47:06 +00:00
|
|
|
|
|
|
|
To run the analyzer on Flutter Tools, in this directory run:
|
|
|
|
```shell
|
2020-11-12 21:52:09 +00:00
|
|
|
$ flutter analyze
|
2019-07-23 16:47:06 +00:00
|
|
|
```
|
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
### Writing tests
|
|
|
|
|
|
|
|
As with other parts of the Flutter repository, all changes in behavior [must be
|
|
|
|
tested](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#write-test-find-bug).
|
|
|
|
Tests live under the `test/` subdirectory.
|
2021-10-01 17:38:02 +00:00
|
|
|
|
|
|
|
- Hermetic unit tests of tool internals go under `test/general.shard`
|
|
|
|
and must run in significantly less than two seconds.
|
|
|
|
|
|
|
|
- Tests of tool commands go under `test/commands.shard`. Hermetic
|
|
|
|
tests go under its `hermetic/` subdirectory. Non-hermetic tests go
|
|
|
|
under its `permeable` sub-directory. Avoid adding tests here and
|
|
|
|
prefer writing either a unit test or a full integration test.
|
|
|
|
|
|
|
|
- Integration tests (e.g. tests that run the tool in a subprocess) go
|
|
|
|
under `test/integration.shard`.
|
|
|
|
|
|
|
|
- Slow web-related tests go in the `test/web.shard` directory.
|
|
|
|
|
|
|
|
In general, the tests for the code in a file called `file.dart` should
|
|
|
|
go in a file called `file_test.dart` in the subdirectory that matches
|
|
|
|
the behavior of the test.
|
|
|
|
|
|
|
|
The `dart_test.yaml` file configures the timeout for these tests to be
|
|
|
|
15 minutes. The `test.dart` script that is used in CI overrides this
|
|
|
|
to two seconds for the `test/general.shard` directory, to catch
|
|
|
|
behaviour that is unexpectedly slow.
|
|
|
|
|
|
|
|
Please avoid setting any other timeouts.
|
2020-02-04 16:19:59 +00:00
|
|
|
|
2020-09-15 20:32:02 +00:00
|
|
|
#### Using local engine builds in integration tests
|
|
|
|
|
|
|
|
The integration tests can be configured to use a specific local engine
|
2023-08-14 20:21:14 +00:00
|
|
|
variant by setting the `FLUTTER_LOCAL_ENGINE` and `FLUTTER_LOCAL_ENGINE_HOST`
|
|
|
|
environment svariable to the name of the local engines (e.g. `android_debug_unopt`
|
|
|
|
and `host_debug_unopt`). If the local engine build requires a source path, this
|
|
|
|
can be provided by setting the `FLUTTER_LOCAL_ENGINE_SRC_PATH` environment
|
|
|
|
variable. This second variable is not necessary if the `flutter` and `engine`
|
|
|
|
checkouts are in adjacent directories.
|
2020-09-15 20:32:02 +00:00
|
|
|
|
|
|
|
```shell
|
|
|
|
export FLUTTER_LOCAL_ENGINE=android_debug_unopt
|
2023-08-14 20:21:14 +00:00
|
|
|
export FLUTTER_LOCAL_ENGINE_HOST=host_debug_unopt
|
2020-11-12 21:52:09 +00:00
|
|
|
flutter test test/integration.shard/some_test_case
|
2020-09-15 20:32:02 +00:00
|
|
|
```
|
|
|
|
|
2020-02-04 16:19:59 +00:00
|
|
|
### Running the tests
|
2019-07-23 16:47:06 +00:00
|
|
|
|
2021-06-15 22:54:03 +00:00
|
|
|
To run all of the unit tests:
|
2020-11-12 21:52:09 +00:00
|
|
|
|
2019-07-23 16:47:06 +00:00
|
|
|
```shell
|
2021-06-15 22:54:03 +00:00
|
|
|
$ flutter test test/general.shard
|
2019-07-23 16:47:06 +00:00
|
|
|
```
|
|
|
|
|
2021-10-01 17:38:02 +00:00
|
|
|
The tests in `test/integration.shard` are slower to run than the tests
|
|
|
|
in `test/general.shard`. Depending on your development computer, you
|
|
|
|
might want to limit concurrency. Generally it is easier to run these
|
|
|
|
on CI, or to manually verify the behavior you are changing instead of
|
|
|
|
running the test.
|
2021-06-15 22:54:03 +00:00
|
|
|
|
2021-10-01 17:38:02 +00:00
|
|
|
The integration tests also require the `FLUTTER_ROOT` environment
|
|
|
|
variable to be set. The full invocation to run everything might
|
|
|
|
therefore look something like:
|
2021-05-25 20:49:02 +00:00
|
|
|
|
|
|
|
```shell
|
2022-03-09 00:20:21 +00:00
|
|
|
$ export FLUTTER_ROOT=~/path/to/flutter-sdk
|
2021-10-01 17:38:02 +00:00
|
|
|
$ flutter test --concurrency 1
|
2021-05-25 20:49:02 +00:00
|
|
|
```
|
|
|
|
|
2021-10-01 17:38:02 +00:00
|
|
|
This may take some time (on the order of an hour). The unit tests
|
|
|
|
alone take much less time (on the order of a minute).
|
2021-05-25 20:49:02 +00:00
|
|
|
|
2021-10-01 17:38:02 +00:00
|
|
|
You can run the tests in a specific file, e.g.:
|
2019-07-23 16:47:06 +00:00
|
|
|
|
|
|
|
```shell
|
2020-11-12 21:52:09 +00:00
|
|
|
$ flutter test test/general.shard/utils_test.dart
|
2019-07-23 16:47:06 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
### Forcing snapshot regeneration
|
|
|
|
|
|
|
|
To force the Flutter Tools snapshot to be regenerated, delete the following
|
|
|
|
files:
|
2017-02-14 05:31:53 +00:00
|
|
|
```shell
|
2019-07-23 16:47:06 +00:00
|
|
|
$ rm ../../bin/cache/flutter_tools.stamp ../../bin/cache/flutter_tools.snapshot
|
2017-02-14 05:31:53 +00:00
|
|
|
```
|