mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
70 lines
2.8 KiB
Dart
70 lines
2.8 KiB
Dart
// 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:async';
|
|
|
|
import 'package:args/args.dart';
|
|
import 'package:args/command_runner.dart';
|
|
import 'package:flutter_tools/src/base/context.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/base/logger.dart';
|
|
import 'package:flutter_tools/src/base/user_messages.dart';
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
import 'package:flutter_tools/src/commands/create.dart';
|
|
import 'package:flutter_tools/src/globals_null_migrated.dart' as globals;
|
|
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
|
import 'package:flutter_tools/src/runner/flutter_command_runner.dart';
|
|
|
|
export 'package:test_api/test_api.dart' hide test, isInstanceOf; // ignore: deprecated_member_use
|
|
|
|
CommandRunner<void> createTestCommandRunner([ FlutterCommand command ]) {
|
|
final FlutterCommandRunner runner = TestFlutterCommandRunner();
|
|
if (command != null) {
|
|
runner.addCommand(command);
|
|
}
|
|
return runner;
|
|
}
|
|
|
|
/// Creates a flutter project in the [temp] directory using the
|
|
/// [arguments] list if specified, or `--no-pub` if not.
|
|
/// Returns the path to the flutter project.
|
|
Future<String> createProject(Directory temp, { List<String> arguments }) async {
|
|
arguments ??= <String>['--no-pub'];
|
|
final String projectPath = globals.fs.path.join(temp.path, 'flutter_project');
|
|
final CreateCommand command = CreateCommand();
|
|
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
await runner.run(<String>['create', ...arguments, projectPath]);
|
|
// Created `.packages` since it's not created when the flag `--no-pub` is passed.
|
|
globals.fs.file(globals.fs.path.join(projectPath, '.packages')).createSync();
|
|
return projectPath;
|
|
}
|
|
|
|
class TestFlutterCommandRunner extends FlutterCommandRunner {
|
|
@override
|
|
Future<void> runCommand(ArgResults topLevelResults) async {
|
|
final Logger topLevelLogger = globals.logger;
|
|
final Map<Type, dynamic> contextOverrides = <Type, dynamic>{
|
|
if (topLevelResults['verbose'] as bool)
|
|
Logger: VerboseLogger(topLevelLogger),
|
|
};
|
|
return context.run<void>(
|
|
overrides: contextOverrides.map<Type, Generator>((Type type, dynamic value) {
|
|
return MapEntry<Type, Generator>(type, () => value);
|
|
}),
|
|
body: () {
|
|
Cache.flutterRoot ??= Cache.defaultFlutterRoot(
|
|
platform: globals.platform,
|
|
fileSystem: globals.fs,
|
|
userMessages: UserMessages(),
|
|
);
|
|
// For compatibility with tests that set this to a relative path.
|
|
Cache.flutterRoot = globals.fs.path.normalize(globals.fs.path.absolute(Cache.flutterRoot));
|
|
return super.runCommand(topLevelResults);
|
|
}
|
|
);
|
|
}
|
|
}
|