blob: 181141c33615372712cff049ee88e2fae478341f [file] [log] [blame]
Konstantin Scheglov4658ec02018-04-04 10:48:46 -07001// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -07004import 'dart:convert';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -07005
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -07006import 'package:archive/archive.dart';
7import 'package:file/file.dart';
8import 'package:file/memory.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -07009import 'package:flutter_tools/src/base/file_system.dart';
10import 'package:flutter_tools/src/doctor.dart';
11import 'package:flutter_tools/src/intellij/intellij.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070012
Ian Hicksond919e692019-07-13 11:51:44 -070013import '../../src/common.dart';
14import '../../src/context.dart';
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070015
16void main() {
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070017 FileSystem fs;
18
19 void writeFileCreatingDirectories(String path, List<int> bytes) {
20 final File file = fs.file(path);
21 file.parent.createSync(recursive: true);
22 file.writeAsBytesSync(bytes);
23 }
24
25 setUp(() {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020026 fs = MemoryFileSystem();
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070027 });
28
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070029 group('IntelliJ', () {
30 group('plugins', () {
31 testUsingContext('found', () async {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020032 final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath);
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070033
34 final Archive dartJarArchive =
35 buildSingleFileArchive('META-INF/plugin.xml', r'''
36<idea-plugin version="2">
37 <name>Dart</name>
38 <version>162.2485</version>
39</idea-plugin>
40''');
41 writeFileCreatingDirectories(
42 fs.path.join(_kPluginsPath, 'Dart', 'lib', 'Dart.jar'),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020043 ZipEncoder().encode(dartJarArchive));
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070044
45 final Archive flutterJarArchive =
46 buildSingleFileArchive('META-INF/plugin.xml', r'''
47<idea-plugin version="2">
48 <name>Flutter</name>
49 <version>0.1.3</version>
50</idea-plugin>
51''');
52 writeFileCreatingDirectories(
53 fs.path.join(_kPluginsPath, 'flutter-intellij.jar'),
Alexandre Ardhuind927c932018-09-12 08:29:29 +020054 ZipEncoder().encode(flutterJarArchive));
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070055
56 final List<ValidationMessage> messages = <ValidationMessage>[];
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070057 plugins.validatePackage(messages, <String>['Dart'], 'Dart');
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070058 plugins.validatePackage(messages,
59 <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter',
60 minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070061
62 ValidationMessage message = messages
63 .firstWhere((ValidationMessage m) => m.message.startsWith('Dart '));
64 expect(message.message, 'Dart plugin version 162.2485');
65
66 message = messages.firstWhere(
67 (ValidationMessage m) => m.message.startsWith('Flutter '));
68 expect(message.message, contains('Flutter plugin version 0.1.3'));
69 expect(message.message, contains('recommended minimum version'));
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070070 }, overrides: <Type, Generator>{
71 FileSystem: () => fs,
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070072 });
73
74 testUsingContext('not found', () async {
Alexandre Ardhuind927c932018-09-12 08:29:29 +020075 final IntelliJPlugins plugins = IntelliJPlugins(_kPluginsPath);
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070076
77 final List<ValidationMessage> messages = <ValidationMessage>[];
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070078 plugins.validatePackage(messages, <String>['Dart'], 'Dart');
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070079 plugins.validatePackage(messages,
80 <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter',
81 minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070082
83 ValidationMessage message = messages
84 .firstWhere((ValidationMessage m) => m.message.startsWith('Dart '));
85 expect(message.message, contains('Dart plugin not installed'));
86
87 message = messages.firstWhere(
88 (ValidationMessage m) => m.message.startsWith('Flutter '));
89 expect(message.message, contains('Flutter plugin not installed'));
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070090 }, overrides: <Type, Generator>{
91 FileSystem: () => fs,
Konstantin Scheglov4658ec02018-04-04 10:48:46 -070092 });
93 });
94 });
95}
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -070096
97const String _kPluginsPath = '/data/intellij/plugins';
98
99Archive buildSingleFileArchive(String path, String content) {
Alexandre Ardhuind927c932018-09-12 08:29:29 +0200100 final Archive archive = Archive();
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -0700101
102 final List<int> bytes = utf8.encode(content);
Alexandre Ardhuind927c932018-09-12 08:29:29 +0200103 archive.addFile(ArchiveFile(path, bytes.length, bytes));
Konstantin Scheglovd121cbc2018-04-08 09:46:11 -0700104
105 return archive;
106}