Move usage flutter create tests into memory filesystem. (#35160)
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart index 2a3543e..c167610 100644 --- a/packages/flutter_tools/test/commands/create_test.dart +++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -17,7 +17,6 @@ import 'package:flutter_tools/src/commands/create.dart'; import 'package:flutter_tools/src/dart/sdk.dart'; import 'package:flutter_tools/src/project.dart'; -import 'package:flutter_tools/src/usage.dart'; import 'package:flutter_tools/src/version.dart'; import 'package:mockito/mockito.dart'; @@ -1055,68 +1054,6 @@ HttpClientFactory: () => () => MockHttpClient(404, result: 'not found'), }); - - group('usageValues', () { - testUsingContext('set template type as usage value', () async { - Cache.flutterRoot = '../..'; - - final CreateCommand command = CreateCommand(); - final CommandRunner<void> runner = createTestCommandRunner(command); - - await runner.run(<String>['create', '--no-pub', '--template=module', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'module')); - - await runner.run(<String>['create', '--no-pub', '--template=app', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'app')); - - await runner.run(<String>['create', '--no-pub', '--template=package', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'package')); - - await runner.run(<String>['create', '--no-pub', '--template=plugin', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'plugin')); - - }, timeout: allowForCreateFlutterProject); - - testUsingContext('set iOS host language type as usage value', () async { - Cache.flutterRoot = '../..'; - - final CreateCommand command = CreateCommand(); - final CommandRunner<void> runner = createTestCommandRunner(command); - - await runner.run(<String>['create', '--no-pub', '--template=app', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateIosLanguage, 'objc')); - - await runner.run(<String>[ - 'create', - '--no-pub', - '--template=app', - '--ios-language=swift', - projectDir.path, - ]); - expect(await command.usageValues, containsPair(kCommandCreateIosLanguage, 'swift')); - - }, timeout: allowForCreateFlutterProject); - - testUsingContext('set Android host language type as usage value', () async { - Cache.flutterRoot = '../..'; - - final CreateCommand command = CreateCommand(); - final CommandRunner<void> runner = createTestCommandRunner(command); - - await runner.run(<String>['create', '--no-pub', '--template=app', projectDir.path]); - expect(await command.usageValues, containsPair(kCommandCreateAndroidLanguage, 'java')); - - await runner.run(<String>[ - 'create', - '--no-pub', - '--template=app', - '--android-language=kotlin', - projectDir.path, - ]); - expect(await command.usageValues, containsPair(kCommandCreateAndroidLanguage, 'kotlin')); - - }, timeout: allowForCreateFlutterProject); - }); }
diff --git a/packages/flutter_tools/test/commands/create_usage_test.dart b/packages/flutter_tools/test/commands/create_usage_test.dart new file mode 100644 index 0000000..5cc7bd2 --- /dev/null +++ b/packages/flutter_tools/test/commands/create_usage_test.dart
@@ -0,0 +1,104 @@ +// Copyright 2015 The Chromium 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:args/command_runner.dart'; +import 'package:flutter_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/cache.dart'; +import 'package:flutter_tools/src/commands/create.dart'; +import 'package:flutter_tools/src/doctor.dart'; +import 'package:flutter_tools/src/usage.dart'; + +import '../src/common.dart'; +import '../src/testbed.dart'; + + +void main() { + group('usageValues', () { + Testbed testbed; + + setUpAll(() { + Cache.disableLocking(); + }); + + setUp(() { + testbed = Testbed(setup: () { + final List<String> paths = <String>[ + fs.path.join('flutter', 'packages', 'flutter', 'pubspec.yaml'), + fs.path.join('flutter', 'packages', 'flutter_driver', 'pubspec.yaml'), + fs.path.join('flutter', 'packages', 'flutter_test', 'pubspec.yaml'), + fs.path.join('flutter', 'bin', 'cache', 'artifacts', 'gradle_wrapper', 'wrapper'), + fs.path.join('usr', 'local', 'bin', 'adb'), + fs.path.join('Android', 'platform-tools', 'foo'), + ]; + for (String path in paths) { + fs.file(path).createSync(recursive: true); + } + }, overrides: <Type, Generator>{ + DoctorValidatorsProvider: () => FakeDoctorValidatorsProvider(), + }); + }); + + test('set template type as usage value', () => testbed.run(() async { + final CreateCommand command = CreateCommand(); + final CommandRunner<void> runner = createTestCommandRunner(command); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=module', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'module')); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=app', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'app')); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=package', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'package')); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=plugin', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateProjectType, 'plugin')); + })); + + test('set iOS host language type as usage value', () => testbed.run(() async { + final CreateCommand command = CreateCommand(); + final CommandRunner<void> runner = createTestCommandRunner(command); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=app', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateIosLanguage, 'objc')); + + await runner.run(<String>[ + 'create', + '--flutter-root=flutter', + '--no-pub', + '--template=app', + '--ios-language=swift', + 'testy', + ]); + expect(await command.usageValues, containsPair(kCommandCreateIosLanguage, 'swift')); + + })); + + test('set Android host language type as usage value', () => testbed.run(() async { + final CreateCommand command = CreateCommand(); + final CommandRunner<void> runner = createTestCommandRunner(command); + + await runner.run(<String>['create', '--flutter-root=flutter', '--no-pub', '--template=app', 'testy']); + expect(await command.usageValues, containsPair(kCommandCreateAndroidLanguage, 'java')); + + await runner.run(<String>[ + 'create', + '--flutter-root=flutter', + '--no-pub', + '--template=app', + '--android-language=kotlin', + 'testy', + ]); + expect(await command.usageValues, containsPair(kCommandCreateAndroidLanguage, 'kotlin')); + })); + }); +} + +class FakeDoctorValidatorsProvider implements DoctorValidatorsProvider { + @override + List<DoctorValidator> get validators => <DoctorValidator>[]; + + @override + List<Workflow> get workflows => <Workflow>[]; +}
diff --git a/packages/flutter_tools/test/src/testbed.dart b/packages/flutter_tools/test/src/testbed.dart index 00986dc..acd1526 100644 --- a/packages/flutter_tools/test/src/testbed.dart +++ b/packages/flutter_tools/test/src/testbed.dart
@@ -13,6 +13,7 @@ import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/context_runner.dart'; import 'package:flutter_tools/src/usage.dart'; +import 'package:flutter_tools/src/version.dart'; import 'context.dart'; @@ -28,6 +29,7 @@ Logger: () => BufferLogger(), // Allows reading logs and prevents stdout. OutputPreferences: () => OutputPreferences(showColor: false), // configures BufferLogger to avoid color codes. Usage: () => NoOpUsage(), // prevent addition of analytics from burdening test mocks + FlutterVersion: () => FakeFlutterVersion() // prevent requirement to mock git for test runner. }; /// Manages interaction with the tool injection and runner system. @@ -140,4 +142,68 @@ @override void sendTiming(String category, String variableName, Duration duration, {String label}) {} -} \ No newline at end of file +} + +class FakeFlutterVersion implements FlutterVersion { + @override + String get channel => 'master'; + + @override + Future<void> checkFlutterVersionFreshness() async { } + + @override + bool checkRevisionAncestry({String tentativeDescendantRevision, String tentativeAncestorRevision}) { + throw UnimplementedError(); + } + + @override + String get dartSdkVersion => '12'; + + @override + String get engineRevision => '42.2'; + + @override + String get engineRevisionShort => '42'; + + @override + Future<void> ensureVersionFile() async { } + + @override + String get frameworkAge => null; + + @override + String get frameworkCommitDate => null; + + @override + String get frameworkDate => null; + + @override + String get frameworkRevision => null; + + @override + String get frameworkRevisionShort => null; + + @override + String get frameworkVersion => null; + + @override + String getBranchName({bool redactUnknownBranches = false}) { + return 'master'; + } + + @override + String getVersionString({bool redactUnknownBranches = false}) { + return 'v0.0.0'; + } + + @override + bool get isMaster => true; + + @override + String get repositoryUrl => null; + + @override + Map<String, Object> toJson() { + return null; + } +}