// 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 'dart:io';

import '../framework/adb.dart';
import '../framework/task_result.dart';
import '../framework/utils.dart';

Future<TaskResult> runEndToEndTests() async {
  final Device device = await devices.workingDevice;
  await device.unlock();
  final String deviceId = device.deviceId;
  final Directory testDirectory = dir('${flutterDirectory.path}/dev/integration_tests/ui');
  await inDirectory<void>(testDirectory, () async {
    await flutter('packages', options: <String>['get']);

    const List<String> entryPoints = <String>[
      'lib/keyboard_resize.dart',
      'lib/driver.dart',
      'lib/screenshot.dart',
      'lib/keyboard_textfield.dart',
    ];

    for (final String entryPoint in entryPoints) {
      await flutter('drive', options: <String>['--verbose', '-d', deviceId, entryPoint]);
    }
  });

  return TaskResult.success(<String, dynamic>{});
}
