// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/cupertino.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('shows header', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( header: const Text('Header'), children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); expect(find.text('Header'), findsOneWidget); }); testWidgets('shows footer', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( footer: const Text('Footer'), children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); expect(find.text('Footer'), findsOneWidget); }); testWidgets('shows long dividers in edge-to-edge section part 1', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); // Since the children list is reconstructed with dividers in it, the column // retrieved should have 3 items for an input [children] param with 1 child. final Column childrenColumn = tester.widget(find.byType(Column).at(1)); expect(childrenColumn.children.length, 3); }); testWidgets('shows long dividers in edge-to-edge section part 2', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); // Since the children list is reconstructed with dividers in it, the column // retrieved should have 5 items for an input [children] param with 2 // children. Two long dividers, two rows, and one short divider. final Column childrenColumn = tester.widget(find.byType(Column).at(1)); expect(childrenColumn.children.length, 5); }); testWidgets('does not show long dividers in insetGrouped section part 1', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection.insetGrouped( children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); // Since the children list is reconstructed without long dividers in it, the // column retrieved should have 1 item for an input [children] param with 1 // child. final Column childrenColumn = tester.widget(find.byType(Column).at(1)); expect(childrenColumn.children.length, 1); }); testWidgets('does not show long dividers in insetGrouped section part 2', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection.insetGrouped( children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); // Since the children list is reconstructed with short dividers in it, the // column retrieved should have 3 items for an input [children] param with 2 // children. Two long dividers, two rows, and one short divider. final Column childrenColumn = tester.widget(find.byType(Column).at(1)); expect(childrenColumn.children.length, 3); }); testWidgets('sets background color for section', (WidgetTester tester) async { const Color backgroundColor = CupertinoColors.systemBlue; await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: MediaQuery( data: const MediaQueryData(), child: CupertinoListSection( backgroundColor: backgroundColor, children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); final DecoratedBox decoratedBox = tester.widget(find.byType(DecoratedBox).first); final BoxDecoration boxDecoration = decoratedBox.decoration as BoxDecoration; expect(boxDecoration.color, backgroundColor); }); testWidgets('setting clipBehavior clips children section', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( clipBehavior: Clip.antiAlias, children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); expect(find.byType(ClipRRect), findsOneWidget); }); testWidgets('not setting clipBehavior does not clip children section', (WidgetTester tester) async { await tester.pumpWidget( CupertinoApp( home: Center( child: CupertinoListSection( children: const <Widget>[ CupertinoListTile(title: Text('CupertinoListTile')), ], ), ), ), ); expect(find.byType(ClipRRect), findsNothing); }); }