From 2afded6170efa3592cc2c44ad1108674074f88fe Mon Sep 17 00:00:00 2001 From: Polina Cherkasova <polinach@google.com> Date: Tue, 22 Aug 2023 17:06:05 -0700 Subject: [PATCH] Add test to mark recording as leaking. (#133073) --- .../test/animation/animation_sheet_test.dart | 36 +++++++++++-- .../test/animation/live_binding_test.dart | 8 ++- .../test/material/date_range_picker_test.dart | 13 ++--- .../material/text_selection_theme_test.dart | 50 ++++++++++--------- 4 files changed, 71 insertions(+), 36 deletions(-) diff --git a/packages/flutter/test/animation/animation_sheet_test.dart b/packages/flutter/test/animation/animation_sheet_test.dart index 0d60746c45df..df48b9e4baee 100644 --- a/packages/flutter/test/animation/animation_sheet_test.dart +++ b/packages/flutter/test/animation/animation_sheet_test.dart @@ -11,6 +11,7 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; void main() { @@ -19,7 +20,25 @@ void main() { * because [matchesGoldenFile] does not use Skia Gold in its native package. */ - testWidgets('correctly records frames using collate', (WidgetTester tester) async { + testWidgetsWithLeakTracking('recording disposes images', + (WidgetTester tester) async { + final AnimationSheetBuilder builder = AnimationSheetBuilder(frameSize: _DecuplePixels.size); + + await tester.pumpFrames( + builder.record( + const _DecuplePixels(Duration(seconds: 1)), + ), + const Duration(milliseconds: 200), + const Duration(milliseconds: 100), + ); + }, + skip: isBrowser, // [intended] https://github.com/flutter/flutter/issues/56001 + // TODO(polina-c): remove after fixing https://github.com/flutter/flutter/issues/133071 + leakTrackingTestConfig: const LeakTrackingTestConfig(allowAllNotDisposed: true), + ); + + testWidgetsWithLeakTracking('correctly records frames using collate', + (WidgetTester tester) async { final AnimationSheetBuilder builder = AnimationSheetBuilder(frameSize: _DecuplePixels.size); await tester.pumpFrames( @@ -53,10 +72,15 @@ void main() { image, matchesGoldenFile('test.animation_sheet_builder.collate.png'), ); + image.dispose(); - }, skip: isBrowser); // https://github.com/flutter/flutter/issues/56001 + }, + skip: isBrowser, // [intended] https://github.com/flutter/flutter/issues/56001 + // TODO(polina-c): remove after fixing https://github.com/flutter/flutter/issues/133071 + leakTrackingTestConfig: const LeakTrackingTestConfig(allowAllNotDisposed: true), + ); // https://github.com/flutter/flutter/issues/56001 - testWidgets('use allLayers to record out-of-subtree contents', (WidgetTester tester) async { + testWidgetsWithLeakTracking('use allLayers to record out-of-subtree contents', (WidgetTester tester) async { final AnimationSheetBuilder builder = AnimationSheetBuilder( frameSize: const Size(8, 2), allLayers: true, @@ -88,7 +112,11 @@ void main() { matchesGoldenFile('test.animation_sheet_builder.out_of_tree.png'), ); image.dispose(); - }, skip: isBrowser); // https://github.com/flutter/flutter/issues/56001 + }, + skip: isBrowser, // [intended] https://github.com/flutter/flutter/issues/56001 + // TODO(polina-c): remove after fixing https://github.com/flutter/flutter/issues/133071 + leakTrackingTestConfig: const LeakTrackingTestConfig(allowAllNotDisposed: true), + ); } // An animation of a yellow pixel moving from left to right, in a container of diff --git a/packages/flutter/test/animation/live_binding_test.dart b/packages/flutter/test/animation/live_binding_test.dart index e0d523fb22ab..5959c669bb27 100644 --- a/packages/flutter/test/animation/live_binding_test.dart +++ b/packages/flutter/test/animation/live_binding_test.dart @@ -79,7 +79,7 @@ void main() { // Currently skipped due to daily flake: https://github.com/flutter/flutter/issues/87588 }, skip: true); // Typically skip: isBrowser https://github.com/flutter/flutter/issues/42767 - testWidgets('Should show event indicator for pointer events with setSurfaceSize', (WidgetTester tester) async { + testWidgetsWithLeakTracking('Should show event indicator for pointer events with setSurfaceSize', (WidgetTester tester) async { final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(frameSize: const Size(200, 200), allLayers: true); final List<Offset> taps = <Offset>[]; Widget target({bool recording = true}) => Container( @@ -138,5 +138,9 @@ void main() { matchesGoldenFile('LiveBinding.press.animation.2.png'), ); image.dispose(); - }, skip: isBrowser); // https://github.com/flutter/flutter/issues/56001 + }, + skip: isBrowser, // [intended] https://github.com/flutter/flutter/issues/56001 + // TODO(polina-c): remove after fixing https://github.com/flutter/flutter/issues/133071 + leakTrackingTestConfig: const LeakTrackingTestConfig(allowAllNotDisposed: true), + ); } diff --git a/packages/flutter/test/material/date_range_picker_test.dart b/packages/flutter/test/material/date_range_picker_test.dart index 021a85b5db95..6bd0e10eff51 100644 --- a/packages/flutter/test/material/date_range_picker_test.dart +++ b/packages/flutter/test/material/date_range_picker_test.dart @@ -255,12 +255,13 @@ void main() { await tester.tap(find.text('Cancel')); await tester.pumpAndSettle(); }, - // TODO(polina-c): remove after resolving - // https://github.com/flutter/flutter/issues/130354 - leakTrackingTestConfig: const LeakTrackingTestConfig( - allowAllNotGCed: true, - allowAllNotDisposed: true, - )); + // TODO(polina-c): remove after resolving + // https://github.com/flutter/flutter/issues/130354 + leakTrackingTestConfig: const LeakTrackingTestConfig( + allowAllNotGCed: true, + allowAllNotDisposed: true, + ), + ); }); testWidgets('Save and help text is used', (WidgetTester tester) async { diff --git a/packages/flutter/test/material/text_selection_theme_test.dart b/packages/flutter/test/material/text_selection_theme_test.dart index ecd0850d8069..947df64c3f3b 100644 --- a/packages/flutter/test/material/text_selection_theme_test.dart +++ b/packages/flutter/test/material/text_selection_theme_test.dart @@ -106,18 +106,19 @@ void main() { final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint)); expect(handle, paints..path(color: defaultSelectionHandleColor)); }, - // TODO(polina-c): remove after fixing - // https://github.com/flutter/flutter/issues/130469 - leakTrackingTestConfig: const LeakTrackingTestConfig( - notDisposedAllowList: <String, int?>{ - 'ValueNotifier<MagnifierInfo>': 1, - 'ValueNotifier<_OverlayEntryWidgetState?>': 2, - 'ValueNotifier<bool>': 2, - '_InputBorderGap': 1, - }, - // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. - allowAllNotGCed: true, - )); + // TODO(polina-c): remove after fixing + // https://github.com/flutter/flutter/issues/130469 + leakTrackingTestConfig: const LeakTrackingTestConfig( + notDisposedAllowList: <String, int?>{ + 'ValueNotifier<MagnifierInfo>': 1, + 'ValueNotifier<_OverlayEntryWidgetState?>': 2, + 'ValueNotifier<bool>': 2, + '_InputBorderGap': 1, + }, + // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. + allowAllNotGCed: true, + ), + ); testWidgetsWithLeakTracking('Material3 - Empty textSelectionTheme will use defaults', (WidgetTester tester) async { final ThemeData theme = ThemeData(useMaterial3: true); @@ -167,18 +168,19 @@ void main() { final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint)); expect(handle, paints..path(color: defaultSelectionHandleColor)); }, - // TODO(polina-c): remove after fixing - // https://github.com/flutter/flutter/issues/130469 - leakTrackingTestConfig: const LeakTrackingTestConfig( - notDisposedAllowList: <String, int?>{ - 'ValueNotifier<MagnifierInfo>': 1, - 'ValueNotifier<_OverlayEntryWidgetState?>': 2, - 'ValueNotifier<bool>': 2, - '_InputBorderGap': 1, - }, - // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. - allowAllNotGCed: true, - )); + // TODO(polina-c): remove after fixing + // https://github.com/flutter/flutter/issues/130469 + leakTrackingTestConfig: const LeakTrackingTestConfig( + notDisposedAllowList: <String, int?>{ + 'ValueNotifier<MagnifierInfo>': 1, + 'ValueNotifier<_OverlayEntryWidgetState?>': 2, + 'ValueNotifier<bool>': 2, + '_InputBorderGap': 1, + }, + // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. + allowAllNotGCed: true, + ), + ); testWidgets('ThemeData.textSelectionTheme will be used if provided', (WidgetTester tester) async { const TextSelectionThemeData textSelectionTheme = TextSelectionThemeData(