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