// Copyright 2016 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. import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('BottomNavigationBar callback test', (WidgetTester tester) async { int mutatedIndex; await tester.pumpWidget( new Scaffold( bottomNavigationBar: new BottomNavigationBar( labels: <DestinationLabel>[ new DestinationLabel( icon: new Icon(Icons.ac_unit), title: new Text('AC') ), new DestinationLabel( icon: new Icon(Icons.access_alarm), title: new Text('Alarm') ) ], onTap: (int index) { mutatedIndex = index; } ) ) ); await tester.tap(find.text('Alarm')); expect(mutatedIndex, 1); }); testWidgets('BottomNavigationBar content test', (WidgetTester tester) async { await tester.pumpWidget( new Scaffold( bottomNavigationBar: new BottomNavigationBar( labels: <DestinationLabel>[ new DestinationLabel( icon: new Icon(Icons.ac_unit), title: new Text('AC') ), new DestinationLabel( icon: new Icon(Icons.access_alarm), title: new Text('Alarm') ) ] ) ) ); RenderBox box = tester.renderObject(find.byType(BottomNavigationBar)); expect(box.size.height, 60.0); expect(find.text('AC'), findsOneWidget); expect(find.text('Alarm'), findsOneWidget); }); testWidgets('BottomNavigationBar action size test', (WidgetTester tester) async { await tester.pumpWidget( new Scaffold( bottomNavigationBar: new BottomNavigationBar( type: BottomNavigationBarType.shifting, labels: <DestinationLabel>[ new DestinationLabel( icon: new Icon(Icons.ac_unit), title: new Text('AC') ), new DestinationLabel( icon: new Icon(Icons.access_alarm), title: new Text('Alarm') ) ] ) ) ); Iterable<RenderBox> actions = tester.renderObjectList(find.byType(InkResponse)); expect(actions.length, 2); expect(actions.elementAt(0).size.width, 158.4); expect(actions.elementAt(1).size.width, 105.6); await tester.pumpWidget( new Scaffold( bottomNavigationBar: new BottomNavigationBar( currentIndex: 1, type: BottomNavigationBarType.shifting, labels: <DestinationLabel>[ new DestinationLabel( icon: new Icon(Icons.ac_unit), title: new Text('AC') ), new DestinationLabel( icon: new Icon(Icons.access_alarm), title: new Text('Alarm') ) ] ) ) ); await tester.pump(const Duration(milliseconds: 200)); actions = tester.renderObjectList(find.byType(InkResponse)); expect(actions.length, 2); expect(actions.elementAt(0).size.width, 105.6); expect(actions.elementAt(1).size.width, 158.4); }); testWidgets('BottomNavigationBar multiple taps test', (WidgetTester tester) async { await tester.pumpWidget( new Scaffold( bottomNavigationBar: new BottomNavigationBar( type: BottomNavigationBarType.shifting, labels: <DestinationLabel>[ new DestinationLabel( icon: new Icon(Icons.ac_unit), title: new Text('AC') ), new DestinationLabel( icon: new Icon(Icons.access_alarm), title: new Text('Alarm') ), new DestinationLabel( icon: new Icon(Icons.access_time), title: new Text('Time') ), new DestinationLabel( icon: new Icon(Icons.add), title: new Text('Add') ) ] ) ) ); // We want to make sure that the last label does not get displaced, // irrespective of how many taps happen on the first N - 1 labels and how // they grow. Iterable<RenderBox> actions = tester.renderObjectList(find.byType(InkResponse)); Point originalOrigin = actions.elementAt(3).localToGlobal(Point.origin); await tester.tap(find.text('AC')); await tester.pump(); await tester.pump(const Duration(milliseconds: 100)); actions = tester.renderObjectList(find.byType(InkResponse)); expect(actions.elementAt(3).localToGlobal(Point.origin), equals(originalOrigin)); await tester.tap(find.text('Alarm')); await tester.pump(); await tester.pump(const Duration(milliseconds: 100)); actions = tester.renderObjectList(find.byType(InkResponse)); expect(actions.elementAt(3).localToGlobal(Point.origin), equals(originalOrigin)); await tester.tap(find.text('Time')); await tester.pump(); await tester.pump(const Duration(milliseconds: 100)); actions = tester.renderObjectList(find.byType(InkResponse)); expect(actions.elementAt(3).localToGlobal(Point.origin), equals(originalOrigin)); }); }