blob: 18b2c80225f0e7ae66c3906170c22d056d391733 [file] [log] [blame]
Ian Hickson449f4a62019-11-27 15:04:02 -08001// Copyright 2014 The Flutter Authors. All rights reserved.
Konstantin Scheglov4658ec02018-04-04 10:48:46 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Ian Hickson449f4a62019-11-27 15:04:02 -08004
Jonah Williams106b8eb2019-11-20 14:45:32 -08005import 'dart:convert';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -07006
Jonah Williams106b8eb2019-11-20 14:45:32 -08007import 'package:archive/archive.dart';
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -07008import 'package:file/file.dart';
9import 'package:file/memory.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070010import 'package:flutter_tools/src/base/file_system.dart';
11import 'package:flutter_tools/src/doctor.dart';
12import 'package:flutter_tools/src/intellij/intellij.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070013
Ian Hicksond919e692019-07-13 11:51:44 -070014import '../../src/common.dart';
15import '../../src/context.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070016
17void main() {
Jonah Williams106b8eb2019-11-20 14:45:32 -080018 FileSystem fs;
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070019
Jonah Williams106b8eb2019-11-20 14:45:32 -080020 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 Scheglovd121cbc2018-04-08 09:46:11 -070025
Jonah Williams106b8eb2019-11-20 14:45:32 -080026 setUp(() {
27 fs = MemoryFileSystem();
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070028 });
29
Jonah Williams106b8eb2019-11-20 14:45:32 -080030 group('IntelliJ', () {
31 group('plugins', () {
32 testUsingContext('found', () async {
33 final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath);
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070034
Jonah Williams106b8eb2019-11-20 14:45:32 -080035 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 Scheglovd121cbc2018-04-08 09:46:11 -070045
Jonah Williams106b8eb2019-11-20 14:45:32 -080046 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 Scheglov4658ec02018-04-04 10:48:46 -070056
Jonah Williams106b8eb2019-11-20 14:45:32 -080057 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 Scheglov4658ec02018-04-04 10:48:46 -070062
Jonah Williams106b8eb2019-11-20 14:45:32 -080063 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 Scheglov4658ec02018-04-04 10:48:46 -070097 });
98}
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070099
100const String _kPluginsPath = '/data/intellij/plugins';
Jonah Williams106b8eb2019-11-20 14:45:32 -0800101
102Archive 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}