// Copyright 2018 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:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/os.dart'; import 'package:flutter_tools/src/doctor.dart'; import 'package:flutter_tools/src/intellij/intellij.dart'; import 'package:mockito/mockito.dart'; import '../../src/common.dart'; import '../../src/context.dart'; const String dartPluginContents = ''' Dart 162.2485 '''; const String flutterPluginContents = r''' Flutter 0.1.3 '''; void main() { testUsingContext('IntelliJ plugins found', () async { fs.directory(fs.path.join(_kPluginsPath, 'Dart')) .createSync(recursive: true); fs.file(fs.path.join(_kPluginsPath, 'flutter-intellij.jar')) .createSync(recursive: true); when(os.unzip(any, any)).thenAnswer((Invocation invocation) { final File file = invocation.positionalArguments.first as File; final Directory destination = invocation.positionalArguments.last as Directory; destination .childDirectory('META-INF') .childFile('plugin.xml') ..createSync(recursive: true) ..writeAsStringSync(file.path.contains('Dart') ? dartPluginContents : flutterPluginContents); }); final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath); final List messages = []; plugins.validatePackage(messages, ['Dart'], 'Dart'); plugins.validatePackage(messages, ['flutter-intellij', 'flutter-intellij.jar'], 'Flutter', minVersion: IntelliJPlugins.kMinFlutterPluginVersion); ValidationMessage message = messages .firstWhere((ValidationMessage m) => m.message.startsWith('Dart ')); expect(message.message, 'Dart plugin version 162.2485'); message = messages.firstWhere( (ValidationMessage m) => m.message.startsWith('Flutter ')); expect(message.message, contains('Flutter plugin version 0.1.3')); expect(message.message, contains('recommended minimum version')); }, overrides: { FileSystem: () => MemoryFileSystem(), ProcessManager: () => FakeProcessManager.any(), OperatingSystemUtils: () => MockOperatingSystemUtils(), }); testUsingContext('IntelliJ plugins not found', () async { final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath); final List messages = []; plugins.validatePackage(messages, ['Dart'], 'Dart'); plugins.validatePackage(messages, ['flutter-intellij', 'flutter-intellij.jar'], 'Flutter', minVersion: IntelliJPlugins.kMinFlutterPluginVersion); ValidationMessage message = messages .firstWhere((ValidationMessage m) => m.message.startsWith('Dart ')); expect(message.message, contains('Dart plugin not installed')); message = messages.firstWhere( (ValidationMessage m) => m.message.startsWith('Flutter ')); expect(message.message, contains('Flutter plugin not installed')); }, overrides: { OperatingSystemUtils: () => MockOperatingSystemUtils(), FileSystem: () => MemoryFileSystem(), ProcessManager: () => FakeProcessManager.any(), }); } class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {} const String _kPluginsPath = '/data/intellij/plugins';