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(