From 09ac8de2d6638c399ca65e112ac972c5286110d1 Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Fri, 16 Oct 2015 15:10:26 -0700 Subject: [PATCH] Fix scollable tabs, add basic unit test --- packages/flutter/lib/src/material/tabs.dart | 2 +- packages/unit/test/widget/tabs_test.dart | 76 +++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 packages/unit/test/widget/tabs_test.dart diff --git a/packages/flutter/lib/src/material/tabs.dart b/packages/flutter/lib/src/material/tabs.dart index 0eb804960f..00025c8376 100644 --- a/packages/flutter/lib/src/material/tabs.dart +++ b/packages/flutter/lib/src/material/tabs.dart @@ -335,7 +335,7 @@ class Tab extends StatelessComponent { } Container centeredLabel = new Container( - child: new Center(child: labelContent), + child: new Center(child: labelContent, shrinkWrap: ShrinkWrap.both), constraints: new BoxConstraints(minWidth: _kMinTabWidth), padding: _kTabLabelPadding ); diff --git a/packages/unit/test/widget/tabs_test.dart b/packages/unit/test/widget/tabs_test.dart new file mode 100644 index 0000000000..99f10fa096 --- /dev/null +++ b/packages/unit/test/widget/tabs_test.dart @@ -0,0 +1,76 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:test/test.dart'; + +import 'widget_tester.dart'; + +int selectedIndex = 2; + +Widget buildFrame({ List tabs, bool isScrollable: false }) { + return new TabBar( + labels: tabs.map((String tab) => new TabLabel(text: tab)).toList(), + selectedIndex: selectedIndex, + isScrollable: isScrollable, + onChanged: (tabIndex) { + selectedIndex = tabIndex; + } + ); +} + +void main() { + test('TabBar tap selects tab', () { + testWidgets((WidgetTester tester) { + List tabs = ['A', 'B', 'C']; + selectedIndex = 2; + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: false)); + expect(tester.findText('A'), isNotNull); + expect(tester.findText('B'), isNotNull); + expect(tester.findText('C'), isNotNull); + expect(selectedIndex, equals(2)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: false)); + tester.tap(tester.findText('B')); + tester.pump(); + expect(selectedIndex, equals(1)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: false)); + tester.tap(tester.findText('C')); + tester.pump(); + expect(selectedIndex, equals(2)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: false)); + tester.tap(tester.findText('A')); + tester.pump(); + expect(selectedIndex, equals(0)); + }); + }); + + test('Scrollable TabBar tap selects tab', () { + testWidgets((WidgetTester tester) { + List tabs = ['A', 'B', 'C']; + selectedIndex = 2; + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: true)); + expect(tester.findText('A'), isNotNull); + expect(tester.findText('B'), isNotNull); + expect(tester.findText('C'), isNotNull); + expect(selectedIndex, equals(2)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: true)); + tester.tap(tester.findText('B')); + tester.pump(); + expect(selectedIndex, equals(1)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: true)); + tester.tap(tester.findText('C')); + tester.pump(); + expect(selectedIndex, equals(2)); + + tester.pumpWidget(buildFrame(tabs: tabs, isScrollable: true)); + tester.tap(tester.findText('A')); + tester.pump(); + expect(selectedIndex, equals(0)); + }); + }); +}