Ian Hickson | 449f4a6 | 2019-11-27 15:04:02 -0800 | [diff] [blame] | 1 | // Copyright 2014 The Flutter Authors. All rights reserved. |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
Ian Hickson | 449f4a6 | 2019-11-27 15:04:02 -0800 | [diff] [blame] | 4 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 5 | import 'dart:convert'; |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 6 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 7 | import 'package:archive/archive.dart'; |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 8 | import 'package:file/file.dart'; |
| 9 | import 'package:file/memory.dart'; |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 10 | import 'package:flutter_tools/src/base/file_system.dart'; |
| 11 | import 'package:flutter_tools/src/doctor.dart'; |
| 12 | import 'package:flutter_tools/src/intellij/intellij.dart'; |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 13 | |
Ian Hickson | d919e69 | 2019-07-13 11:51:44 -0700 | [diff] [blame] | 14 | import '../../src/common.dart'; |
| 15 | import '../../src/context.dart'; |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 16 | |
| 17 | void main() { |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 18 | FileSystem fs; |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 19 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 20 | void writeFileCreatingDirectories(String path, List<int> bytes) { |
| 21 | final File file = fs.file(path); |
| 22 | file.parent.createSync(recursive: true); |
| 23 | file.writeAsBytesSync(bytes); |
| 24 | } |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 25 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 26 | setUp(() { |
| 27 | fs = MemoryFileSystem(); |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 28 | }); |
| 29 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 30 | group('IntelliJ', () { |
| 31 | group('plugins', () { |
| 32 | testUsingContext('found', () async { |
| 33 | final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath); |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 34 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 35 | final Archive dartJarArchive = |
| 36 | buildSingleFileArchive('META-INF/plugin.xml', r''' |
| 37 | <idea-plugin version="2"> |
| 38 | <name>Dart</name> |
| 39 | <version>162.2485</version> |
| 40 | </idea-plugin> |
| 41 | '''); |
| 42 | writeFileCreatingDirectories( |
| 43 | fs.path.join(_kPluginsPath, 'Dart', 'lib', 'Dart.jar'), |
| 44 | ZipEncoder().encode(dartJarArchive)); |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 45 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 46 | final Archive flutterJarArchive = |
| 47 | buildSingleFileArchive('META-INF/plugin.xml', r''' |
| 48 | <idea-plugin version="2"> |
| 49 | <name>Flutter</name> |
| 50 | <version>0.1.3</version> |
| 51 | </idea-plugin> |
| 52 | '''); |
| 53 | writeFileCreatingDirectories( |
| 54 | fs.path.join(_kPluginsPath, 'flutter-intellij.jar'), |
| 55 | ZipEncoder().encode(flutterJarArchive)); |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 56 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 57 | final List<ValidationMessage> messages = <ValidationMessage>[]; |
| 58 | plugins.validatePackage(messages, <String>['Dart'], 'Dart'); |
| 59 | plugins.validatePackage(messages, |
| 60 | <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter', |
| 61 | minVersion: IntelliJPlugins.kMinFlutterPluginVersion); |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 62 | |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 63 | ValidationMessage message = messages |
| 64 | .firstWhere((ValidationMessage m) => m.message.startsWith('Dart ')); |
| 65 | expect(message.message, 'Dart plugin version 162.2485'); |
| 66 | |
| 67 | message = messages.firstWhere( |
| 68 | (ValidationMessage m) => m.message.startsWith('Flutter ')); |
| 69 | expect(message.message, contains('Flutter plugin version 0.1.3')); |
| 70 | expect(message.message, contains('recommended minimum version')); |
| 71 | }, overrides: <Type, Generator>{ |
| 72 | FileSystem: () => fs, |
| 73 | ProcessManager: () => FakeProcessManager.any(), |
| 74 | }); |
| 75 | |
| 76 | testUsingContext('not found', () async { |
| 77 | final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath); |
| 78 | |
| 79 | final List<ValidationMessage> messages = <ValidationMessage>[]; |
| 80 | plugins.validatePackage(messages, <String>['Dart'], 'Dart'); |
| 81 | plugins.validatePackage(messages, |
| 82 | <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter', |
| 83 | minVersion: IntelliJPlugins.kMinFlutterPluginVersion); |
| 84 | |
| 85 | ValidationMessage message = messages |
| 86 | .firstWhere((ValidationMessage m) => m.message.startsWith('Dart ')); |
| 87 | expect(message.message, contains('Dart plugin not installed')); |
| 88 | |
| 89 | message = messages.firstWhere( |
| 90 | (ValidationMessage m) => m.message.startsWith('Flutter ')); |
| 91 | expect(message.message, contains('Flutter plugin not installed')); |
| 92 | }, overrides: <Type, Generator>{ |
| 93 | FileSystem: () => fs, |
| 94 | ProcessManager: () => FakeProcessManager.any(), |
| 95 | }); |
| 96 | }); |
Konstantin Scheglov | 4658ec0 | 2018-04-04 10:48:46 -0700 | [diff] [blame] | 97 | }); |
| 98 | } |
Konstantin Scheglov | d121cbc | 2018-04-08 09:46:11 -0700 | [diff] [blame] | 99 | |
| 100 | const String _kPluginsPath = '/data/intellij/plugins'; |
Jonah Williams | 106b8eb | 2019-11-20 14:45:32 -0800 | [diff] [blame] | 101 | |
| 102 | Archive buildSingleFileArchive(String path, String content) { |
| 103 | final Archive archive = Archive(); |
| 104 | |
| 105 | final List<int> bytes = utf8.encode(content); |
| 106 | archive.addFile(ArchiveFile(path, bytes.length, bytes)); |
| 107 | |
| 108 | return archive; |
| 109 | } |