From b4b0b2c4b338b63f31e6b0e72d49e12874ad75dd Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Fri, 13 Sep 2024 09:40:09 -0700 Subject: [PATCH] Filtered Android tasks should include mokey and pixel 7 pro in dashboard (#3902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update the dashboard so "mokey" and "pixel_7pro" tasks are filtered/iconed as Android. https://github.com/flutter/flutter/issues/148085 For example, `Linux_mokey old_gallery__transition_perf` should show up in the dashboard as an Android test, but its icon and filtering counts it as a Linux test: ![Screenshot 2024-09-12 at 9 57 52 AM](https://github.com/user-attachments/assets/b2a090aa-28e3-4495-b781-0717723d318f) ![Screenshot 2024-09-12 at 9 57 48 AM](https://github.com/user-attachments/assets/1aa929d1-045d-49e1-93b4-6cc1fe2f24d9) Also fix two unrelated warnings. --- dashboard/lib/logic/task_grid_filter.dart | 5 ++++- dashboard/lib/main.dart | 1 - dashboard/lib/widgets/task_icon.dart | 4 +++- .../test/logic/task_grid_filter_test.dart | 11 ++++++++++- dashboard/test/widgets/task_grid_test.dart | 3 ++- dashboard/test/widgets/task_icon_test.dart | 18 +++++++++++++----- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/dashboard/lib/logic/task_grid_filter.dart b/dashboard/lib/logic/task_grid_filter.dart index 254bb4e4e..f082e6291 100644 --- a/dashboard/lib/logic/task_grid_filter.dart +++ b/dashboard/lib/logic/task_grid_filter.dart @@ -172,9 +172,12 @@ class TaskGridFilter extends FilterPropertySource { return false; } + final bool showAndroid = _allProperties['showAndroid']?.value ?? false; final LinkedHashMap orderedOSFilter = LinkedHashMap.of({ 'ios': _allProperties['showiOS']?.value ?? false, - 'android': _allProperties['showAndroid']?.value ?? false, + 'android': showAndroid, + 'mokey': showAndroid, + 'pixel_7pro': showAndroid, 'mac': _allProperties['showMac']?.value ?? false, 'windows': _allProperties['showWindows']?.value ?? false, 'linux': _allProperties['showLinux']?.value ?? false, diff --git a/dashboard/lib/main.dart b/dashboard/lib/main.dart index dbe466f96..0833f4e72 100644 --- a/dashboard/lib/main.dart +++ b/dashboard/lib/main.dart @@ -8,7 +8,6 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'build_dashboard_page.dart'; diff --git a/dashboard/lib/widgets/task_icon.dart b/dashboard/lib/widgets/task_icon.dart index ecf64dda5..d8c9c313a 100644 --- a/dashboard/lib/widgets/task_icon.dart +++ b/dashboard/lib/widgets/task_icon.dart @@ -51,6 +51,8 @@ class TaskIcon extends StatelessWidget { final String matchedName = qualifiedTask.task!.toLowerCase(); final bool isWebTest = matchedName.contains('_web') || matchedName.contains('web_'); final bool isToolTest = matchedName.contains('_tool') || matchedName.contains('tool_'); + final bool isAndroidTest = + matchedName.contains('_android') || matchedName.contains('_mokey') || matchedName.contains('_pixel_7pro'); if (matchedName.contains('_fuchsia')) { return Padding( @@ -68,7 +70,7 @@ class TaskIcon extends StatelessWidget { color: blendFilter, ), ); - } else if (matchedName.contains('_android')) { + } else if (isAndroidTest) { return Icon( Icons.android, color: blendFilter, diff --git a/dashboard/test/logic/task_grid_filter_test.dart b/dashboard/test/logic/task_grid_filter_test.dart index 36e52d549..399fcd93d 100644 --- a/dashboard/test/logic/task_grid_filter_test.dart +++ b/dashboard/test/logic/task_grid_filter_test.dart @@ -232,12 +232,21 @@ void main() { expect(macIosBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Mac_ios')), true); expect(macIosBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Mac')), true); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux pixel_test')), false); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux')), false); expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), false); + expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), false); + expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), false); expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux')), true); expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); - expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); + expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), true); + expect( + linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), true); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_android')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_mokey')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_pixel_7pro')), true); expect(androidFalseFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Anything_android')), false); }); diff --git a/dashboard/test/widgets/task_grid_test.dart b/dashboard/test/widgets/task_grid_test.dart index 44ce0ce3d..5ab16491e 100644 --- a/dashboard/test/widgets/task_grid_test.dart +++ b/dashboard/test/widgets/task_grid_test.dart @@ -878,5 +878,6 @@ Future expectTaskBoxColorWithMessage(WidgetTester tester, String message, expect(pixels!.lengthInBytes, (cellPixelArea * 4).round()); const double padding = 4.0; final int rgba = pixels.getUint32((((cellPixelSize * (cellSize + padding)) + cellSize + padding).ceil()) * 4); - expect((rgba >> 8) | (rgba << 24) & 0xFFFFFFFF, expectedColor.value); + final Color actualColor = Color((rgba >> 8) | (rgba << 24) & 0xFFFFFFFF); + expect(actualColor, isSameColorAs(expectedColor)); } diff --git a/dashboard/test/widgets/task_icon_test.dart b/dashboard/test/widgets/task_icon_test.dart index 019a634ec..a04300c2f 100644 --- a/dashboard/test/widgets/task_icon_test.dart +++ b/dashboard/test/widgets/task_icon_test.dart @@ -141,15 +141,23 @@ void main() { await tester.pumpWidget( const MaterialApp( home: Material( - child: TaskIcon( - qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_android test', pool: 'luci.flutter.prod'), + child: Column( + children: [ + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_android test'), + ), + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_pixel_7pro test'), + ), + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_mokey test'), + ), + ], ), ), ), ); - - expect(tester.widget(find.byType(Icon)) as Icon, isInstanceOf()); - expect((tester.widget(find.byType(Icon)) as Icon).icon!.codePoint, const Icon(Icons.android).icon!.codePoint); + expect(find.byIcon(Icons.android), findsExactly(3)); }); testWidgets('TaskIcon shows the right icon for LUCI mac', (WidgetTester tester) async {