From a14476adae5e4f00630782eb622f6b8601a806e7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 20 Nov 2023 19:24:33 -0800 Subject: [PATCH 01/15] - --- .../lib/leak_tracker_flutter_testing.dart | 4 + .../lib/src/testing.dart | 102 ++++++++++++++++++ .../leak_tracker_flutter_testing/pubspec.yaml | 1 + 3 files changed, 107 insertions(+) create mode 100644 pkgs/leak_tracker_flutter_testing/lib/src/testing.dart diff --git a/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart b/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart index 7ee10e67..6c58ccd9 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart @@ -5,3 +5,7 @@ export 'src/matchers.dart'; export 'src/model.dart'; export 'src/test_widgets.dart'; +export 'src/testing.dart'; +export 'package:leak_tracker/leak_tracker.dart' + show LeakTesting, Leaks, LeakTracking, IgnoredLeaks, LeakType, LeakReport; +export 'package:leak_tracker_testing/leak_tracker_testing.dart' show isLeakFree; diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart new file mode 100644 index 00000000..5e86f8c1 --- /dev/null +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -0,0 +1,102 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:flutter/foundation.dart'; +import 'package:leak_tracker/leak_tracker.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; +import 'package:matcher/expect.dart'; + +void mayBeSetupLeakTrackingForTest( + LeakTesting settings, + String testDescription, +) { + if (settings.ignore) return; + + if (!_checkPlatformAndMayBePrintWarning( + platformName: defaultTargetPlatform.name, isBrowser: kIsWeb)) { + return; + } + + _setUpLeakTracking(); + + final PhaseSettings phase = PhaseSettings( + name: testDescription, + leakDiagnosticConfig: settings.leakDiagnosticConfig, + ignoredLeaks: settings.ignoredLeaks, + baselining: settings.baselining, + ignoreLeaks: settings.ignore, + ); + + LeakTracking.phase = phase; +} + +void ignoreAllLeaks() { + LeakTracking.phase = const PhaseSettings.ignored(); +} + +/// Should be invoked after execution of all tests to report found leaks. +Future maybeTearDownLeakTracking() async { + if (!LeakTracking.isStarted) { + return; + } + + MemoryAllocations.instance.removeListener(_dispatchFlutterEventToLeakTracker); + + LeakTracking.declareNotDisposedObjectsAsLeaks(); + await forceGC(fullGcCycles: defaultNumberOfGcCycles); + final Leaks leaks = await LeakTracking.collectLeaks(); + LeakTracking.stop(); + + if (leaks.total == 0) { + return; + } + collectedLeaksReporter(leaks); +} + +/// Handler for memory leaks found in tests. +/// +/// Set it to analyse the leaks programmatically. +/// The handler is invoked on tear down of the test run. +/// The default reporter fails in case of found leaks. +/// +/// Used to test leak tracking functionality. +LeaksCallback collectedLeaksReporter = + (Leaks leaks) => expect(leaks, isLeakFree); + +void _dispatchFlutterEventToLeakTracker(ObjectEvent event) { + return LeakTracking.dispatchObjectEvent(event.toMap()); +} + +bool _notSupportedWarningPrinted = false; + +/// Checks if platform supported and, if no, prints warning if the warning is needed. +/// +/// Warning is printed one time if `LeakTracking.warnForNotSupportedPlatforms` is true. +bool _checkPlatformAndMayBePrintWarning( + {required String platformName, required bool isBrowser}) { + final isSupported = !isBrowser; + + if (isSupported) return true; + + final shouldPrintWarning = + LeakTracking.warnForUnsupportedPlatforms && !_notSupportedWarningPrinted; + + if (!shouldPrintWarning) return false; + + _notSupportedWarningPrinted = true; + debugPrint( + "Leak tracking is not supported on the platform '$platformName'.\n" + 'To turn off this message, set `LeakTracking.warnForNotSupportedPlatforms` to false.', + ); + + return false; +} + +void _setUpLeakTracking() { + assert(!LeakTracking.isStarted); + + LeakTracking.phase = const PhaseSettings.ignored(); + LeakTracking.start(config: LeakTrackingConfig.passive()); + MemoryAllocations.instance.addListener(_dispatchFlutterEventToLeakTracker); +} diff --git a/pkgs/leak_tracker_flutter_testing/pubspec.yaml b/pkgs/leak_tracker_flutter_testing/pubspec.yaml index 570702c1..33ae60b6 100644 --- a/pkgs/leak_tracker_flutter_testing/pubspec.yaml +++ b/pkgs/leak_tracker_flutter_testing/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: sdk: flutter leak_tracker: ^9.0.10 leak_tracker_testing: ^1.0.5 + matcher: ^0.12.16 meta: ^1.8.0 dev_dependencies: From 2eeee02a0af76b6b928763d0c23099b8c2fd6e02 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Thu, 30 Nov 2023 18:45:33 -0800 Subject: [PATCH 02/15] Update testing.dart --- .../leak_tracker_flutter_testing/lib/src/testing.dart | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index 5e86f8c1..938b9bb0 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -18,7 +18,7 @@ void mayBeSetupLeakTrackingForTest( return; } - _setUpLeakTracking(); + _maybeStartLeakTracking(); final PhaseSettings phase = PhaseSettings( name: testDescription, @@ -42,15 +42,11 @@ Future maybeTearDownLeakTracking() async { } MemoryAllocations.instance.removeListener(_dispatchFlutterEventToLeakTracker); - LeakTracking.declareNotDisposedObjectsAsLeaks(); await forceGC(fullGcCycles: defaultNumberOfGcCycles); final Leaks leaks = await LeakTracking.collectLeaks(); LeakTracking.stop(); - if (leaks.total == 0) { - return; - } collectedLeaksReporter(leaks); } @@ -93,8 +89,9 @@ bool _checkPlatformAndMayBePrintWarning( return false; } -void _setUpLeakTracking() { - assert(!LeakTracking.isStarted); +/// Starts leak tracking with all leaks ignored. +void _maybeStartLeakTracking() { + if (LeakTracking.isStarted) return; LeakTracking.phase = const PhaseSettings.ignored(); LeakTracking.start(config: LeakTrackingConfig.passive()); From e9d28c61d3297512ce3d7ef05f7c9033c013ca1c Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Fri, 8 Dec 2023 14:35:28 -0800 Subject: [PATCH 03/15] - --- .../lib/src/test_widgets.dart | 3 +++ .../lib/src/testing.dart | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/test_widgets.dart b/pkgs/leak_tracker_flutter_testing/lib/src/test_widgets.dart index 5517b52f..3b74f345 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/test_widgets.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/test_widgets.dart @@ -8,6 +8,9 @@ import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import 'package:meta/meta.dart'; +// TODO: remove this library +// https://github.com/flutter/flutter/issues/135856 + void _flutterEventToLeakTracker(ObjectEvent event) { return LeakTracking.dispatchObjectEvent(event.toMap()); } diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index 938b9bb0..b4810b2c 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -7,7 +7,7 @@ import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import 'package:matcher/expect.dart'; -void mayBeSetupLeakTrackingForTest( +void setupLeakTrackingForTest( LeakTesting settings, String testDescription, ) { @@ -31,18 +31,22 @@ void mayBeSetupLeakTrackingForTest( LeakTracking.phase = phase; } -void ignoreAllLeaks() { +void tearDownLeakTrackingForTest() { LeakTracking.phase = const PhaseSettings.ignored(); + LeakTracking.declareNotDisposedObjectsAsLeaks(); } /// Should be invoked after execution of all tests to report found leaks. -Future maybeTearDownLeakTracking() async { +/// +/// Is noop if leak tracking is not started. +Future maybeTearDownLeakTrackingForAll() async { if (!LeakTracking.isStarted) { return; } + // The listener is not added/removed for each test, + // because GC may happen after test is complete. MemoryAllocations.instance.removeListener(_dispatchFlutterEventToLeakTracker); - LeakTracking.declareNotDisposedObjectsAsLeaks(); await forceGC(fullGcCycles: defaultNumberOfGcCycles); final Leaks leaks = await LeakTracking.collectLeaks(); LeakTracking.stop(); From bd43e6b36b55d00398fd2ee25568ead3acf12ef7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Fri, 8 Dec 2023 14:55:08 -0800 Subject: [PATCH 04/15] Update testing.dart --- .../leak_tracker_flutter_testing/lib/src/testing.dart | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index b4810b2c..4ce2feb0 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -7,7 +7,12 @@ import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import 'package:matcher/expect.dart'; -void setupLeakTrackingForTest( +/// Makes sure leak tracking is set up for a test. +/// +/// If `settings.ignore` is true, the method is noop. +/// If leak tracking is not started, starts it. +/// Configures `LeakTracking.phase` to match [settings]. +void maybeSetupLeakTrackingForTest( LeakTesting settings, String testDescription, ) { @@ -31,7 +36,9 @@ void setupLeakTrackingForTest( LeakTracking.phase = phase; } -void tearDownLeakTrackingForTest() { +/// If leak tracking is enabled, stops it and declares notDisposed objects as leaks. +void maybeTearDownLeakTrackingForTest() { + if (LeakTracking.phase.ignoreLeaks) return; LeakTracking.phase = const PhaseSettings.ignored(); LeakTracking.declareNotDisposedObjectsAsLeaks(); } From b6276b4013a3d1a364d62fa1a17e117fd491e242 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Sun, 10 Dec 2023 14:21:31 -0800 Subject: [PATCH 05/15] - --- pkgs/leak_tracker_flutter_testing/CHANGELOG.md | 5 +++-- pkgs/leak_tracker_flutter_testing/pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/CHANGELOG.md b/pkgs/leak_tracker_flutter_testing/CHANGELOG.md index 900b7738..bf05b5c8 100644 --- a/pkgs/leak_tracker_flutter_testing/CHANGELOG.md +++ b/pkgs/leak_tracker_flutter_testing/CHANGELOG.md @@ -1,6 +1,7 @@ -## 1.0.11-wip +## 1.0.11 -* Updated to use `package:lints/recommended.yaml` for analysis. +* Update to use `package:lints/recommended.yaml` for analysis. +* Add API to integrate with testWidgets. ## 1.0.10 diff --git a/pkgs/leak_tracker_flutter_testing/pubspec.yaml b/pkgs/leak_tracker_flutter_testing/pubspec.yaml index 33ae60b6..5ebdb131 100644 --- a/pkgs/leak_tracker_flutter_testing/pubspec.yaml +++ b/pkgs/leak_tracker_flutter_testing/pubspec.yaml @@ -1,5 +1,5 @@ name: leak_tracker_flutter_testing -version: 1.0.11-wip +version: 1.0.11 description: An internal package to test leak tracking with Flutter. repository: https://github.com/dart-lang/leak_tracker/tree/main/pkgs/leak_tracker_flutter_testing From 8b34fb137c180574622f38a9ab1a74c26f34ac0a Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Sun, 10 Dec 2023 15:29:34 -0800 Subject: [PATCH 06/15] - --- .../tests/end_to_end/failing_tests/flutter_test_config.dart | 1 - .../test/tests/end_to_end/no_config_test.dart | 1 - .../end_to_end/per_test_config_test/flutter_test_config.dart | 2 -- .../end_to_end/per_test_config_test/per_test_config_test.dart | 1 - .../settings_not_disposed_off_test/flutter_test_config.dart | 1 - .../settings_not_gced_off_test/flutter_test_config.dart | 1 - 6 files changed, 7 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart index f0025dd4..8b3db857 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; import 'failure_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart index 9c26b949..22bb04ac 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; import '../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart index aaebf9f0..8bfca8b7 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart @@ -5,9 +5,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../../test_infra/dart_classes.dart'; import 'per_test_config_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart index e232b0e7..855b6cf2 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart @@ -4,7 +4,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; import '../../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart index a87f04c3..0815e3b4 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; /// Test configuration for each test library in this directory. diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart index 3867e80a..bb1e25ba 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; /// Test configuration for each test library in this directory. From 93aef79d559aca5597c94fb10fab9571dd7999f4 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Mon, 11 Dec 2023 12:28:14 -0800 Subject: [PATCH 07/15] Update testing.dart --- pkgs/leak_tracker_flutter_testing/lib/src/testing.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index 4ce2feb0..01945741 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -38,7 +38,7 @@ void maybeSetupLeakTrackingForTest( /// If leak tracking is enabled, stops it and declares notDisposed objects as leaks. void maybeTearDownLeakTrackingForTest() { - if (LeakTracking.phase.ignoreLeaks) return; + if (!LeakTracking.isStarted || LeakTracking.phase.ignoreLeaks) return; LeakTracking.phase = const PhaseSettings.ignored(); LeakTracking.declareNotDisposedObjectsAsLeaks(); } From 299a5056d00de7c84a15cd3e28d7a32bde6413e7 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 12:19:02 -0800 Subject: [PATCH 08/15] - --- pkgs/leak_tracker/lib/leak_tracker.dart | 1 - .../tests/leak_tracking/leak_testing_test.dart | 2 +- .../lib/src/testing.dart | 13 +------------ .../test/tests/end_to_end/baselining_test.dart | 1 + .../failing_tests/flutter_test_config.dart | 1 + .../test/tests/end_to_end/no_config_test.dart | 1 + .../per_test_config_test/flutter_test_config.dart | 1 + .../per_test_config_test.dart | 1 + .../flutter_test_config.dart | 1 + .../flutter_test_config.dart | 1 + .../test/tests/leak_tracking_for_tests_test.dart | 1 + .../lib/leak_tracker_testing.dart | 1 + .../lib/src}/leak_testing.dart | 15 +++++++++++++-- 13 files changed, 24 insertions(+), 16 deletions(-) rename pkgs/{leak_tracker/lib/src/leak_tracking => leak_tracker_testing/lib/src}/leak_testing.dart (93%) diff --git a/pkgs/leak_tracker/lib/leak_tracker.dart b/pkgs/leak_tracker/lib/leak_tracker.dart index c84268b9..1ba13753 100644 --- a/pkgs/leak_tracker/lib/leak_tracker.dart +++ b/pkgs/leak_tracker/lib/leak_tracker.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. export 'src/leak_tracking/helpers.dart'; -export 'src/leak_tracking/leak_testing.dart'; export 'src/leak_tracking/leak_tracking.dart'; export 'src/leak_tracking/primitives/model.dart'; export 'src/shared/shared_model.dart'; diff --git a/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart b/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart index 261e7ed8..e7cfd793 100644 --- a/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart +++ b/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart @@ -2,7 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:leak_tracker/src/leak_tracking/leak_testing.dart'; +import '../../../../leak_tracker_testing/lib/src/leak_testing.dart'; import 'package:leak_tracker/src/leak_tracking/primitives/model.dart'; import 'package:test/test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index 01945741..e6fe1c22 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -5,7 +5,6 @@ import 'package:flutter/foundation.dart'; import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_testing/leak_tracker_testing.dart'; -import 'package:matcher/expect.dart'; /// Makes sure leak tracking is set up for a test. /// @@ -58,19 +57,9 @@ Future maybeTearDownLeakTrackingForAll() async { final Leaks leaks = await LeakTracking.collectLeaks(); LeakTracking.stop(); - collectedLeaksReporter(leaks); + LeakTesting.collectedLeaksReporter(leaks); } -/// Handler for memory leaks found in tests. -/// -/// Set it to analyse the leaks programmatically. -/// The handler is invoked on tear down of the test run. -/// The default reporter fails in case of found leaks. -/// -/// Used to test leak tracking functionality. -LeaksCallback collectedLeaksReporter = - (Leaks leaks) => expect(leaks, isLeakFree); - void _dispatchFlutterEventToLeakTracker(ObjectEvent event) { return LeakTracking.dispatchObjectEvent(event.toMap()); } diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart index 54d04113..bb47c141 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; void main() { testWidgetsWithLeakTracking( diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart index 8b3db857..38085c0d 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import 'failure_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart index 22bb04ac..e2d7348b 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart index 8bfca8b7..515e55a8 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../../test_infra/dart_classes.dart'; import 'per_test_config_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart index 855b6cf2..40cc7c5c 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart @@ -5,6 +5,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart index 0815e3b4..35f85b79 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; /// Test configuration for each test library in this directory. /// diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart index bb1e25ba..9ca7a976 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; /// Test configuration for each test library in this directory. /// diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/leak_tracking_for_tests_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/leak_tracking_for_tests_test.dart index e51c7103..2220eb37 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/leak_tracking_for_tests_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/leak_tracking_for_tests_test.dart @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker/leak_tracker.dart'; +import 'package:leak_tracker_testing/leak_tracker_testing.dart'; class _Classes { static const anyLeak1 = 'anyLeak1'; diff --git a/pkgs/leak_tracker_testing/lib/leak_tracker_testing.dart b/pkgs/leak_tracker_testing/lib/leak_tracker_testing.dart index 8dd06554..77e69558 100644 --- a/pkgs/leak_tracker_testing/lib/leak_tracker_testing.dart +++ b/pkgs/leak_tracker_testing/lib/leak_tracker_testing.dart @@ -3,3 +3,4 @@ // BSD-style license that can be found in the LICENSE file. export 'src/matchers.dart'; +export 'src/leak_testing.dart'; diff --git a/pkgs/leak_tracker/lib/src/leak_tracking/leak_testing.dart b/pkgs/leak_tracker_testing/lib/src/leak_testing.dart similarity index 93% rename from pkgs/leak_tracker/lib/src/leak_tracking/leak_testing.dart rename to pkgs/leak_tracker_testing/lib/src/leak_testing.dart index 9e5393db..f19ce334 100644 --- a/pkgs/leak_tracker/lib/src/leak_tracking/leak_testing.dart +++ b/pkgs/leak_tracker_testing/lib/src/leak_testing.dart @@ -2,10 +2,11 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +import 'package:leak_tracker/leak_tracker.dart'; +import 'package:matcher/expect.dart'; import 'package:meta/meta.dart'; -import '../shared/shared_model.dart'; -import 'primitives/model.dart'; +import 'matchers.dart'; void _emptyLeakHandler(Leaks leaks) {} @@ -43,6 +44,16 @@ class LeakTesting { this.baselining = const MemoryBaselining.none(), }); + /// Handler for memory leaks found in tests. + /// + /// Set it to analyse the leaks programmatically. + /// The handler is invoked on tear down of the test run. + /// The default reporter fails in case of found leaks. + /// + /// Used to test leak tracking functionality. + static LeaksCallback collectedLeaksReporter = + (Leaks leaks) => expect(leaks, isLeakFree); + /// Current configuration for leak tracking. /// /// Is used by `testWidgets` if configuration is not provided for a test. From 9d2892435c6f78b350ba00fddf6ec448a0e35d7c Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 12:30:16 -0800 Subject: [PATCH 09/15] - --- .../lib/leak_tracker_flutter_testing.dart | 5 +++-- .../lib/src/testing.dart | 13 +++++++------ pkgs/leak_tracker_testing/pubspec.yaml | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart b/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart index 6c58ccd9..3bf816ab 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/leak_tracker_flutter_testing.dart @@ -7,5 +7,6 @@ export 'src/model.dart'; export 'src/test_widgets.dart'; export 'src/testing.dart'; export 'package:leak_tracker/leak_tracker.dart' - show LeakTesting, Leaks, LeakTracking, IgnoredLeaks, LeakType, LeakReport; -export 'package:leak_tracker_testing/leak_tracker_testing.dart' show isLeakFree; + show Leaks, LeakTracking, IgnoredLeaks, LeakType, LeakReport; +export 'package:leak_tracker_testing/leak_tracker_testing.dart' + show isLeakFree, LeakTesting; diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index e6fe1c22..74f759ee 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -12,10 +12,11 @@ import 'package:leak_tracker_testing/leak_tracker_testing.dart'; /// If leak tracking is not started, starts it. /// Configures `LeakTracking.phase` to match [settings]. void maybeSetupLeakTrackingForTest( - LeakTesting settings, + LeakTesting? settings, String testDescription, ) { - if (settings.ignore) return; + final leakTesting = settings ?? LeakTesting.settings; + if (leakTesting.ignore) return; if (!_checkPlatformAndMayBePrintWarning( platformName: defaultTargetPlatform.name, isBrowser: kIsWeb)) { @@ -26,10 +27,10 @@ void maybeSetupLeakTrackingForTest( final PhaseSettings phase = PhaseSettings( name: testDescription, - leakDiagnosticConfig: settings.leakDiagnosticConfig, - ignoredLeaks: settings.ignoredLeaks, - baselining: settings.baselining, - ignoreLeaks: settings.ignore, + leakDiagnosticConfig: leakTesting.leakDiagnosticConfig, + ignoredLeaks: leakTesting.ignoredLeaks, + baselining: leakTesting.baselining, + ignoreLeaks: leakTesting.ignore, ); LeakTracking.phase = phase; diff --git a/pkgs/leak_tracker_testing/pubspec.yaml b/pkgs/leak_tracker_testing/pubspec.yaml index 1f736b47..27395def 100644 --- a/pkgs/leak_tracker_testing/pubspec.yaml +++ b/pkgs/leak_tracker_testing/pubspec.yaml @@ -12,6 +12,7 @@ environment: dependencies: leak_tracker: '>=9.0.0 <11.0.0' matcher: ^0.12.16 + meta: ^1.11.0 dev_dependencies: layerlens: ^1.0.0 From 52f3d1dd610d32995ce02e2b1450c4651dd359e0 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 12:48:29 -0800 Subject: [PATCH 10/15] Update CHANGELOG.md --- pkgs/leak_tracker_flutter_testing/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/leak_tracker_flutter_testing/CHANGELOG.md b/pkgs/leak_tracker_flutter_testing/CHANGELOG.md index bf05b5c8..d996cba0 100644 --- a/pkgs/leak_tracker_flutter_testing/CHANGELOG.md +++ b/pkgs/leak_tracker_flutter_testing/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.0.11 +## 1.0.12 * Update to use `package:lints/recommended.yaml` for analysis. * Add API to integrate with testWidgets. From 49d0f42aa184b8604c75303c477ee0da4b783a39 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 12:54:00 -0800 Subject: [PATCH 11/15] - --- .../test}/leak_testing_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename pkgs/{leak_tracker/test/tests/leak_tracking => leak_tracker_testing/test}/leak_testing_test.dart (98%) diff --git a/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart b/pkgs/leak_tracker_testing/test/leak_testing_test.dart similarity index 98% rename from pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart rename to pkgs/leak_tracker_testing/test/leak_testing_test.dart index e7cfd793..24704324 100644 --- a/pkgs/leak_tracker/test/tests/leak_tracking/leak_testing_test.dart +++ b/pkgs/leak_tracker_testing/test/leak_testing_test.dart @@ -2,8 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import '../../../../leak_tracker_testing/lib/src/leak_testing.dart'; import 'package:leak_tracker/src/leak_tracking/primitives/model.dart'; +import 'package:leak_tracker_testing/src/leak_testing.dart'; import 'package:test/test.dart'; void main() { From 0b70132ffd6c67f2199ddafd5e03ca972f9d73c9 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 12:57:07 -0800 Subject: [PATCH 12/15] - --- pkgs/leak_tracker/CHANGELOG.md | 4 ++++ pkgs/leak_tracker/pubspec.yaml | 2 +- pkgs/leak_tracker_testing/CHANGELOG.md | 3 ++- pkgs/leak_tracker_testing/pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/leak_tracker/CHANGELOG.md b/pkgs/leak_tracker/CHANGELOG.md index e571d441..34519737 100644 --- a/pkgs/leak_tracker/CHANGELOG.md +++ b/pkgs/leak_tracker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 9.0.17 + +* Move LeakTesting to leak_tracker_testing. + ## 9.0.16 * Stub web implementation for retaining path to serve G3. diff --git a/pkgs/leak_tracker/pubspec.yaml b/pkgs/leak_tracker/pubspec.yaml index 97bba935..3b79e3ab 100644 --- a/pkgs/leak_tracker/pubspec.yaml +++ b/pkgs/leak_tracker/pubspec.yaml @@ -1,5 +1,5 @@ name: leak_tracker -version: 9.0.16 +version: 9.0.17 description: A framework for memory leak tracking for Dart and Flutter applications. repository: https://github.com/dart-lang/leak_tracker/tree/main/pkgs/leak_tracker diff --git a/pkgs/leak_tracker_testing/CHANGELOG.md b/pkgs/leak_tracker_testing/CHANGELOG.md index 16240a8a..9ce6acfa 100644 --- a/pkgs/leak_tracker_testing/CHANGELOG.md +++ b/pkgs/leak_tracker_testing/CHANGELOG.md @@ -1,6 +1,7 @@ -## 1.0.6-wip +## 1.0.6 * Updated to use `package:lints/recommended.yaml` for analysis. +* Move LeakTesting from leak_tracker to this library. ## 1.0.5 diff --git a/pkgs/leak_tracker_testing/pubspec.yaml b/pkgs/leak_tracker_testing/pubspec.yaml index 27395def..7c7adc12 100644 --- a/pkgs/leak_tracker_testing/pubspec.yaml +++ b/pkgs/leak_tracker_testing/pubspec.yaml @@ -1,5 +1,5 @@ name: leak_tracker_testing -version: 1.0.6-wip +version: 1.0.6 description: Leak tracking code intended for usage in tests. repository: https://github.com/dart-lang/leak_tracker/tree/main/pkgs/leak_tracker_testing From eec92b0177d568f51e65a63df8c0eca4a4b0ee0d Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 13:35:00 -0800 Subject: [PATCH 13/15] - --- .../test/tests/testing_test.dart | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 pkgs/leak_tracker_flutter_testing/test/tests/testing_test.dart diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/testing_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/testing_test.dart new file mode 100644 index 00000000..44c69d79 --- /dev/null +++ b/pkgs/leak_tracker_flutter_testing/test/tests/testing_test.dart @@ -0,0 +1,83 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; + +final LeakTesting settings = + LeakTesting.settings.withIgnored(allNotDisposed: true, allNotGCed: true); + +void main() { + group('maybeSetupLeakTrackingForTest', () { + setUp(() { + LeakTesting.settings = LeakTesting.settings.withTrackedAll(); + }); + + tearDown(() { + LeakTracking.stop(); + }); + + test('If settings is null, respects globals', () { + maybeSetupLeakTrackingForTest(null, 'myTest1'); + expect(LeakTracking.isStarted, true); + expect(LeakTracking.phase.name, 'myTest1'); + expect(LeakTracking.phase.ignoreLeaks, LeakTesting.settings.ignore); + expect( + LeakTracking.phase.ignoredLeaks, + LeakTesting.settings.ignoredLeaks, + ); + }); + + test('If settings are provided, respects them', () { + maybeSetupLeakTrackingForTest(settings, 'myTest2'); + expect(LeakTracking.isStarted, true); + expect(LeakTracking.phase.name, 'myTest2'); + expect(LeakTracking.phase.ignoreLeaks, settings.ignore); + expect( + LeakTracking.phase.ignoredLeaks, + settings.ignoredLeaks, + ); + }); + }); + + group('maybeTearDownLeakTrackingForTest', () { + setUp(() { + LeakTesting.settings = LeakTesting.settings.withTrackedAll(); + maybeSetupLeakTrackingForTest(null, 'myTest1'); + }); + + tearDown(() { + LeakTracking.stop(); + }); + + test('Pauses leak tracking and can be invoiked twice', () { + maybeTearDownLeakTrackingForTest(); + expect(LeakTracking.phase.name, null); + expect(LeakTracking.isStarted, true); + expect(LeakTracking.phase.ignoreLeaks, true); + + maybeTearDownLeakTrackingForTest(); + expect(LeakTracking.phase.name, null); + expect(LeakTracking.isStarted, true); + expect(LeakTracking.phase.ignoreLeaks, true); + }); + }); + + group('maybeTearDownLeakTrackingForAll', () { + setUp(() { + LeakTesting.settings = LeakTesting.settings.withTrackedAll(); + maybeSetupLeakTrackingForTest(null, 'myTest1'); + maybeTearDownLeakTrackingForTest(); + }); + + tearDown(() { + LeakTracking.stop(); + }); + + test('Stops leak tracking', () async { + await maybeTearDownLeakTrackingForAll(); + expect(LeakTracking.isStarted, false); + }); + }); +} From a7f1961ac7c3cbb40cd5797847ae6d5eff2fd100 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 14:29:50 -0800 Subject: [PATCH 14/15] - --- .../test/tests/end_to_end/baselining_test.dart | 1 - .../test/tests/end_to_end/failing_tests/flutter_test_config.dart | 1 - .../test/tests/end_to_end/no_config_test.dart | 1 - .../end_to_end/per_test_config_test/flutter_test_config.dart | 1 - .../end_to_end/per_test_config_test/per_test_config_test.dart | 1 - .../settings_not_disposed_off_test/flutter_test_config.dart | 1 - .../settings_not_gced_off_test/flutter_test_config.dart | 1 - 7 files changed, 7 deletions(-) diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart index bb47c141..54d04113 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/baselining_test.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker/leak_tracker.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; void main() { testWidgetsWithLeakTracking( diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart index 38085c0d..8b3db857 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/failing_tests/flutter_test_config.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import 'failure_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart index e2d7348b..22bb04ac 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/no_config_test.dart @@ -4,7 +4,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart index 515e55a8..8bfca8b7 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/flutter_test_config.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../../test_infra/dart_classes.dart'; import 'per_test_config_test.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart index 40cc7c5c..855b6cf2 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/per_test_config_test/per_test_config_test.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; import '../../../test_infra/flutter_classes.dart'; diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart index 35f85b79..0815e3b4 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_disposed_off_test/flutter_test_config.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; /// Test configuration for each test library in this directory. /// diff --git a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart index 9ca7a976..bb1e25ba 100644 --- a/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart +++ b/pkgs/leak_tracker_flutter_testing/test/tests/end_to_end/settings_not_gced_off_test/flutter_test_config.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; -import 'package:leak_tracker_testing/leak_tracker_testing.dart'; /// Test configuration for each test library in this directory. /// From dc9a8d3eb2553e120114731fc0e1e97ef671e3fa Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Tue, 12 Dec 2023 16:27:40 -0800 Subject: [PATCH 15/15] Update testing.dart --- pkgs/leak_tracker_flutter_testing/lib/src/testing.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart index 74f759ee..7d661fdb 100644 --- a/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart +++ b/pkgs/leak_tracker_flutter_testing/lib/src/testing.dart @@ -40,7 +40,6 @@ void maybeSetupLeakTrackingForTest( void maybeTearDownLeakTrackingForTest() { if (!LeakTracking.isStarted || LeakTracking.phase.ignoreLeaks) return; LeakTracking.phase = const PhaseSettings.ignored(); - LeakTracking.declareNotDisposedObjectsAsLeaks(); } /// Should be invoked after execution of all tests to report found leaks. @@ -55,6 +54,7 @@ Future maybeTearDownLeakTrackingForAll() async { // because GC may happen after test is complete. MemoryAllocations.instance.removeListener(_dispatchFlutterEventToLeakTracker); await forceGC(fullGcCycles: defaultNumberOfGcCycles); + LeakTracking.declareNotDisposedObjectsAsLeaks(); final Leaks leaks = await LeakTracking.collectLeaks(); LeakTracking.stop();