| // Copyright 2016 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 'dart:convert'; |
| |
| import 'package:args/command_runner.dart'; |
| import 'package:flutter_tools/src/android/android_sdk.dart'; |
| import 'package:flutter_tools/src/android/android_studio.dart'; |
| import 'package:flutter_tools/src/base/config.dart'; |
| import 'package:flutter_tools/src/base/context.dart'; |
| import 'package:flutter_tools/src/base/logger.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/commands/config.dart'; |
| import 'package:flutter_tools/src/desktop.dart'; |
| import 'package:flutter_tools/src/version.dart'; |
| import 'package:flutter_tools/src/web/workflow.dart'; |
| import 'package:mockito/mockito.dart'; |
| |
| import '../../src/common.dart'; |
| import '../../src/context.dart'; |
| |
| void main() { |
| MockAndroidStudio mockAndroidStudio; |
| MockAndroidSdk mockAndroidSdk; |
| MockFlutterVersion mockFlutterVersion; |
| |
| setUpAll(() { |
| // TODO(jonahwilliams): remove once features are landed. |
| debugDisableDesktop = true; |
| debugDisableWeb = true; |
| Cache.disableLocking(); |
| }); |
| |
| setUp(() { |
| mockAndroidStudio = MockAndroidStudio(); |
| mockAndroidSdk = MockAndroidSdk(); |
| mockFlutterVersion = MockFlutterVersion(); |
| }); |
| |
| group('config', () { |
| testUsingContext('machine flag', () async { |
| final BufferLogger logger = context.get<Logger>(); |
| final ConfigCommand command = ConfigCommand(); |
| await command.handleMachine(); |
| |
| expect(logger.statusText, isNotEmpty); |
| final dynamic jsonObject = json.decode(logger.statusText); |
| expect(jsonObject, isMap); |
| |
| expect(jsonObject.containsKey('android-studio-dir'), true); |
| expect(jsonObject['android-studio-dir'], isNotNull); |
| |
| expect(jsonObject.containsKey('android-sdk'), true); |
| expect(jsonObject['android-sdk'], isNotNull); |
| }, overrides: <Type, Generator>{ |
| AndroidStudio: () => mockAndroidStudio, |
| AndroidSdk: () => mockAndroidSdk, |
| }); |
| |
| testUsingContext('allows setting and removing feature flags', () async { |
| final ConfigCommand configCommand = ConfigCommand(); |
| final CommandRunner<void> commandRunner = createTestCommandRunner(configCommand); |
| |
| await commandRunner.run(<String>[ |
| 'config', |
| '--enable-web', |
| '--enable-linux-desktop', |
| '--enable-windows-desktop', |
| '--enable-macos-desktop' |
| ]); |
| |
| expect(Config.instance.getValue('enable-web'), true); |
| expect(Config.instance.getValue('enable-linux-desktop'), true); |
| expect(Config.instance.getValue('enable-windows-desktop'), true); |
| expect(Config.instance.getValue('enable-macos-desktop'), true); |
| |
| await commandRunner.run(<String>[ |
| 'config', '--clear-features', |
| ]); |
| |
| expect(Config.instance.getValue('enable-web'), null); |
| expect(Config.instance.getValue('enable-linux-desktop'), null); |
| expect(Config.instance.getValue('enable-windows-desktop'), null); |
| expect(Config.instance.getValue('enable-macos-desktop'), null); |
| |
| await commandRunner.run(<String>[ |
| 'config', |
| '--no-enable-web', |
| '--no-enable-linux-desktop', |
| '--no-enable-windows-desktop', |
| '--no-enable-macos-desktop' |
| ]); |
| |
| expect(Config.instance.getValue('enable-web'), false); |
| expect(Config.instance.getValue('enable-linux-desktop'), false); |
| expect(Config.instance.getValue('enable-windows-desktop'), false); |
| expect(Config.instance.getValue('enable-macos-desktop'), false); |
| }, overrides: <Type, Generator>{ |
| AndroidStudio: () => mockAndroidStudio, |
| AndroidSdk: () => mockAndroidSdk, |
| }); |
| |
| testUsingContext('displays which config settings are available on stable', () async { |
| final BufferLogger logger = context.get<Logger>(); |
| when(mockFlutterVersion.channel).thenReturn('stable'); |
| final ConfigCommand configCommand = ConfigCommand(); |
| final CommandRunner<void> commandRunner = createTestCommandRunner(configCommand); |
| |
| await commandRunner.run(<String>[ |
| 'config', |
| '--enable-web', |
| '--enable-linux-desktop', |
| '--enable-windows-desktop', |
| '--enable-macos-desktop' |
| ]); |
| |
| await commandRunner.run(<String>[ |
| 'config', |
| ]); |
| |
| expect(logger.statusText, contains('enable-web: true (Unavailable)')); |
| expect(logger.statusText, contains('enable-linux-desktop: true (Unavailable)')); |
| expect(logger.statusText, contains('enable-windows-desktop: true (Unavailable)')); |
| expect(logger.statusText, contains('enable-macos-desktop: true (Unavailable)')); |
| }, overrides: <Type, Generator>{ |
| AndroidStudio: () => mockAndroidStudio, |
| AndroidSdk: () => mockAndroidSdk, |
| FlutterVersion: () => mockFlutterVersion, |
| }); |
| }); |
| } |
| |
| class MockAndroidStudio extends Mock implements AndroidStudio, Comparable<AndroidStudio> { |
| @override |
| String get directory => 'path/to/android/stdio'; |
| } |
| |
| class MockAndroidSdk extends Mock implements AndroidSdk { |
| @override |
| String get directory => 'path/to/android/sdk'; |
| } |
| |
| class MockFlutterVersion extends Mock implements FlutterVersion {} |