// 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 '../framework/framework.dart'; import '../framework/task_result.dart'; import '../framework/utils.dart'; /// Tests the following Android lifecycles: Activity#onStop(), Activity#onResume(), Activity#onPause(), /// and Activity#onDestroy() from Dart perspective in debug, profile, and release modes. TaskFunction androidViewsTest({ Map<String, String>? environment, }){ return () async { section('Build APK'); await flutter( 'build', options: <String>[ 'apk', '--config-only', ], environment: environment, workingDirectory: '${flutterDirectory.path}/dev/integration_tests/android_views' ); /// Any gradle command downloads gradle if not already present in the cache. /// ./gradlew dependencies downloads any gradle defined dependencies to the cache. /// https://docs.gradle.org/current/userguide/viewing_debugging_dependencies.html /// Downloading gradle and downloading dependencies are a common source of flakes /// and moving those to an infra step that can be retried shifts the blame /// individual tests to the infra itself. section('Download android dependencies'); final int exitCode = await exec( './gradlew', <String>['-q', 'dependencies'], workingDirectory: '${flutterDirectory.path}/dev/integration_tests/android_views/android' ); if (exitCode != 0) { return TaskResult.failure('Failed to download gradle dependencies'); } section('Run flutter drive on android views'); await flutter( 'drive', options: <String>[ '--browser-name=android-chrome', '--android-emulator', '--no-start-paused', '--purge-persistent-cache', '--device-timeout=30', ], environment: environment, workingDirectory: '${flutterDirectory.path}/dev/integration_tests/android_views' ); return TaskResult.success(null); }; }