diff --git a/packages/cupertino_ui/temporarily_disabled_tests/bottom_tab_bar_test.dart b/packages/cupertino_ui/test/bottom_tab_bar_test.dart similarity index 66% rename from packages/cupertino_ui/temporarily_disabled_tests/bottom_tab_bar_test.dart rename to packages/cupertino_ui/test/bottom_tab_bar_test.dart index 0f30245b402d..7e4d54cdf794 100644 --- a/packages/cupertino_ui/temporarily_disabled_tests/bottom_tab_bar_test.dart +++ b/packages/cupertino_ui/test/bottom_tab_bar_test.dart @@ -2,18 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@Skip( - 'This file is skipped due to a cross-import that needs to be fixed. Tracked in https://github.com/flutter/flutter/issues/177028.', -) import 'package:cupertino_ui/cupertino_ui.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; -import '../image_data.dart'; -import '../widgets/semantics_tester.dart'; - Future pumpWidgetWithBoilerplate(WidgetTester tester, Widget widget) async { await tester.pumpWidget( Localizations( @@ -33,11 +27,8 @@ Future main() async { () => pumpWidgetWithBoilerplate( tester, CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), ], ), ), @@ -57,15 +48,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, activeColor: const Color(0xFF123456), @@ -91,15 +76,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, ), @@ -126,15 +105,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, activeColor: dynamicActiveColor, @@ -167,15 +140,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(platformBrightness: Brightness.dark), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, activeColor: dynamicActiveColor, @@ -203,15 +170,9 @@ Future main() async { await tester.pumpWidget( CupertinoApp( home: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, ), @@ -232,15 +193,9 @@ Future main() async { CupertinoApp( theme: const CupertinoThemeData(brightness: Brightness.dark), home: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, ), @@ -260,22 +215,16 @@ Future main() async { }); testWidgets('Use active icon', (WidgetTester tester) async { - final activeIcon = MemoryImage(Uint8List.fromList(kBlueSquarePng)); - final inactiveIcon = MemoryImage(Uint8List.fromList(kTransparentImage)); - await pumpWidgetWithBoilerplate( tester, MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(inactiveIcon), - activeIcon: ImageIcon(activeIcon), + icon: Icon(CupertinoIcons.heart), + activeIcon: Icon(CupertinoIcons.heart_fill), label: 'Tab 2', ), ], @@ -286,28 +235,20 @@ Future main() async { ), ); - final Image image = tester.widget( - find.descendant( - of: find.widgetWithText(GestureDetector, 'Tab 2'), - matching: find.byType(Image), - ), - ); + expect(find.byIcon(CupertinoIcons.heart_fill), findsOneWidget); + expect(find.byIcon(CupertinoIcons.heart), findsNothing); - expect(image.color, const Color(0xFF123456)); - expect(image.image, activeIcon); + final IconThemeData iconTheme = IconTheme.of( + tester.element(find.byIcon(CupertinoIcons.heart_fill)), + ); + expect(iconTheme.color, const Color(0xFF123456)); }); testWidgets('Adjusts height to account for bottom padding', (WidgetTester tester) async { final tabBar = CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Aka', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Shiro', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Aka'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Shiro'), ], ); @@ -347,15 +288,9 @@ Future main() async { const tabBarHeight = 56.0; final tabBar = CupertinoTabBar( height: tabBarHeight, - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Aka', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Shiro', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Aka'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Shiro'), ], ); @@ -397,15 +332,9 @@ Future main() async { const tabBarHeight = 56.0; final tabBar = CupertinoTabBar( height: tabBarHeight, - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Aka', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Shiro', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Aka'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Shiro'), ], ); @@ -457,15 +386,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], ), ), @@ -478,15 +401,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], backgroundColor: const Color(0xFFFFFFFF), // Opaque white. ), @@ -504,15 +421,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], currentIndex: 1, onTap: (int tab) { @@ -530,47 +441,43 @@ Future main() async { }); testWidgets('tabs announce semantics', (WidgetTester tester) async { - final semantics = SemanticsTester(tester); - await pumpWidgetWithBoilerplate( tester, MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], ), ), ); expect( - semantics, - includesNodeWith( + tester.getSemantics(find.text('Tab 1')), + isSemantics( label: 'Tab 1', hint: 'Tab 1 of 2', - flags: [SemanticsFlag.hasSelectedState, SemanticsFlag.isSelected], + isSelected: true, + hasSelectedState: true, textDirection: TextDirection.ltr, ), ); expect( - semantics, - includesNodeWith(label: 'Tab 2', hint: 'Tab 2 of 2', textDirection: TextDirection.ltr), + tester.getSemantics(find.text('Tab 2')), + isSemantics( + label: 'Tab 2', + hint: 'Tab 2 of 2', + isSelected: false, + hasSelectedState: true, + textDirection: TextDirection.ltr, + ), ); - - semantics.dispose(); }); testWidgets('Label of items should be nullable', (WidgetTester tester) async { - final iconProvider = MemoryImage(Uint8List.fromList(kTransparentImage)); final itemsTapped = []; await pumpWidgetWithBoilerplate( @@ -578,12 +485,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem(icon: ImageIcon(iconProvider)), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.circle)), ], onTap: (int index) => itemsTapped.add(index), ), @@ -592,11 +496,7 @@ Future main() async { expect(find.text('Tab 1'), findsOneWidget); - final Finder finder = find.byWidgetPredicate( - (Widget widget) => widget is Image && widget.image == iconProvider, - ); - - await tester.tap(finder); + await tester.tap(find.byIcon(CupertinoIcons.circle)); expect(itemsTapped, [1]); }); @@ -606,15 +506,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], ), ), @@ -629,15 +523,9 @@ Future main() async { MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 1', - ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'Tab 2', - ), + items: const [ + BottomNavigationBarItem(icon: Icon(CupertinoIcons.search), label: 'Tab 1'), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'Tab 2'), ], backgroundColor: const Color(0xFFFFFFFF), // Opaque white. border: null, @@ -709,23 +597,18 @@ Future main() async { testWidgets('CupertinoTabBar item semanticsLabel overrides label for accessibility', ( WidgetTester tester, ) async { - final semantics = SemanticsTester(tester); - await pumpWidgetWithBoilerplate( tester, MediaQuery( data: const MediaQueryData(), child: CupertinoTabBar( - items: [ + items: const [ BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), + icon: Icon(CupertinoIcons.search), label: 'A', semanticsLabel: 'Custom A label', ), - BottomNavigationBarItem( - icon: ImageIcon(MemoryImage(Uint8List.fromList(kTransparentImage))), - label: 'B', - ), + BottomNavigationBarItem(icon: Icon(CupertinoIcons.settings), label: 'B'), ], ), ), @@ -733,21 +616,26 @@ Future main() async { // Tab A should use the custom semanticsLabel expect( - semantics, - includesNodeWith( + tester.getSemantics(find.text('A')), + isSemantics( label: 'Custom A label', hint: 'Tab 1 of 2', - flags: [SemanticsFlag.hasSelectedState, SemanticsFlag.isSelected], + isSelected: true, + hasSelectedState: true, textDirection: TextDirection.ltr, ), ); // Tab B should use the default label since no semanticsLabel is provided expect( - semantics, - includesNodeWith(label: 'B', hint: 'Tab 2 of 2', textDirection: TextDirection.ltr), + tester.getSemantics(find.text('B')), + isSemantics( + label: 'B', + hint: 'Tab 2 of 2', + isSelected: false, + hasSelectedState: true, + textDirection: TextDirection.ltr, + ), ); - - semantics.dispose(); }); }