Unverified Commit c3db0209 authored by Kostia Sokolovskyi's avatar Kostia Sokolovskyi Committed by GitHub

Cover more test/widgets tests with leak tracking #9 (#135054)

parent d0004c95
......@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
......@@ -20,9 +21,11 @@ void main() {
);
}
testWidgets('updates its registrar and delegate based on the number of selectables', (WidgetTester tester) async {
testWidgetsWithLeakTracking('updates its registrar and delegate based on the number of selectables', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -42,9 +45,11 @@ void main() {
expect(delegate.selectables.length, 3);
});
testWidgets('disabled container', (WidgetTester tester) async {
testWidgetsWithLeakTracking('disabled container', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -65,10 +70,13 @@ void main() {
expect(delegate.selectables.length, 0);
});
testWidgets('Swapping out container delegate does not crash', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Swapping out container delegate does not crash', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
final TestContainerDelegate childDelegate = TestContainerDelegate();
addTearDown(childDelegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -90,6 +98,8 @@ void main() {
expect(delegate.value.hasContent, isTrue);
final TestContainerDelegate newDelegate = TestContainerDelegate();
addTearDown(newDelegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -112,10 +122,13 @@ void main() {
expect(tester.takeException(), isNull);
});
testWidgets('Can update within one frame', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Can update within one frame', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
final TestContainerDelegate childDelegate = TestContainerDelegate();
addTearDown(childDelegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -139,9 +152,11 @@ void main() {
expect(delegate.value.hasContent, isTrue);
});
testWidgets('selection container registers itself if there is a selectable child', (WidgetTester tester) async {
testWidgetsWithLeakTracking('selection container registers itself if there is a selectable child', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
await pumpContainer(
tester,
SelectionContainer(
......@@ -181,9 +196,10 @@ void main() {
expect(registrar.selectables.length, 0);
});
testWidgets('selection container gets registrar from context if not provided', (WidgetTester tester) async {
testWidgetsWithLeakTracking('selection container gets registrar from context if not provided', (WidgetTester tester) async {
final TestSelectionRegistrar registrar = TestSelectionRegistrar();
final TestContainerDelegate delegate = TestContainerDelegate();
addTearDown(delegate.dispose);
await pumpContainer(
tester,
......
......@@ -6,11 +6,12 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('can cease to be semantics boundary after markNeedsSemanticsUpdate() has already been called once', (WidgetTester tester) async {
testWidgetsWithLeakTracking('can cease to be semantics boundary after markNeedsSemanticsUpdate() has already been called once', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......
......@@ -6,11 +6,12 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('markNeedsSemanticsUpdate() called on non-boundary with non-boundary parent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('markNeedsSemanticsUpdate() called on non-boundary with non-boundary parent', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 1', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 1', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// smoketest
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 2', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 2', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// this test is the same as the test in Semantics 1, but
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 3', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 3', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// implicit annotators
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 4', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 4', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// O
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 5', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 5', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('can change semantics in a branch blocked by BlockSemantics', (WidgetTester tester) async {
testWidgetsWithLeakTracking('can change semantics in a branch blocked by BlockSemantics', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
final TestSemantics expectedSemantics = TestSemantics.root(
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 7 - Merging', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 7 - Merging', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
String label;
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics 8 - Merging with reset', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics 8 - Merging with reset', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......
......@@ -6,12 +6,13 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
group('BlockSemantics', () {
testWidgets('hides semantic nodes of siblings', (WidgetTester tester) async {
testWidgetsWithLeakTracking('hides semantic nodes of siblings', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(Stack(
......@@ -49,7 +50,7 @@ void main() {
semantics.dispose();
});
testWidgets('does not hides semantic nodes of siblings outside the current semantic boundary', (WidgetTester tester) async {
testWidgetsWithLeakTracking('does not hides semantic nodes of siblings outside the current semantic boundary', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(Directionality(textDirection: TextDirection.ltr, child: Stack(
......@@ -103,7 +104,7 @@ void main() {
semantics.dispose();
});
testWidgets('node is semantic boundary and blocking previously painted nodes', (WidgetTester tester) async {
testWidgetsWithLeakTracking('node is semantic boundary and blocking previously painted nodes', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
final GlobalKey stackKey = GlobalKey();
......
......@@ -5,11 +5,12 @@
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics can merge sibling group', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics can merge sibling group', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
const SemanticsTag first = SemanticsTag('1');
const SemanticsTag second = SemanticsTag('2');
......@@ -74,7 +75,7 @@ void main() {
semantics.dispose();
});
testWidgets('Semantics can drop semantics config', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics can drop semantics config', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
const SemanticsTag first = SemanticsTag('1');
const SemanticsTag second = SemanticsTag('2');
......@@ -132,7 +133,7 @@ void main() {
semantics.dispose();
});
testWidgets('Semantics throws when mark the same config twice case 1', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics throws when mark the same config twice case 1', (WidgetTester tester) async {
const SemanticsTag first = SemanticsTag('1');
const SemanticsTag second = SemanticsTag('2');
const SemanticsTag third = SemanticsTag('3');
......@@ -178,7 +179,7 @@ void main() {
expect(tester.takeException(), isAssertionError);
});
testWidgets('Semantics throws when mark the same config twice case 2', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics throws when mark the same config twice case 2', (WidgetTester tester) async {
const SemanticsTag first = SemanticsTag('1');
const SemanticsTag second = SemanticsTag('2');
const SemanticsTag third = SemanticsTag('3');
......@@ -224,7 +225,7 @@ void main() {
expect(tester.takeException(), isAssertionError);
});
testWidgets('RenderObject with semantics child delegate will mark correct boundary dirty', (WidgetTester tester) async {
testWidgetsWithLeakTracking('RenderObject with semantics child delegate will mark correct boundary dirty', (WidgetTester tester) async {
final UniqueKey inner = UniqueKey();
final UniqueKey boundaryParent = UniqueKey();
final UniqueKey grandBoundaryParent = UniqueKey();
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('SemanticNode.rect is clipped', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticNode.rect is clipped', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(const Directionality(
......@@ -67,7 +68,7 @@ void main() {
semantics.dispose();
});
testWidgets('SemanticsNode is not removed if out of bounds and merged into something within bounds', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsNode is not removed if out of bounds and merged into something within bounds', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(const Directionality(
......
......@@ -5,9 +5,10 @@
import 'package:flutter/foundation.dart';
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() {
testWidgets('SemanticsDebugger will schedule a frame', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger will schedule a frame', (WidgetTester tester) async {
await tester.pumpWidget(
SemanticsDebugger(
child: Container(),
......@@ -17,7 +18,7 @@ void main() {
expect(tester.binding.hasScheduledFrame, isTrue);
});
testWidgets('SemanticsDebugger smoke test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger smoke test', (WidgetTester tester) async {
// This is a smoketest to verify that adding a debugger doesn't crash.
await tester.pumpWidget(
......@@ -61,7 +62,7 @@ void main() {
expect(true, isTrue); // expect that we reach here without crashing
});
testWidgets('SemanticsDebugger reparents subtree', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger reparents subtree', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
await tester.pumpWidget(
......@@ -147,7 +148,7 @@ void main() {
expect(tester.takeException(), isNull);
});
testWidgets('SemanticsDebugger interaction test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger interaction test', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
......@@ -185,7 +186,7 @@ void main() {
log.clear();
});
testWidgets('SemanticsDebugger interaction test - negative', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger interaction test - negative', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
......@@ -225,7 +226,7 @@ void main() {
log.clear();
});
testWidgets('SemanticsDebugger scroll test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger scroll test', (WidgetTester tester) async {
final Key childKey = UniqueKey();
await tester.pumpWidget(
......@@ -268,7 +269,7 @@ void main() {
expect(tester.getTopLeft(find.byKey(childKey)).dy, equals(0.0));
});
testWidgets('SemanticsDebugger long press', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger long press', (WidgetTester tester) async {
bool didLongPress = false;
await tester.pumpWidget(
......@@ -290,7 +291,7 @@ void main() {
expect(didLongPress, isTrue);
});
testWidgets('SemanticsDebugger slider', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger slider', (WidgetTester tester) async {
double value = 0.75;
await tester.pumpWidget(
......@@ -337,7 +338,7 @@ void main() {
}
}, variant: TargetPlatformVariant.all());
testWidgets('SemanticsDebugger checkbox', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger checkbox', (WidgetTester tester) async {
final Key keyTop = UniqueKey();
final Key keyBottom = UniqueKey();
......@@ -378,7 +379,7 @@ void main() {
expect(valueTop, isFalse);
});
testWidgets('SemanticsDebugger checkbox message', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger checkbox message', (WidgetTester tester) async {
final Key checkbox = UniqueKey();
final Key checkboxUnchecked = UniqueKey();
final Key checkboxDisabled = UniqueKey();
......@@ -450,7 +451,7 @@ void main() {
);
});
testWidgets('SemanticsDebugger ignores duplicated label and tooltip for Android', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger ignores duplicated label and tooltip for Android', (WidgetTester tester) async {
final Key child = UniqueKey();
final Key debugger = UniqueKey();
final bool isPlatformAndroid = defaultTargetPlatform == TargetPlatform.android;
......@@ -477,7 +478,7 @@ void main() {
);
}, variant: TargetPlatformVariant.all());
testWidgets('SemanticsDebugger textfield', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger textfield', (WidgetTester tester) async {
final UniqueKey textField = UniqueKey();
final UniqueKey debugger = UniqueKey();
......@@ -504,7 +505,7 @@ void main() {
);
});
testWidgets('SemanticsDebugger label style is used in the painter.', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SemanticsDebugger label style is used in the painter.', (WidgetTester tester) async {
final UniqueKey debugger = UniqueKey();
const TextStyle labelStyle = TextStyle(color: Colors.amber);
await tester.pumpWidget(
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Un-layouted RenderObject in keep alive offstage area do not crash semantics compiler', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Un-layouted RenderObject in keep alive offstage area do not crash semantics compiler', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/20313.
final SemanticsTester semantics = SemanticsTester(tester);
......@@ -18,6 +19,7 @@ void main() {
const double bottomScrollOffset = 3000.0;
final ScrollController controller = ScrollController(initialScrollOffset: bottomScrollOffset);
addTearDown(controller.dispose);
await tester.pumpWidget(_buildTestWidget(
extraPadding: false,
......
......@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
......@@ -14,7 +15,7 @@ void main() {
debugResetSemanticsIdCounter();
});
testWidgets('MergeSemantics', (WidgetTester tester) async {
testWidgetsWithLeakTracking('MergeSemantics', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// not merged
......@@ -120,7 +121,7 @@ void main() {
semantics.dispose();
});
testWidgets('MergeSemantics works if other nodes are implicitly merged into its node', (WidgetTester tester) async {
testWidgetsWithLeakTracking('MergeSemantics works if other nodes are implicitly merged into its node', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......
......@@ -10,6 +10,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/semantics.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
......@@ -52,7 +53,7 @@ void _tests() {
// also update this code to reflect the new output.
//
// This test is flexible w.r.t. leading and trailing whitespace.
testWidgets('generates code', (WidgetTester tester) async {
testWidgetsWithLeakTracking('generates code', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await pumpTestWidget(tester);
final String code = semantics
......@@ -91,7 +92,7 @@ void _tests() {
expect('$code,', expectedCode);
});
testWidgets('generated code is correct', (WidgetTester tester) async {
testWidgetsWithLeakTracking('generated code is correct', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await pumpTestWidget(tester);
expect(
......
......@@ -5,11 +5,12 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Semantics tester visits last child', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Semantics tester visits last child', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
const TextStyle textStyle = TextStyle();
await tester.pumpWidget(
......
......@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
......@@ -21,7 +22,7 @@ void main() {
});
void testTraversal(String description, TraversalTestFunction testFunction) {
testWidgets(description, (WidgetTester tester) async {
testWidgetsWithLeakTracking(description, (WidgetTester tester) async {
final TraversalTester traversalTester = TraversalTester(tester);
await testFunction(traversalTester);
traversalTester.dispose();
......
......@@ -5,11 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('has only root node if surface size is 0x0', (WidgetTester tester) async {
testWidgetsWithLeakTracking('has only root node if surface size is 0x0', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(Semantics(
......
......@@ -4,6 +4,7 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
class Inside extends StatefulWidget {
const Inside({ super.key });
......@@ -65,7 +66,7 @@ class OutsideState extends State<Outside> {
}
void main() {
testWidgets('setState() smoke test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('setState() smoke test', (WidgetTester tester) async {
await tester.pumpWidget(const Outside());
final Offset location = tester.getCenter(find.text('INSIDE'));
final TestGesture gesture = await tester.startGesture(location);
......
......@@ -4,9 +4,10 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('setState() overbuild test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('setState() overbuild test', (WidgetTester tester) async {
final List<String> log = <String>[];
final Builder inner = Builder(
builder: (BuildContext context) {
......
......@@ -4,6 +4,7 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
late ChangerState changer;
......@@ -52,7 +53,7 @@ class LeafState extends State<Leaf> {
}
void main() {
testWidgets('three-way setState() smoke test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('three-way setState() smoke test', (WidgetTester tester) async {
await tester.pumpWidget(const Changer(Wrapper(Leaf())));
await tester.pumpWidget(const Changer(Wrapper(Leaf())));
changer.test();
......
......@@ -4,6 +4,7 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
class Changer extends StatefulWidget {
const Changer({ super.key });
......@@ -21,7 +22,7 @@ class ChangerState extends State<Changer> {
}
void main() {
testWidgets('setState() catches being used with an async callback', (WidgetTester tester) async {
testWidgetsWithLeakTracking('setState() catches being used with an async callback', (WidgetTester tester) async {
await tester.pumpWidget(const Changer());
final ChangerState s = tester.state(find.byType(Changer));
expect(s.test0, isNot(throwsFlutterError));
......
......@@ -4,6 +4,7 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
class BadWidget extends StatefulWidget {
const BadWidget({ super.key });
......@@ -27,7 +28,7 @@ class BadWidgetState extends State<BadWidget> {
}
void main() {
testWidgets('setState() catches being used inside a constructor', (WidgetTester tester) async {
testWidgetsWithLeakTracking('setState() catches being used inside a constructor', (WidgetTester tester) async {
await tester.pumpWidget(const BadWidget());
expect(tester.takeException(), isFlutterError);
});
......
......@@ -9,6 +9,7 @@ library;
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
Shader createShader(Rect bounds) {
return const LinearGradient(
......@@ -21,12 +22,12 @@ Shader createShader(Rect bounds) {
void main() {
testWidgets('Can be constructed', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Can be constructed', (WidgetTester tester) async {
const Widget child = SizedBox(width: 100.0, height: 100.0);
await tester.pumpWidget(const ShaderMask(shaderCallback: createShader, child: child));
});
testWidgets('Bounds rect includes offset', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Bounds rect includes offset', (WidgetTester tester) async {
late Rect shaderBounds;
Shader recordShaderBounds(Rect bounds) {
shaderBounds = bounds;
......@@ -50,7 +51,7 @@ void main() {
});
testWidgets('Bounds rect includes offset visual inspection', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Bounds rect includes offset visual inspection', (WidgetTester tester) async {
final Widget widgetBottomRight = Container(
width: 400,
height: 400,
......
......@@ -9,13 +9,14 @@ library;
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() {
tearDown(() {
debugDisableShadows = true;
});
testWidgets('Shadows on BoxDecoration', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Shadows on BoxDecoration', (WidgetTester tester) async {
await tester.pumpWidget(
Center(
child: RepaintBoundary(
......@@ -61,7 +62,7 @@ void main() {
);
}
for (final int elevation in kElevationToShadow.keys) {
testWidgets('elevation $elevation', (WidgetTester tester) async {
testWidgetsWithLeakTracking('elevation $elevation', (WidgetTester tester) async {
debugDisableShadows = false;
await tester.pumpWidget(build(elevation));
await expectLater(
......@@ -73,7 +74,7 @@ void main() {
}
});
testWidgets('Shadows with PhysicalLayer', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Shadows with PhysicalLayer', (WidgetTester tester) async {
await tester.pumpWidget(
Center(
child: RepaintBoundary(
......@@ -132,7 +133,7 @@ void main() {
}
for (final int elevation in kElevationToShadow.keys) {
testWidgets('elevation $elevation', (WidgetTester tester) async {
testWidgetsWithLeakTracking('elevation $elevation', (WidgetTester tester) async {
debugDisableShadows = false;
await tester.pumpWidget(build(elevation.toDouble()));
await expectLater(
......
......@@ -7,6 +7,7 @@ import 'dart:ui' as ui show Image;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import '../image_data.dart';
import '../painting/mocks_for_image_cache.dart';
......@@ -16,7 +17,7 @@ Future<void> main() async {
AutomatedTestWidgetsFlutterBinding();
final ui.Image rawImage = await decodeImageFromList(Uint8List.fromList(kTransparentImage));
final ImageProvider image = TestImageProvider(0, 0, image: rawImage);
testWidgets('ShapeDecoration.image', (WidgetTester tester) async {
testWidgetsWithLeakTracking('ShapeDecoration.image', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: DecoratedBox(
......@@ -39,7 +40,7 @@ Future<void> main() async {
);
});
testWidgets('ShapeDecoration.color', (WidgetTester tester) async {
testWidgetsWithLeakTracking('ShapeDecoration.color', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: DecoratedBox(
......@@ -68,7 +69,7 @@ Future<void> main() async {
expect(decoration.padding, isA<EdgeInsetsDirectional>());
});
testWidgets('TestBorder and Directionality - 1', (WidgetTester tester) async {
testWidgetsWithLeakTracking('TestBorder and Directionality - 1', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
MaterialApp(
......@@ -89,7 +90,7 @@ Future<void> main() async {
);
});
testWidgets('TestBorder and Directionality - 2', (WidgetTester tester) async {
testWidgetsWithLeakTracking('TestBorder and Directionality - 2', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
Directionality(
......@@ -113,7 +114,7 @@ Future<void> main() async {
);
});
testWidgets('Does not crash with directional gradient', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Does not crash with directional gradient', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/76967.
await tester.pumpWidget(
......
......@@ -4,9 +4,10 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('SharedAppData basics', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SharedAppData basics', (WidgetTester tester) async {
int columnBuildCount = 0;
int child1BuildCount = 0;
int child2BuildCount = 0;
......@@ -116,7 +117,7 @@ void main() {
expect(find.text('null').evaluate().length, 2);
});
testWidgets('WidgetsApp SharedAppData ', (WidgetTester tester) async {
testWidgetsWithLeakTracking('WidgetsApp SharedAppData ', (WidgetTester tester) async {
int parentBuildCount = 0;
int childBuildCount = 0;
......@@ -154,7 +155,7 @@ void main() {
expect(find.text('child'), findsOneWidget);
});
testWidgets('WidgetsApp SharedAppData Shadowing', (WidgetTester tester) async {
testWidgetsWithLeakTracking('WidgetsApp SharedAppData Shadowing', (WidgetTester tester) async {
int innerTapCount = 0;
int outerTapCount = 0;
......
......@@ -6,11 +6,12 @@ import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
import 'semantics_tester.dart';
void main() {
testWidgets('Simple tree is simple', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Simple tree is simple', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(
......@@ -34,7 +35,7 @@ void main() {
semantics.dispose();
});
testWidgets('Simple tree is simple - material', (WidgetTester tester) async {
testWidgetsWithLeakTracking('Simple tree is simple - material', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
// Not using Text widget because of https://github.com/flutter/flutter/issues/12357.
......
......@@ -4,9 +4,10 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('SizeChangedLayoutNotification test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SizeChangedLayoutNotification test', (WidgetTester tester) async {
bool notified = false;
await tester.pumpWidget(
......
......@@ -5,9 +5,10 @@
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('SizedBox constructors', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SizedBox constructors', (WidgetTester tester) async {
const SizedBox a = SizedBox();
expect(a.width, isNull);
expect(a.height, isNull);
......@@ -37,7 +38,7 @@ void main() {
expect(g.height, 0.0);
});
testWidgets('SizedBox - no child', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SizedBox - no child', (WidgetTester tester) async {
final GlobalKey patient = GlobalKey();
await tester.pumpWidget(
......@@ -109,7 +110,7 @@ void main() {
expect(patient.currentContext!.size, equals(Size.zero));
});
testWidgets('SizedBox - container child', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SizedBox - container child', (WidgetTester tester) async {
final GlobalKey patient = GlobalKey();
await tester.pumpWidget(
......@@ -188,7 +189,7 @@ void main() {
expect(patient.currentContext!.size, equals(Size.zero));
});
testWidgets('SizedBox.square tests', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SizedBox.square tests', (WidgetTester tester) async {
await tester.pumpWidget(
const SizedBox.square(
dimension: 100,
......
......@@ -5,10 +5,12 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('!pinned && !floating && !bottom ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('!pinned && !floating && !bottom ==> fade opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: false,
......@@ -26,8 +28,9 @@ void main() {
expect(render.text.style!.color!.opacity, 0.0);
});
testWidgets('!pinned && !floating && bottom ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('!pinned && !floating && bottom ==> fade opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: false,
......@@ -45,8 +48,9 @@ void main() {
expect(render.text.style!.color!.opacity, 0.0);
});
testWidgets('!pinned && floating && !bottom ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('!pinned && floating && !bottom ==> fade opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: false,
......@@ -64,8 +68,9 @@ void main() {
expect(render.text.style!.color!.opacity, 0.0);
});
testWidgets('!pinned && floating && bottom ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('!pinned && floating && bottom ==> fade opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: false,
......@@ -83,8 +88,9 @@ void main() {
expect(render.text.style!.color!.opacity, 0.0);
});
testWidgets('pinned && !floating && !bottom ==> 1.0 opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('pinned && !floating && !bottom ==> 1.0 opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: true,
......@@ -102,8 +108,9 @@ void main() {
expect(render.text.style!.color!.opacity, 1.0);
});
testWidgets('pinned && !floating && bottom ==> 1.0 opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('pinned && !floating && bottom ==> 1.0 opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: true,
......@@ -121,10 +128,11 @@ void main() {
expect(render.text.style!.color!.opacity, 1.0);
});
testWidgets('pinned && floating && !bottom ==> 1.0 opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('pinned && floating && !bottom ==> 1.0 opacity', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/25000.
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: true,
......@@ -142,10 +150,11 @@ void main() {
expect(render.text.style!.color!.opacity, 1.0);
});
testWidgets('pinned && floating && bottom && extraToolbarHeight == 0.0 ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('pinned && floating && bottom && extraToolbarHeight == 0.0 ==> fade opacity', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/25993.
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: true,
......@@ -163,8 +172,9 @@ void main() {
expect(render.text.style!.color!.opacity, 0.0);
});
testWidgets('pinned && floating && bottom && extraToolbarHeight != 0.0 ==> 1.0 opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('pinned && floating && bottom && extraToolbarHeight != 0.0 ==> 1.0 opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_TestWidget(
pinned: true,
......@@ -183,8 +193,9 @@ void main() {
expect(render.text.style!.color!.opacity, 1.0);
});
testWidgets('!pinned && !floating && !bottom && extraToolbarHeight != 0.0 ==> fade opacity', (WidgetTester tester) async {
testWidgetsWithLeakTracking('!pinned && !floating && !bottom && extraToolbarHeight != 0.0 ==> fade opacity', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
const double collapsedHeight = 100.0;
await tester.pumpWidget(
_TestWidget(
......
......@@ -5,12 +5,13 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
const double VIEWPORT_HEIGHT = 500;
const double VIEWPORT_WIDTH = 300;
void main() {
testWidgets('SliverConstrainedCrossAxis basic test', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SliverConstrainedCrossAxis basic test', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 50));
final RenderBox box = tester.renderObject(find.byType(Container));
......@@ -21,7 +22,7 @@ void main() {
expect(sliver.geometry!.paintExtent, equals(100));
});
testWidgets('SliverConstrainedCrossAxis updates correctly', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SliverConstrainedCrossAxis updates correctly', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 50));
final RenderBox box1 = tester.renderObject(find.byType(Container));
......@@ -35,7 +36,7 @@ void main() {
expect(box2.size.width, 80);
});
testWidgets('SliverConstrainedCrossAxis uses parent extent if maxExtent is greater', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SliverConstrainedCrossAxis uses parent extent if maxExtent is greater', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 400));
final RenderBox box = tester.renderObject(find.byType(Container));
......@@ -43,7 +44,7 @@ void main() {
expect(box.size.width, VIEWPORT_WIDTH);
});
testWidgets('SliverConstrainedCrossAxis constrains the height when direction is horizontal', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SliverConstrainedCrossAxis constrains the height when direction is horizontal', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(
maxExtent: 50,
scrollDirection: Axis.horizontal,
......@@ -53,7 +54,7 @@ void main() {
expect(box.size.height, 50);
});
testWidgets('SliverConstrainedCrossAxis sets its own flex to 0', (WidgetTester tester) async {
testWidgetsWithLeakTracking('SliverConstrainedCrossAxis sets its own flex to 0', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(
maxExtent: 50,
));
......
......@@ -5,9 +5,10 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgets('precedingScrollExtent is reported as infinity for Sliver of unknown size', (WidgetTester tester) async {
testWidgetsWithLeakTracking('precedingScrollExtent is reported as infinity for Sliver of unknown size', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: CustomScrollView(
......
......@@ -6,6 +6,7 @@ import 'dart:math' as math;
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() {
......@@ -39,8 +40,9 @@ void main() {
group('SliverFillRemaining', () {
group('hasScrollBody: true, default', () {
testWidgets('no siblings', (WidgetTester tester) async {
testWidgetsWithLeakTracking('no siblings', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
......@@ -79,8 +81,9 @@ void main() {
);
});
testWidgets('one sibling', (WidgetTester tester) async {
testWidgetsWithLeakTracking('one sibling', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
......@@ -120,8 +123,9 @@ void main() {
);
});
testWidgets('scrolls beyond viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('scrolls beyond viewportMainAxisExtent', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -139,8 +143,9 @@ void main() {
});
group('hasScrollBody: false', () {
testWidgets('does not extend past viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('does not extend past viewportMainAxisExtent', (WidgetTester tester) async {
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -158,7 +163,7 @@ void main() {
expect(find.byType(Container), findsNWidgets(2));
});
testWidgets('child without size is sized by extent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child without size is sized by extent', (WidgetTester tester) async {
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -179,7 +184,7 @@ void main() {
expect(box.size.width, equals(650));
});
testWidgets('child with smaller size is sized by extent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child with smaller size is sized by extent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
sliverBox,
......@@ -220,7 +225,7 @@ void main() {
);
});
testWidgets('extent is overridden by child with larger size', (WidgetTester tester) async {
testWidgetsWithLeakTracking('extent is overridden by child with larger size', (WidgetTester tester) async {
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -244,7 +249,7 @@ void main() {
expect(box.size.width, equals(1000));
});
testWidgets('extent is overridden by child size if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('extent is overridden by child size if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
SliverFixedExtentList(
......@@ -285,7 +290,7 @@ void main() {
expect(tester.getCenter(button).dx, equals(400.0));
});
testWidgets('alignment with a flexible works', (WidgetTester tester) async {
testWidgetsWithLeakTracking('alignment with a flexible works', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
sliverBox,
......@@ -354,7 +359,7 @@ void main() {
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));
group('fillOverscroll: true, relevant platforms', () {
testWidgets('child without size is sized by extent and overscroll', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child without size is sized by extent and overscroll', (WidgetTester tester) async {
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -381,7 +386,7 @@ void main() {
expect(box3.size.height, equals(450));
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));
testWidgets('child with smaller size is overridden and sized by extent and overscroll', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child with smaller size is overridden and sized by extent and overscroll', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
sliverBox,
......@@ -428,9 +433,10 @@ void main() {
);
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));
testWidgets('extent is overridden by child size and overscroll if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('extent is overridden by child size and overscroll if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
SliverFixedExtentList(
itemExtent: 150,
......@@ -492,9 +498,10 @@ void main() {
);
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));
testWidgets('fillOverscroll works when child has no size and precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('fillOverscroll works when child has no size and precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
SliverFixedExtentList(
itemExtent: 150,
......@@ -554,7 +561,7 @@ void main() {
);
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));
testWidgets('alignment with a flexible works with fillOverscroll', (WidgetTester tester) async {
testWidgetsWithLeakTracking('alignment with a flexible works with fillOverscroll', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
sliverBox,
......@@ -648,7 +655,7 @@ void main() {
group('fillOverscroll: true, is ignored on irrelevant platforms', () {
// Android/Other scroll physics when hasScrollBody: false, ignores fillOverscroll: true
testWidgets('child without size is sized by extent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child without size is sized by extent', (WidgetTester tester) async {
final List<Widget> slivers = <Widget>[
sliverBox,
SliverFillRemaining(
......@@ -667,7 +674,7 @@ void main() {
expect(box2.size.height, equals(450));
});
testWidgets('child with size is overridden and sized by extent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child with size is overridden and sized by extent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final List<Widget> slivers = <Widget>[
sliverBox,
......@@ -706,9 +713,10 @@ void main() {
expect(tester.getCenter(button).dx, equals(400.0));
});
testWidgets('extent is overridden by child size if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('extent is overridden by child size if precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
SliverFixedExtentList(
itemExtent: 150,
......@@ -763,9 +771,10 @@ void main() {
expect(tester.getCenter(button).dx, equals(400.0));
});
testWidgets('child has no size and precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
testWidgetsWithLeakTracking('child has no size and precedingScrollExtent > viewportMainAxisExtent', (WidgetTester tester) async {
final GlobalKey key = GlobalKey();
final ScrollController controller = ScrollController();
addTearDown(controller.dispose);
final List<Widget> slivers = <Widget>[
SliverFixedExtentList(
itemExtent: 150,
......
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