README.md 2.95 KB
Newer Older
1
# Flutter Tools
2

3 4
This section of the Flutter repository contains the command line developer tools
for building Flutter applications.
Devon Carew's avatar
Devon Carew committed
5

6
## Working on Flutter Tools
Luan Nico's avatar
Luan Nico committed
7

8
Be sure to follow the instructions on [CONTRIBUTING.md](../../CONTRIBUTING.md)
9 10 11
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.
Devon Carew's avatar
Devon Carew committed
12

13
### Setting up
14 15 16 17

First, ensure that the Dart SDK and other necessary artifacts are available by
invoking the Flutter Tools wrapper script. In this directory run:
```shell
18
$ flutter --version
19 20
```

21
### Running the Tool
22 23 24

To run Flutter Tools from source, in this directory run:
```shell
25
$ dart bin/flutter_tools.dart
26
```
27
followed by command-line arguments, as usual.
28

29

30
### Running the analyzer
31 32 33

To run the analyzer on Flutter Tools, in this directory run:
```shell
34
$ flutter analyze
35 36
```

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
### 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.
- Hermetic unit tests of tool internals go under `test/general.shard`.
- 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.
- Integration tests (e.g. tests that run the tool in a subprocess) go under
  `test/integration.shard`.

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.

53 54 55 56 57 58 59 60 61 62 63
#### Using local engine builds in integration tests

The integration tests can be configured to use a specific local engine
variant by setting the `FLUTTER_LOCAL_ENGINE` environment variable to the
name of the local engine (e.g. "android_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.

```shell
export FLUTTER_LOCAL_ENGINE=android_debug_unopt
64
flutter test test/integration.shard/some_test_case
65 66
```

67
### Running the tests
68

69 70
To run the tests in the `test/` directory:

71
```shell
72
$ flutter test
73 74 75
```

The tests in `test/integration.shard` are slower to run than the tests in
76 77
`test/general.shard`. They also require the `FLUTTER_ROOT` environment variable
to be set and pointing to the root of the Flutter SDK. To run only the tests in `test/general.shard`, in this
78 79
directory run:
```shell
80
$ flutter test test/general.shard
81 82 83 84
```

To run the tests in a specific file, run:
```shell
85
$ flutter test test/general.shard/utils_test.dart
86 87 88 89 90 91
```

### Forcing snapshot regeneration

To force the Flutter Tools snapshot to be regenerated, delete the following
files:
92
```shell
93
$ rm ../../bin/cache/flutter_tools.stamp ../../bin/cache/flutter_tools.snapshot
94
```