| # Leak tracking in Flutter Framework |
| |
| ## TL;DR; |
| |
| To enable leak tracking locally pass `--dart-define LEAK_TRACKING=true` to `flutter test`. |
| |
| See leak_tracker documentation for |
| [general leak troubleshooting](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/TROUBLESHOOT.md). |
| |
| This page contains Flutter Framework specific information. |
| |
| ## Overview |
| |
| Flutter Framework widget tests use [leak_tracker](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/ |
| OVERVIEW.md) to detect leaks from objects that have not been disposed. |
| |
| Test failures cause by leaks look like this: |
| |
| ``` |
| Expected: leak free |
| Actual: <Instance of 'Leaks'> |
| Which: contains leaks: |
| # The text is generated by leak_tracker. |
| # For leak troubleshooting tips open: |
| # https://github.com/flutter/flutter/blob/main/docs/contributing/testing/Leak-tracking.md |
| notDisposed: |
| total: 1 |
| objects: |
| FocusNode: |
| test: Align smoke test |
| identityHashCode: 82308154 |
| ``` |
| |
| ## When is it ok to opt-out from leak tracking? |
| |
| In general, leak tracking should be enabled, to verify that all |
| disposables are disposed. |
| If a tests is opted out, the reasons should be clearly explained |
| in the comments. |
| |
| It is ok to opt out a test when the test |
| throws an exception and thus the code did not finalize properly. |
| |
| While some exceptions should be finalized properly |
| and should not result in leaking objects, |
| the project to make sure disposables are disposed |
| in exceptional code paths was not prioritized yet. |
| See [issue #157470](https://github.com/flutter/flutter/issues/157470). |
| |
| ## Where leak tracking is configured? |
| |
| Leak tracker is configured in [flutter_test_config.dart](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/packages/flutter/test/flutter_test_config.dart#L45). |
| |
| See [leak_tracker documentation](https://github.com/dart-lang/leak_tracker/blob/main/doc/leak_tracking/TROUBLESHOOT.md) |
| on how to enable/disable leak tracking for individual tests and files. |
| |
| ## What are defaults? |
| |
| Leak tracking is enabled on two test shards in Flutter's testing infrastructure: |
| |
| - [Windows framework_tests_libraries_leak_tracking](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/.ci.yaml#L5553) |
| - [Windows framework_tests_widgets_leak_tracking](https://github.com/flutter/flutter/blob/9441f8f6c806fb0a3b7d058a40b5e59c373e6055/.ci.yaml#L5640C11-L5640C56) |
| |
| For local testing, or for test shards configuration, to enable leak tracking for flutter tests, pass |
| `--dart-define LEAK_TRACKING=true` to `flutter test`. |
| |
| You can see the bot's status on the [Flutter build dashboard](https://flutter-dashboard.appspot.com/#/build). |