Skip to content

Commit acf1fb6

Browse files
authored
Fix flaky sliver tree test (flutter#150707)
The set of nodes being used in the tree test was not being consistently reset at the beginning of every test. The tree is currently broken because today's random seed for test ordering exposed this leak of state from one test to another. Fixes flutter#150706 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
1 parent 70e9b41 commit acf1fb6

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

packages/flutter/test/widgets/sliver_tree_test.dart

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,29 @@ List<TreeSliverNode<String>> simpleNodeSet = <TreeSliverNode<String>>[
2828

2929
void main() {
3030
group('TreeSliverNode', () {
31+
setUp(() {
32+
// Reset node conditions for each test.
33+
simpleNodeSet = <TreeSliverNode<String>>[
34+
TreeSliverNode<String>('Root 0'),
35+
TreeSliverNode<String>(
36+
'Root 1',
37+
expanded: true,
38+
children: <TreeSliverNode<String>>[
39+
TreeSliverNode<String>('Child 1:0'),
40+
TreeSliverNode<String>('Child 1:1'),
41+
],
42+
),
43+
TreeSliverNode<String>(
44+
'Root 2',
45+
children: <TreeSliverNode<String>>[
46+
TreeSliverNode<String>('Child 2:0'),
47+
TreeSliverNode<String>('Child 2:1'),
48+
],
49+
),
50+
TreeSliverNode<String>('Root 3'),
51+
];
52+
});
53+
3154
test('getters, toString', () {
3255
final List<TreeSliverNode<String>> children = <TreeSliverNode<String>>[
3356
TreeSliverNode<String>('child'),
@@ -123,6 +146,7 @@ void main() {
123146
TreeSliverNode<String>('Root 3'),
124147
];
125148
});
149+
126150
testWidgets('Can set controller on TreeSliver', (WidgetTester tester) async {
127151
final TreeSliverController controller = TreeSliverController();
128152
TreeSliverController? returnedController;
@@ -427,6 +451,26 @@ void main() {
427451
});
428452

429453
testWidgets('.toggleNodeWith, onNodeToggle', (WidgetTester tester) async {
454+
simpleNodeSet = <TreeSliverNode<String>>[
455+
TreeSliverNode<String>('Root 0'),
456+
TreeSliverNode<String>(
457+
'Root 1',
458+
expanded: true,
459+
children: <TreeSliverNode<String>>[
460+
TreeSliverNode<String>('Child 1:0'),
461+
TreeSliverNode<String>('Child 1:1'),
462+
],
463+
),
464+
TreeSliverNode<String>(
465+
'Root 2',
466+
children: <TreeSliverNode<String>>[
467+
TreeSliverNode<String>('Child 2:0'),
468+
TreeSliverNode<String>('Child 2:1'),
469+
],
470+
),
471+
TreeSliverNode<String>('Root 3'),
472+
];
473+
430474
final TreeSliverController controller = TreeSliverController();
431475
// The default node builder wraps the leading icon with toggleNodeWith.
432476
bool toggled = false;
@@ -516,6 +560,26 @@ void main() {
516560
});
517561

518562
testWidgets('AnimationStyle is piped through to node builder', (WidgetTester tester) async {
563+
simpleNodeSet = <TreeSliverNode<String>>[
564+
TreeSliverNode<String>('Root 0'),
565+
TreeSliverNode<String>(
566+
'Root 1',
567+
expanded: true,
568+
children: <TreeSliverNode<String>>[
569+
TreeSliverNode<String>('Child 1:0'),
570+
TreeSliverNode<String>('Child 1:1'),
571+
],
572+
),
573+
TreeSliverNode<String>(
574+
'Root 2',
575+
children: <TreeSliverNode<String>>[
576+
TreeSliverNode<String>('Child 2:0'),
577+
TreeSliverNode<String>('Child 2:1'),
578+
],
579+
),
580+
TreeSliverNode<String>('Root 3'),
581+
];
582+
519583
AnimationStyle? style;
520584
await tester.pumpWidget(MaterialApp(
521585
home: CustomScrollView(

0 commit comments

Comments
 (0)