Skip to content

Commit 36a391f

Browse files
Add tests for SingleChildScrollView examples (#153548)
Contributes to flutter/flutter#130459 It adds a test for - `examples/api/lib/widgets/single_child_scroll_view/single_child_scroll_view.0.dart` - `examples/api/lib/widgets/single_child_scroll_view/single_child_scroll_view.1.dart` I also fixed a mistake in the documentation
1 parent 23883b1 commit 36a391f

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

dev/bots/check_code_samples.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,6 @@ final Set<String> _knownMissingTests = <String>{
355355
'examples/api/test/widgets/notification_listener/notification.0_test.dart',
356356
'examples/api/test/widgets/overscroll_indicator/glowing_overscroll_indicator.1_test.dart',
357357
'examples/api/test/widgets/overscroll_indicator/glowing_overscroll_indicator.0_test.dart',
358-
'examples/api/test/widgets/single_child_scroll_view/single_child_scroll_view.1_test.dart',
359-
'examples/api/test/widgets/single_child_scroll_view/single_child_scroll_view.0_test.dart',
360358
'examples/api/test/widgets/restoration/restoration_mixin.0_test.dart',
361359
'examples/api/test/widgets/actions/focusable_action_detector.0_test.dart',
362360
'examples/api/test/widgets/focus_scope/focus_scope.0_test.dart',
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/widgets.dart';
6+
import 'package:flutter_api_samples/widgets/single_child_scroll_view/single_child_scroll_view.0.dart'
7+
as example;
8+
import 'package:flutter_test/flutter_test.dart';
9+
10+
void main() {
11+
testWidgets('The children should be spaced out equally when the screen is big enough', (WidgetTester tester) async {
12+
await tester.pumpWidget(
13+
const example.SingleChildScrollViewExampleApp(),
14+
);
15+
16+
expect(find.text('Fixed Height Content'), findsExactly(2));
17+
expect(tester.getTopLeft(find.byType(Container).first), const Offset(0, 90));
18+
expect(tester.getTopLeft(find.byType(Container).last), const Offset(0, 390));
19+
20+
await tester.fling(find.byType(SingleChildScrollView).last, const Offset(0, -100), 10.0);
21+
22+
// The view should not scroll when the screen is big enough.
23+
expect(tester.getTopLeft(find.byType(Container).first), const Offset(0, 90));
24+
expect(tester.getTopLeft(find.byType(Container).last), const Offset(0, 390));
25+
});
26+
27+
testWidgets('The view should be scrollable when the screen is not big enough', (WidgetTester tester) async {
28+
tester.view
29+
..physicalSize = const Size(400, 200)
30+
..devicePixelRatio = 1;
31+
addTearDown(tester.view.reset);
32+
await tester.pumpWidget(
33+
const example.SingleChildScrollViewExampleApp(),
34+
);
35+
36+
expect(find.text('Fixed Height Content'), findsExactly(2));
37+
expect(tester.getTopLeft(find.byType(Container).first), Offset.zero);
38+
expect(tester.getTopLeft(find.byType(Container).last), const Offset(0, 120));
39+
40+
await tester.fling(find.byType(SingleChildScrollView).last, const Offset(0, -40), 10.0);
41+
42+
// The view should scroll when the screen is not big enough.
43+
expect(tester.getTopLeft(find.byType(Container).first), const Offset(0, -40));
44+
expect(tester.getTopLeft(find.byType(Container).last), const Offset(0, 80));
45+
});
46+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/widgets.dart';
6+
import 'package:flutter_api_samples/widgets/single_child_scroll_view/single_child_scroll_view.1.dart'
7+
as example;
8+
import 'package:flutter_test/flutter_test.dart';
9+
10+
void main() {
11+
testWidgets('The flexible child should fill the space if the screen is big enough', (WidgetTester tester) async {
12+
await tester.pumpWidget(
13+
const example.SingleChildScrollViewExampleApp(),
14+
);
15+
16+
final Finder fixedHeightFinder = find.widgetWithText(Container, 'Fixed Height Content');
17+
final Finder flexibleHeightFinder = find.widgetWithText(Container, 'Flexible Content');
18+
expect(tester.getTopLeft(fixedHeightFinder), Offset.zero);
19+
expect(tester.getSize(fixedHeightFinder), const Size(800, 120));
20+
expect(tester.getTopLeft(flexibleHeightFinder), const Offset(0, 120));
21+
expect(tester.getSize(flexibleHeightFinder), const Size(800, 480));
22+
23+
await tester.fling(find.byType(SingleChildScrollView).last, const Offset(0, -100), 10.0);
24+
25+
// The view should not scroll when the screen is big enough.
26+
expect(tester.getTopLeft(fixedHeightFinder), Offset.zero);
27+
expect(tester.getSize(fixedHeightFinder), const Size(800, 120));
28+
expect(tester.getTopLeft(flexibleHeightFinder), const Offset(0, 120));
29+
expect(tester.getSize(flexibleHeightFinder), const Size(800, 480));
30+
});
31+
32+
testWidgets('The view should be scrollable when the screen is not big enough', (WidgetTester tester) async {
33+
tester.view
34+
..physicalSize = const Size(400, 200)
35+
..devicePixelRatio = 1;
36+
addTearDown(tester.view.reset);
37+
await tester.pumpWidget(
38+
const example.SingleChildScrollViewExampleApp(),
39+
);
40+
41+
final Finder fixedHeightFinder = find.widgetWithText(Container, 'Fixed Height Content');
42+
final Finder flexibleHeightFinder = find.widgetWithText(Container, 'Flexible Content');
43+
expect(tester.getTopLeft(fixedHeightFinder), Offset.zero);
44+
expect(tester.getSize(fixedHeightFinder), const Size(400, 120));
45+
expect(tester.getTopLeft(flexibleHeightFinder), const Offset(0, 120));
46+
expect(tester.getSize(flexibleHeightFinder), const Size(400, 120));
47+
48+
await tester.fling(find.byType(SingleChildScrollView).last, const Offset(0, -40), 10.0);
49+
50+
// The view should scroll when the screen is not big enough.
51+
expect(tester.getTopLeft(fixedHeightFinder), const Offset(0, -40));
52+
expect(tester.getSize(fixedHeightFinder), const Size(400, 120));
53+
expect(tester.getTopLeft(flexibleHeightFinder), const Offset(0, 80));
54+
expect(tester.getSize(flexibleHeightFinder), const Size(400, 120));
55+
});
56+
}

0 commit comments

Comments
 (0)