tabs_test.dart 3.83 KB
Newer Older
Hixie's avatar
Hixie committed
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

Adam Barth's avatar
Adam Barth committed
5
import 'package:flutter_test/flutter_test.dart';
6 7 8 9
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:test/test.dart';

10
Widget buildFrame({ List<String> tabs, String value, bool isScrollable: false }) {
11
  return new Material(
12 13 14 15 16
    child: new TabBarSelection<String>(
      value: value,
      values: tabs,
      child: new TabBar<String>(
        labels: new Map<String, TabLabel>.fromIterable(tabs, value: (String tab) => new TabLabel(text: tab)),
17 18
        isScrollable: isScrollable
      )
19
    )
20 21 22 23 24 25 26 27
  );
}

void main() {
  test('TabBar tap selects tab', () {
    testWidgets((WidgetTester tester) {
      List<String> tabs = <String>['A', 'B', 'C'];

28 29
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: false));
      TabBarSelectionState<String> selection = TabBarSelection.of(tester.findText('A'));
30
      expect(selection, isNotNull);
31 32 33
      expect(selection.indexOf('A'), equals(0));
      expect(selection.indexOf('B'), equals(1));
      expect(selection.indexOf('C'), equals(2));
34 35 36
      expect(tester.findText('A'), isNotNull);
      expect(tester.findText('B'), isNotNull);
      expect(tester.findText('C'), isNotNull);
37
      expect(selection.index, equals(2));
38 39 40
      expect(selection.previousIndex, equals(2));
      expect(selection.value, equals('C'));
      expect(selection.previousValue, equals('C'));
41

42
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C' ,isScrollable: false));
43 44
      tester.tap(tester.findText('B'));
      tester.pump();
45 46 47 48 49
      expect(selection.valueIsChanging, true);
      tester.pump(const Duration(seconds: 1)); // finish the animation
      expect(selection.valueIsChanging, false);
      expect(selection.value, equals('B'));
      expect(selection.previousValue, equals('C'));
50
      expect(selection.index, equals(1));
51
      expect(selection.previousIndex, equals(2));
52

53
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: false));
54 55
      tester.tap(tester.findText('C'));
      tester.pump();
56 57 58
      tester.pump(const Duration(seconds: 1));
      expect(selection.value, equals('C'));
      expect(selection.previousValue, equals('B'));
59
      expect(selection.index, equals(2));
60
      expect(selection.previousIndex, equals(1));
61

62
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: false));
63 64
      tester.tap(tester.findText('A'));
      tester.pump();
65 66 67
      tester.pump(const Duration(seconds: 1));
      expect(selection.value, equals('A'));
      expect(selection.previousValue, equals('C'));
68
      expect(selection.index, equals(0));
69
      expect(selection.previousIndex, equals(2));
70 71 72 73 74 75 76
    });
  });

  test('Scrollable TabBar tap selects tab', () {
    testWidgets((WidgetTester tester) {
      List<String> tabs = <String>['A', 'B', 'C'];

77 78
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: true));
      TabBarSelectionState<String> selection = TabBarSelection.of(tester.findText('A'));
79
      expect(selection, isNotNull);
80 81 82
      expect(tester.findText('A'), isNotNull);
      expect(tester.findText('B'), isNotNull);
      expect(tester.findText('C'), isNotNull);
83
      expect(selection.value, equals('C'));
84

85
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: true));
86 87
      tester.tap(tester.findText('B'));
      tester.pump();
88
      expect(selection.value, equals('B'));
89

90
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: true));
91 92
      tester.tap(tester.findText('C'));
      tester.pump();
93
      expect(selection.value, equals('C'));
94

95
      tester.pumpWidget(buildFrame(tabs: tabs, value: 'C', isScrollable: true));
96 97
      tester.tap(tester.findText('A'));
      tester.pump();
98
      expect(selection.value, equals('A'));
99 100 101
    });
  });
}