forked from firka/flutter
Trigger display_cutout_rotation flutter driver test in ci. (#162641)
Fixes https://github.com/flutter/flutter/issues/162615 Can test 2 different ways. On a mac (or linux machine) with adb on the path (or android sdk set in ANDROID_HOME) and an emulator running (or physical device attached) that is api 30 or higher. ``` cd dev/devicelab dart bin/test_runner.dart test -t android_display_cutout ``` OR ``` dev/integration_tests/display_cutout_rotation flutter drive integration_test/display_cutout_test.dart ``` Proof the test ran successfully ``` [2025-02-12 08:08:22.069817] [STDOUT] Removing Synthetic notch... [2025-02-12 08:08:22.071147] [STDOUT] Executing "/b/s/w/ir/cache/android/sdk/platform-tools/adb -s emulator-5554 shell cmd overlay disable com.android.internal.display.cutout.emulation.tall" in "/b/s/w/ir/x/w/rc/tmpk3k3yhhp/flutter sdk/dev/integration_tests/display_cutout_rotation/" with environment {BOT: true, LANG: en_US.UTF-8} [2025-02-12 08:08:22.862219] [STDOUT] Checking for reboot [android_defines_test] Process terminated with exit code 0. Task result: { "success": true, "data": null, "detailFiles": [], "benchmarkScoreKeys": [], "reason": "success" } ``` https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8723125792202374961/+/u/run_android_defines_test/stdout All checks passed https://github.com/flutter/flutter/pull/162641/checks?check_run_id=36991537539 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
This commit is contained in:
12
dev/devicelab/bin/tasks/android_display_cutout.dart
Normal file
12
dev/devicelab/bin/tasks/android_display_cutout.dart
Normal file
@@ -0,0 +1,12 @@
|
||||
// Copyright 2014 The Flutter 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_devicelab/framework/devices.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
import 'package:flutter_devicelab/tasks/integration_tests.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.android;
|
||||
await task(createDisplayCutoutTest());
|
||||
}
|
||||
@@ -139,6 +139,44 @@ TaskFunction createSolidColorTest({required bool enableImpeller}) {
|
||||
).call;
|
||||
}
|
||||
|
||||
// Can run on emulator or physical android device.
|
||||
// Device must have developer settings enabled.
|
||||
// Device must be android api 30 or higher.
|
||||
TaskFunction createDisplayCutoutTest() {
|
||||
return IntegrationTest(
|
||||
'${flutterDirectory.path}/dev/integration_tests/display_cutout_rotation/',
|
||||
'integration_test/display_cutout_test.dart',
|
||||
setup: (Device device) async {
|
||||
if (device is! AndroidDevice) {
|
||||
// Only android devices support this cutoutTest.
|
||||
throw TaskResult.failure('This test should only target android');
|
||||
}
|
||||
// Test requires developer settings added in 28 and behavior added in 30.
|
||||
final String sdkResult = await device.shellEval('getprop', <String>['ro.build.version.sdk']);
|
||||
if (sdkResult.startsWith('2') || sdkResult.startsWith('1') || sdkResult.length == 1) {
|
||||
throw TaskResult.failure('This test should only target android 30+.');
|
||||
}
|
||||
print('Adding Synthetic notch...');
|
||||
// This command will cause any running android activity to be recreated.
|
||||
await device.shellExec('cmd', <String>[
|
||||
'overlay',
|
||||
'enable',
|
||||
'com.android.internal.display.cutout.emulation.tall',
|
||||
]);
|
||||
},
|
||||
tearDown: (Device device) async {
|
||||
if (device is AndroidDevice) {
|
||||
print('Removing Synthetic notch...');
|
||||
await device.shellExec('cmd', <String>[
|
||||
'overlay',
|
||||
'disable',
|
||||
'com.android.internal.display.cutout.emulation.tall',
|
||||
]);
|
||||
}
|
||||
},
|
||||
).call;
|
||||
}
|
||||
|
||||
TaskFunction dartDefinesTask() {
|
||||
return DriverTest(
|
||||
'${flutterDirectory.path}/dev/integration_tests/ui',
|
||||
@@ -217,7 +255,6 @@ class DriverTest {
|
||||
...extraOptions,
|
||||
];
|
||||
await flutter('drive', options: options, environment: environment);
|
||||
|
||||
return TaskResult.success(null);
|
||||
});
|
||||
}
|
||||
@@ -231,6 +268,8 @@ class IntegrationTest {
|
||||
this.createPlatforms = const <String>[],
|
||||
this.withTalkBack = false,
|
||||
this.environment,
|
||||
this.setup,
|
||||
this.tearDown,
|
||||
});
|
||||
|
||||
final String testDirectory;
|
||||
@@ -240,12 +279,19 @@ class IntegrationTest {
|
||||
final bool withTalkBack;
|
||||
final Map<String, String>? environment;
|
||||
|
||||
/// Run before flutter drive with the result from devices.workingDevice.
|
||||
final Future<void> Function(Device device)? setup;
|
||||
|
||||
/// Run after flutter drive with the result from devices.workingDevice.
|
||||
final Future<void> Function(Device device)? tearDown;
|
||||
|
||||
Future<TaskResult> call() {
|
||||
return inDirectory<TaskResult>(testDirectory, () async {
|
||||
final Device device = await devices.workingDevice;
|
||||
await device.unlock();
|
||||
final String deviceId = device.deviceId;
|
||||
await flutter('packages', options: <String>['get']);
|
||||
await setup?.call(await devices.workingDevice);
|
||||
|
||||
if (createPlatforms.isNotEmpty) {
|
||||
await flutter(
|
||||
@@ -265,6 +311,7 @@ class IntegrationTest {
|
||||
|
||||
final List<String> options = <String>['-v', '-d', deviceId, testTarget, ...extraOptions];
|
||||
await flutter('test', options: options, environment: environment);
|
||||
await tearDown?.call(await devices.workingDevice);
|
||||
|
||||
if (withTalkBack) {
|
||||
await disableTalkBack();
|
||||
|
||||
Reference in New Issue
Block a user