From 17a27358a6720f85406e875e080f9eb8c189d5d3 Mon Sep 17 00:00:00 2001 From: Nate Date: Thu, 14 Mar 2024 15:20:44 -0600 Subject: [PATCH] Implementing switch expressions in `flutter/test/` (#144580) Migrates test code to new `switch` syntax. --- .../flutter/test/cupertino/route_test.dart | 23 +++---- .../test/material/dropdown_menu_test.dart | 15 ++--- .../flutter/test/rendering/viewport_test.dart | 10 ++- .../test/services/fake_platform_views.dart | 63 +++++++------------ .../test/services/raw_keyboard_test.dart | 50 ++++++--------- .../test/widgets/dismissible_test.dart | 51 ++++++--------- .../test/widgets/html_element_view_test.dart | 12 ++-- .../test/widgets/image_resolution_test.dart | 27 +++----- .../page_forward_transitions_test.dart | 10 ++- .../widgets/render_object_widget_test.dart | 11 ++-- .../slotted_render_object_widget_test.dart | 13 ++-- .../test/widgets/text_selection_test.dart | 19 +++--- 12 files changed, 115 insertions(+), 189 deletions(-) diff --git a/packages/flutter/test/cupertino/route_test.dart b/packages/flutter/test/cupertino/route_test.dart index d6af7ffb0a..181e5d0144 100644 --- a/packages/flutter/test/cupertino/route_test.dart +++ b/packages/flutter/test/cupertino/route_test.dart @@ -2662,21 +2662,14 @@ class _TestPostRouteCancelState extends State<_TestPostRouteCancel> { Widget build(BuildContext context) { return CupertinoApp( initialRoute: 'home', - onGenerateRoute: (RouteSettings settings) { - return CupertinoPageRoute( - settings: settings, - builder: (BuildContext context) { - switch (settings.name) { - case 'home': - return _buildHome(context); - case 'sub': - return _buildSub(context); - default: - throw UnimplementedError(); - } - }, - ); - }, + onGenerateRoute: (RouteSettings settings) => CupertinoPageRoute( + settings: settings, + builder: (BuildContext context) => switch (settings.name) { + 'home' => _buildHome(context), + 'sub' => _buildSub(context), + _ => throw UnimplementedError(), + }, + ), ); } } diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart index 097e4ddd20..8914ccf924 100644 --- a/packages/flutter/test/material/dropdown_menu_test.dart +++ b/packages/flutter/test/material/dropdown_menu_test.dart @@ -1119,17 +1119,10 @@ void main() { await tester.tap(find.byType(DropdownMenu)); await tester.pump(); - late final bool isMobile; - switch (themeData.platform) { - case TargetPlatform.android: - case TargetPlatform.iOS: - case TargetPlatform.fuchsia: - isMobile = true; - case TargetPlatform.macOS: - case TargetPlatform.linux: - case TargetPlatform.windows: - isMobile = false; - } + final bool isMobile = switch (themeData.platform) { + TargetPlatform.android || TargetPlatform.iOS || TargetPlatform.fuchsia => true, + TargetPlatform.macOS || TargetPlatform.linux || TargetPlatform.windows => false, + }; int expectedCount = isMobile ? 0 : 1; // Test onSelected on key press diff --git a/packages/flutter/test/rendering/viewport_test.dart b/packages/flutter/test/rendering/viewport_test.dart index 8f80cfc301..18c830bb6e 100644 --- a/packages/flutter/test/rendering/viewport_test.dart +++ b/packages/flutter/test/rendering/viewport_test.dart @@ -1259,12 +1259,10 @@ void main() { } final RenderBox renderBox = renderObject as RenderBox; - switch (axis) { - case Axis.horizontal: - return renderBox.size.width; - case Axis.vertical: - return renderBox.size.height; - } + return switch (axis) { + Axis.horizontal => renderBox.size.width, + Axis.vertical => renderBox.size.height, + }; } group('animated: $animated, scrollDirection: $axis', () { diff --git a/packages/flutter/test/services/fake_platform_views.dart b/packages/flutter/test/services/fake_platform_views.dart index e67589bff1..9847018dcf 100644 --- a/packages/flutter/test/services/fake_platform_views.dart +++ b/packages/flutter/test/services/fake_platform_views.dart @@ -188,23 +188,16 @@ class FakeAndroidPlatformViewsController { } Future _onMethodCall(MethodCall call) { - switch (call.method) { - case 'create': - return _create(call); - case 'dispose': - return _dispose(call); - case 'resize': - return _resize(call); - case 'touch': - return _touch(call); - case 'setDirection': - return _setDirection(call); - case 'clearFocus': - return _clearFocus(call); - case 'offset': - return _offset(call); - } - return Future.sync(() => null); + return switch (call.method) { + 'create' => _create(call), + 'dispose' => _dispose(call), + 'resize' => _resize(call), + 'touch' => _touch(call), + 'setDirection' => _setDirection(call), + 'clearFocus' => _clearFocus(call), + 'offset' => _offset(call), + _ => Future.sync(() => null), + }; } Future _create(MethodCall call) async { @@ -400,17 +393,13 @@ class FakeIosPlatformViewsController { } Future _onMethodCall(MethodCall call) { - switch (call.method) { - case 'create': - return _create(call); - case 'dispose': - return _dispose(call); - case 'acceptGesture': - return _acceptGesture(call); - case 'rejectGesture': - return _rejectGesture(call); - } - return Future.sync(() => null); + return switch (call.method) { + 'create' => _create(call), + 'dispose' => _dispose(call), + 'acceptGesture' => _acceptGesture(call), + 'rejectGesture' => _rejectGesture(call), + _ => Future.sync(() => null), + }; } Future _create(MethodCall call) async { @@ -503,17 +492,13 @@ class FakeMacosPlatformViewsController { } Future _onMethodCall(MethodCall call) { - switch (call.method) { - case 'create': - return _create(call); - case 'dispose': - return _dispose(call); - case 'acceptGesture': - return _acceptGesture(call); - case 'rejectGesture': - return _rejectGesture(call); - } - return Future.sync(() => null); + return switch (call.method) { + 'create' => _create(call), + 'dispose' => _dispose(call), + 'acceptGesture' => _acceptGesture(call), + 'rejectGesture' => _rejectGesture(call), + _ => Future.sync(() => null), + }; } Future _create(MethodCall call) async { diff --git a/packages/flutter/test/services/raw_keyboard_test.dart b/packages/flutter/test/services/raw_keyboard_test.dart index ae87556742..723481c839 100644 --- a/packages/flutter/test/services/raw_keyboard_test.dart +++ b/packages/flutter/test/services/raw_keyboard_test.dart @@ -2241,22 +2241,15 @@ void main() { // How modifiers are interpreted depends upon the keyCode for GLFW. int keyCodeForModifier(int modifier, {required bool isLeft}) { - switch (modifier) { - case GLFWKeyHelper.modifierAlt: - return isLeft ? 342 : 346; - case GLFWKeyHelper.modifierShift: - return isLeft ? 340 : 344; - case GLFWKeyHelper.modifierControl: - return isLeft ? 341 : 345; - case GLFWKeyHelper.modifierMeta: - return isLeft ? 343 : 347; - case GLFWKeyHelper.modifierNumericPad: - return 282; - case GLFWKeyHelper.modifierCapsLock: - return 280; - default: - return 65; // keyA - } + return switch (modifier) { + GLFWKeyHelper.modifierAlt => isLeft ? 342 : 346, + GLFWKeyHelper.modifierShift => isLeft ? 340 : 344, + GLFWKeyHelper.modifierControl => isLeft ? 341 : 345, + GLFWKeyHelper.modifierMeta => isLeft ? 343 : 347, + GLFWKeyHelper.modifierNumericPad => 282, + GLFWKeyHelper.modifierCapsLock => 280, + _ => 65, // keyA + }; } test('modifier keys are recognized individually', () { @@ -2473,22 +2466,15 @@ void main() { // How modifiers are interpreted depends upon the keyCode for GTK. int keyCodeForModifier(int modifier, {required bool isLeft}) { - switch (modifier) { - case GtkKeyHelper.modifierMod1: - return 65513; - case GtkKeyHelper.modifierShift: - return isLeft ? 65505 : 65506; - case GtkKeyHelper.modifierControl: - return isLeft ? 65507 : 65508; - case GtkKeyHelper.modifierMeta: - return isLeft ? 65515 : 65516; - case GtkKeyHelper.modifierMod2: - return 65407; - case GtkKeyHelper.modifierCapsLock: - return 65509; - default: - return 65; // keyA - } + return switch (modifier) { + GtkKeyHelper.modifierShift => isLeft ? 65505 : 65506, + GtkKeyHelper.modifierControl => isLeft ? 65507 : 65508, + GtkKeyHelper.modifierMeta => isLeft ? 65515 : 65516, + GtkKeyHelper.modifierMod1 => 65513, + GtkKeyHelper.modifierMod2 => 65407, + GtkKeyHelper.modifierCapsLock => 65509, + _ => 65, // keyA + }; } test('modifier keys are recognized individually', () { diff --git a/packages/flutter/test/widgets/dismissible_test.dart b/packages/flutter/test/widgets/dismissible_test.dart index b948dc1331..73f419c9cf 100644 --- a/packages/flutter/test/widgets/dismissible_test.dart +++ b/packages/flutter/test/widgets/dismissible_test.dart @@ -119,32 +119,22 @@ Future dismissElement(WidgetTester tester, Finder finder, { required AxisD } Future dragElement(WidgetTester tester, Finder finder, { required AxisDirection gestureDirection, required double amount }) async { - Offset delta; - switch (gestureDirection) { - case AxisDirection.left: - delta = Offset(-amount, 0.0); - case AxisDirection.right: - delta = Offset(amount, 0.0); - case AxisDirection.up: - delta = Offset(0.0, -amount); - case AxisDirection.down: - delta = Offset(0.0, amount); - } + final Offset delta = switch (gestureDirection) { + AxisDirection.left => Offset(-amount, 0.0), + AxisDirection.right => Offset(amount, 0.0), + AxisDirection.up => Offset(0.0, -amount), + AxisDirection.down => Offset(0.0, amount), + }; await tester.drag(finder, delta); } Future flingElement(WidgetTester tester, Finder finder, { required AxisDirection gestureDirection, double initialOffsetFactor = 0.0 }) async { - Offset delta; - switch (gestureDirection) { - case AxisDirection.left: - delta = const Offset(-300.0, 0.0); - case AxisDirection.right: - delta = const Offset(300.0, 0.0); - case AxisDirection.up: - delta = const Offset(0.0, -300.0); - case AxisDirection.down: - delta = const Offset(0.0, 300.0); - } + final Offset delta = switch (gestureDirection) { + AxisDirection.left => const Offset(-300, 0.0), + AxisDirection.right => const Offset(300, 0.0), + AxisDirection.up => const Offset(0.0, -300), + AxisDirection.down => const Offset(0.0, 300), + }; await tester.fling(finder, delta, 1000.0, initialOffset: delta * initialOffsetFactor); } @@ -213,17 +203,12 @@ Future checkFlingItemAfterMovement( } Future rollbackElement(WidgetTester tester, Finder finder, { required AxisDirection gestureDirection, double initialOffsetFactor = 0.0 }) async { - Offset delta; - switch (gestureDirection) { - case AxisDirection.left: - delta = const Offset(-30.0, 0.0); - case AxisDirection.right: - delta = const Offset(30.0, 0.0); - case AxisDirection.up: - delta = const Offset(0.0, -30.0); - case AxisDirection.down: - delta = const Offset(0.0, 30.0); - } + final Offset delta = switch (gestureDirection) { + AxisDirection.left => const Offset(-30.0, 0.0), + AxisDirection.right => const Offset(30.0, 0.0), + AxisDirection.up => const Offset(0.0, -30.0), + AxisDirection.down => const Offset(0.0, 30.0), + }; await tester.fling(finder, delta, 1000.0, initialOffset: delta * initialOffsetFactor); } diff --git a/packages/flutter/test/widgets/html_element_view_test.dart b/packages/flutter/test/widgets/html_element_view_test.dart index 8cc3fa5946..d2778546cd 100644 --- a/packages/flutter/test/widgets/html_element_view_test.dart +++ b/packages/flutter/test/widgets/html_element_view_test.dart @@ -442,13 +442,11 @@ class FakePlatformViewRegistry implements ui_web.PlatformViewRegistry { } Future _onMethodCall(MethodCall call) { - switch (call.method) { - case 'create': - return _create(call); - case 'dispose': - return _dispose(call); - } - return Future.sync(() => null); + return switch (call.method) { + 'create' => _create(call), + 'dispose' => _dispose(call), + _ => Future.sync(() => null), + }; } Future _create(MethodCall call) async { diff --git a/packages/flutter/test/widgets/image_resolution_test.dart b/packages/flutter/test/widgets/image_resolution_test.dart index d2ad58ab08..a1d316bac4 100644 --- a/packages/flutter/test/widgets/image_resolution_test.dart +++ b/packages/flutter/test/widgets/image_resolution_test.dart @@ -38,23 +38,16 @@ class TestAssetBundle extends CachingAssetBundle { @override Future load(String key) { - late ByteData data; - switch (key) { - case 'AssetManifest.bin': - data = manifest; - case 'assets/image.png': - data = testByteData(1.0); - case 'assets/1.0x/image.png': - data = testByteData(10.0); // see "...with a main asset and a 1.0x asset" - case 'assets/1.5x/image.png': - data = testByteData(1.5); - case 'assets/2.0x/image.png': - data = testByteData(2.0); - case 'assets/3.0x/image.png': - data = testByteData(3.0); - case 'assets/4.0x/image.png': - data = testByteData(4.0); - } + final ByteData data = switch (key) { + 'AssetManifest.bin' => manifest, + 'assets/image.png' => testByteData(1.0), + 'assets/1.0x/image.png' => testByteData(10.0), // see "...with a main asset and a 1.0x asset" + 'assets/1.5x/image.png' => testByteData(1.5), + 'assets/2.0x/image.png' => testByteData(2.0), + 'assets/3.0x/image.png' => testByteData(3.0), + 'assets/4.0x/image.png' => testByteData(4.0), + _ => throw ArgumentError('Unexpected key: $key'), + }; return SynchronousFuture(data); } diff --git a/packages/flutter/test/widgets/page_forward_transitions_test.dart b/packages/flutter/test/widgets/page_forward_transitions_test.dart index 9ffc019cc6..f861140fcc 100644 --- a/packages/flutter/test/widgets/page_forward_transitions_test.dart +++ b/packages/flutter/test/widgets/page_forward_transitions_test.dart @@ -199,12 +199,10 @@ void main() { testWidgets('Check onstage/offstage handling of barriers around transitions', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - onGenerateRoute: (RouteSettings settings) { - switch (settings.name) { - case '/': return TestRoute(settings: settings, child: const Text('A')); - case '/1': return TestRoute(settings: settings, barrierColor: const Color(0xFFFFFF00), child: const Text('B')); - } - return null; + onGenerateRoute: (RouteSettings settings) => switch (settings.name) { + '/' => TestRoute(settings: settings, child: const Text('A')), + '/1' => TestRoute(settings: settings, barrierColor: const Color(0xFFFFFF00), child: const Text('B')), + _ => null, }, ), ); diff --git a/packages/flutter/test/widgets/render_object_widget_test.dart b/packages/flutter/test/widgets/render_object_widget_test.dart index e6ba52fd82..648afb859f 100644 --- a/packages/flutter/test/widgets/render_object_widget_test.dart +++ b/packages/flutter/test/widgets/render_object_widget_test.dart @@ -26,13 +26,10 @@ class TestOrientedBox extends SingleChildRenderObjectWidget { const TestOrientedBox({ super.key, super.child }); Decoration _getDecoration(BuildContext context) { - final Orientation orientation = MediaQuery.orientationOf(context); - switch (orientation) { - case Orientation.landscape: - return const BoxDecoration(color: Color(0xFF00FF00)); - case Orientation.portrait: - return const BoxDecoration(color: Color(0xFF0000FF)); - } + return switch (MediaQuery.orientationOf(context)) { + Orientation.landscape => const BoxDecoration(color: Color(0xFF00FF00)), + Orientation.portrait => const BoxDecoration(color: Color(0xFF0000FF)), + }; } @override diff --git a/packages/flutter/test/widgets/slotted_render_object_widget_test.dart b/packages/flutter/test/widgets/slotted_render_object_widget_test.dart index 55b222b24f..9d9a9998ad 100644 --- a/packages/flutter/test/widgets/slotted_render_object_widget_test.dart +++ b/packages/flutter/test/widgets/slotted_render_object_widget_test.dart @@ -286,14 +286,11 @@ class _Diagonal extends RenderObjectWidget with SlottedMultiChildRenderObjectWid @override Widget? childForSlot(_DiagonalSlot? slot) { - switch (slot) { - case null: - return nullSlot; - case _DiagonalSlot.topLeft: - return topLeft; - case _DiagonalSlot.bottomRight: - return bottomRight; - } + return switch (slot) { + null => nullSlot, + _DiagonalSlot.topLeft => topLeft, + _DiagonalSlot.bottomRight => bottomRight, + }; } @override diff --git a/packages/flutter/test/widgets/text_selection_test.dart b/packages/flutter/test/widgets/text_selection_test.dart index ec77ba33cc..9e21a0133d 100644 --- a/packages/flutter/test/widgets/text_selection_test.dart +++ b/packages/flutter/test/widgets/text_selection_test.dart @@ -2008,14 +2008,17 @@ class TextSelectionControlsSpy extends TextSelectionControls { @override Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) { - switch (type) { - case TextSelectionHandleType.left: - return ElevatedButton(onPressed: onTap, child: Text('height ${textLineHeight.toInt()}', key: leftHandleKey)); - case TextSelectionHandleType.right: - return ElevatedButton(onPressed: onTap, child: Text('height ${textLineHeight.toInt()}', key: rightHandleKey)); - case TextSelectionHandleType.collapsed: - return ElevatedButton(onPressed: onTap, child: Text('height ${textLineHeight.toInt()}', key: collapsedHandleKey)); - } + return ElevatedButton( + onPressed: onTap, + child: Text( + key: switch (type) { + TextSelectionHandleType.left => leftHandleKey, + TextSelectionHandleType.right => rightHandleKey, + TextSelectionHandleType.collapsed => collapsedHandleKey, + }, + 'height ${textLineHeight.toInt()}', + ), + ); } @override