form_section_test.dart 5.16 KB
Newer Older
1 2 3 4 5 6 7 8 9
// 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 {
10 11 12 13 14 15 16 17 18 19 20 21 22
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
            header: const Text('Header'),
            children: <Widget>[CupertinoTextFormFieldRow()],
          ),
        ),
      ),
    );

    expect(find.text('Header'), findsOneWidget);
  });
23

24
  testWidgets('Shows footer', (WidgetTester tester) async {
25 26 27 28
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
29
            footer: const Text('Footer'),
30 31 32 33 34 35
            children: <Widget>[CupertinoTextFormFieldRow()],
          ),
        ),
      ),
    );

36
    expect(find.text('Footer'), findsOneWidget);
37 38
  });

39
  testWidgets('Shows long dividers in edge-to-edge section part 1', (WidgetTester tester) async {
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
            children: <Widget>[CupertinoTextFormFieldRow()],
          ),
        ),
      ),
    );

    // 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);
  });

56
  testWidgets('Shows long dividers in edge-to-edge section part 2', (WidgetTester tester) async {
57 58 59 60 61 62
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
            children: <Widget>[
              CupertinoTextFormFieldRow(),
63
              CupertinoTextFormFieldRow(),
64 65 66 67 68 69 70 71 72 73 74 75 76
            ],
          ),
        ),
      ),
    );

    // 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);
  });

77
  testWidgets('Does not show long dividers in insetGrouped section part 1', (WidgetTester tester) async {
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection.insetGrouped(
            children: <Widget>[CupertinoTextFormFieldRow()],
          ),
        ),
      ),
    );

    // 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);
  });

95
  testWidgets('Does not show long dividers in insetGrouped section part 2', (WidgetTester tester) async {
96 97 98 99 100 101 102
    await tester.pumpWidget(
      CupertinoApp(
        restorationScopeId: 'App',
        home: Center(
          child: CupertinoFormSection.insetGrouped(
            children: <Widget>[
              CupertinoTextFormFieldRow(),
103
              CupertinoTextFormFieldRow(),
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
            ],
          ),
        ),
      ),
    );

    // 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: CupertinoFormSection(
            backgroundColor: backgroundColor,
127
            children: <Widget>[CupertinoTextFormFieldRow()],
128 129 130 131 132 133 134 135 136 137 138 139
          ),
        ),
      ),
    );

    final DecoratedBox decoratedBox =
        tester.widget(find.byType(DecoratedBox).first);
    final BoxDecoration boxDecoration =
        decoratedBox.decoration as BoxDecoration;
    expect(boxDecoration.color, backgroundColor);
  });

140
  testWidgets('Setting clipBehavior clips children section', (WidgetTester tester) async {
141 142 143 144 145
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
            clipBehavior: Clip.antiAlias,
146
            children: <Widget>[CupertinoTextFormFieldRow()],
147 148 149 150 151 152 153 154
          ),
        ),
      ),
    );

    expect(find.byType(ClipRRect), findsOneWidget);
  });

155
  testWidgets('Not setting clipBehavior does not clip children section', (WidgetTester tester) async {
156 157 158 159 160 161 162 163 164 165 166 167 168
    await tester.pumpWidget(
      CupertinoApp(
        home: Center(
          child: CupertinoFormSection(
            children: <Widget>[CupertinoTextFormFieldRow()],
          ),
        ),
      ),
    );

    expect(find.byType(ClipRRect), findsNothing);
  });
}