Unverified Commit 2afded61 authored by Polina Cherkasova's avatar Polina Cherkasova Committed by GitHub

Add test to mark recording as leaking. (#133073)

parent 5e9e959d
...@@ -11,6 +11,7 @@ import 'dart:ui' as ui; ...@@ -11,6 +11,7 @@ import 'dart:ui' as ui;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() { void main() {
...@@ -19,7 +20,25 @@ void main() { ...@@ -19,7 +20,25 @@ void main() {
* because [matchesGoldenFile] does not use Skia Gold in its native package. * 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); final AnimationSheetBuilder builder = AnimationSheetBuilder(frameSize: _DecuplePixels.size);
await tester.pumpFrames( await tester.pumpFrames(
...@@ -53,10 +72,15 @@ void main() { ...@@ -53,10 +72,15 @@ void main() {
image, image,
matchesGoldenFile('test.animation_sheet_builder.collate.png'), matchesGoldenFile('test.animation_sheet_builder.collate.png'),
); );
image.dispose(); 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( final AnimationSheetBuilder builder = AnimationSheetBuilder(
frameSize: const Size(8, 2), frameSize: const Size(8, 2),
allLayers: true, allLayers: true,
...@@ -88,7 +112,11 @@ void main() { ...@@ -88,7 +112,11 @@ void main() {
matchesGoldenFile('test.animation_sheet_builder.out_of_tree.png'), matchesGoldenFile('test.animation_sheet_builder.out_of_tree.png'),
); );
image.dispose(); 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 // An animation of a yellow pixel moving from left to right, in a container of
......
...@@ -79,7 +79,7 @@ void main() { ...@@ -79,7 +79,7 @@ void main() {
// Currently skipped due to daily flake: https://github.com/flutter/flutter/issues/87588 // 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 }, 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 AnimationSheetBuilder animationSheet = AnimationSheetBuilder(frameSize: const Size(200, 200), allLayers: true);
final List<Offset> taps = <Offset>[]; final List<Offset> taps = <Offset>[];
Widget target({bool recording = true}) => Container( Widget target({bool recording = true}) => Container(
...@@ -138,5 +138,9 @@ void main() { ...@@ -138,5 +138,9 @@ void main() {
matchesGoldenFile('LiveBinding.press.animation.2.png'), matchesGoldenFile('LiveBinding.press.animation.2.png'),
); );
image.dispose(); 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),
);
} }
...@@ -255,12 +255,13 @@ void main() { ...@@ -255,12 +255,13 @@ void main() {
await tester.tap(find.text('Cancel')); await tester.tap(find.text('Cancel'));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
}, },
// TODO(polina-c): remove after resolving // TODO(polina-c): remove after resolving
// https://github.com/flutter/flutter/issues/130354 // https://github.com/flutter/flutter/issues/130354
leakTrackingTestConfig: const LeakTrackingTestConfig( leakTrackingTestConfig: const LeakTrackingTestConfig(
allowAllNotGCed: true, allowAllNotGCed: true,
allowAllNotDisposed: true, allowAllNotDisposed: true,
)); ),
);
}); });
testWidgets('Save and help text is used', (WidgetTester tester) async { testWidgets('Save and help text is used', (WidgetTester tester) async {
......
...@@ -106,18 +106,19 @@ void main() { ...@@ -106,18 +106,19 @@ void main() {
final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint)); final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint));
expect(handle, paints..path(color: defaultSelectionHandleColor)); expect(handle, paints..path(color: defaultSelectionHandleColor));
}, },
// TODO(polina-c): remove after fixing // TODO(polina-c): remove after fixing
// https://github.com/flutter/flutter/issues/130469 // https://github.com/flutter/flutter/issues/130469
leakTrackingTestConfig: const LeakTrackingTestConfig( leakTrackingTestConfig: const LeakTrackingTestConfig(
notDisposedAllowList: <String, int?>{ notDisposedAllowList: <String, int?>{
'ValueNotifier<MagnifierInfo>': 1, 'ValueNotifier<MagnifierInfo>': 1,
'ValueNotifier<_OverlayEntryWidgetState?>': 2, 'ValueNotifier<_OverlayEntryWidgetState?>': 2,
'ValueNotifier<bool>': 2, 'ValueNotifier<bool>': 2,
'_InputBorderGap': 1, '_InputBorderGap': 1,
}, },
// TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed.
allowAllNotGCed: true, allowAllNotGCed: true,
)); ),
);
testWidgetsWithLeakTracking('Material3 - Empty textSelectionTheme will use defaults', (WidgetTester tester) async { testWidgetsWithLeakTracking('Material3 - Empty textSelectionTheme will use defaults', (WidgetTester tester) async {
final ThemeData theme = ThemeData(useMaterial3: true); final ThemeData theme = ThemeData(useMaterial3: true);
...@@ -167,18 +168,19 @@ void main() { ...@@ -167,18 +168,19 @@ void main() {
final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint)); final RenderBox handle = tester.firstRenderObject<RenderBox>(find.byType(CustomPaint));
expect(handle, paints..path(color: defaultSelectionHandleColor)); expect(handle, paints..path(color: defaultSelectionHandleColor));
}, },
// TODO(polina-c): remove after fixing // TODO(polina-c): remove after fixing
// https://github.com/flutter/flutter/issues/130469 // https://github.com/flutter/flutter/issues/130469
leakTrackingTestConfig: const LeakTrackingTestConfig( leakTrackingTestConfig: const LeakTrackingTestConfig(
notDisposedAllowList: <String, int?>{ notDisposedAllowList: <String, int?>{
'ValueNotifier<MagnifierInfo>': 1, 'ValueNotifier<MagnifierInfo>': 1,
'ValueNotifier<_OverlayEntryWidgetState?>': 2, 'ValueNotifier<_OverlayEntryWidgetState?>': 2,
'ValueNotifier<bool>': 2, 'ValueNotifier<bool>': 2,
'_InputBorderGap': 1, '_InputBorderGap': 1,
}, },
// TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed. // TODO(polina-c): investigate notGCed, if it does not disappear after fixing notDisposed.
allowAllNotGCed: true, allowAllNotGCed: true,
)); ),
);
testWidgets('ThemeData.textSelectionTheme will be used if provided', (WidgetTester tester) async { testWidgets('ThemeData.textSelectionTheme will be used if provided', (WidgetTester tester) async {
const TextSelectionThemeData textSelectionTheme = TextSelectionThemeData( const TextSelectionThemeData textSelectionTheme = TextSelectionThemeData(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment