// 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. // @dart = 2.8 import 'dart:io'; import 'package:flutter_devicelab/framework/devices.dart'; import 'package:flutter_devicelab/framework/framework.dart'; import 'package:flutter_devicelab/framework/host_agent.dart'; import 'package:flutter_devicelab/framework/task_result.dart'; import 'package:flutter_devicelab/framework/utils.dart'; import 'package:path/path.dart' as path; Future<void> main() async { deviceOperatingSystem = DeviceOperatingSystem.ios; await task(() async { final String projectDirectory = '${flutterDirectory.path}/dev/integration_tests/flutter_gallery'; await inDirectory(projectDirectory, () async { section('Build clean'); await flutter('clean'); section('Build gallery app'); await flutter( 'build', options: <String>[ 'ios', '-v', '--release', '--config-only', ], ); }); section('Run platform unit tests'); final Device device = await devices.workingDevice; final Map<String, String> environment = Platform.environment; // If not running on CI, inject the Flutter team code signing properties. final String developmentTeam = environment['FLUTTER_XCODE_DEVELOPMENT_TEAM'] ?? 'S8QB4VV633'; final String codeSignStyle = environment['FLUTTER_XCODE_CODE_SIGN_STYLE']; final String provisioningProfile = environment['FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER']; final String resultBundleTemp = Directory.systemTemp.createTempSync('flutter_native_ui_tests_ios32_xcresult.').path; final String resultBundlePath = path.join(resultBundleTemp, 'result'); final int testResultExit = await exec( 'xcodebuild', <String>[ '-workspace', 'Runner.xcworkspace', '-scheme', 'Runner', '-configuration', 'Release', '-destination', 'id=${device.deviceId}', '-resultBundlePath', resultBundlePath, 'test', 'COMPILER_INDEX_STORE_ENABLE=NO', 'DEVELOPMENT_TEAM=$developmentTeam', if (codeSignStyle != null) 'CODE_SIGN_STYLE=$codeSignStyle', if (provisioningProfile != null) 'PROVISIONING_PROFILE_SPECIFIER=$provisioningProfile', ], workingDirectory: path.join(projectDirectory, 'ios'), canFail: true, ); if (testResultExit != 0) { final Directory dumpDirectory = hostAgent.dumpDirectory; if (dumpDirectory != null) { // Zip the test results to the artifacts directory for upload. final String zipPath = path.join(dumpDirectory.path, 'native_ui_tests_ios32-${DateTime.now().toLocal().toIso8601String()}.zip'); await exec( 'zip', <String>[ '-r', '-9', zipPath, 'result.xcresult', ], workingDirectory: resultBundleTemp, canFail: true, // Best effort to get the logs. ); } return TaskResult.failure('Platform unit tests failed'); } return TaskResult.success(null); }); }