Make IntelliJPlugins tests use MemoryFileSystem. (#16341)

diff --git a/packages/flutter_tools/test/intellij/intellij_test.dart b/packages/flutter_tools/test/intellij/intellij_test.dart
index b1bb2bf..a79a08d 100644
--- a/packages/flutter_tools/test/intellij/intellij_test.dart
+++ b/packages/flutter_tools/test/intellij/intellij_test.dart
@@ -1,7 +1,11 @@
 // 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 'dart:convert';
 
+import 'package:archive/archive.dart';
+import 'package:file/file.dart';
+import 'package:file/memory.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
 import 'package:flutter_tools/src/doctor.dart';
 import 'package:flutter_tools/src/intellij/intellij.dart';
@@ -10,18 +14,50 @@
 import '../src/context.dart';
 
 void main() {
+  FileSystem fs;
+
+  void writeFileCreatingDirectories(String path, List<int> bytes) {
+    final File file = fs.file(path);
+    file.parent.createSync(recursive: true);
+    file.writeAsBytesSync(bytes);
+  }
+
+  setUp(() {
+    fs = new MemoryFileSystem();
+  });
+
   group('IntelliJ', () {
     group('plugins', () {
       testUsingContext('found', () async {
-        final String pluginsPath =
-            fs.path.join('test', 'data', 'intellij', 'plugins');
-        final IntelliJPlugins plugins = new IntelliJPlugins(pluginsPath);
+        final IntelliJPlugins plugins = new IntelliJPlugins(_kPluginsPath);
+
+        final Archive dartJarArchive =
+            buildSingleFileArchive('META-INF/plugin.xml', r'''
+<idea-plugin version="2">
+  <name>Dart</name>
+  <version>162.2485</version>
+</idea-plugin>
+''');
+        writeFileCreatingDirectories(
+            fs.path.join(_kPluginsPath, 'Dart', 'lib', 'Dart.jar'),
+            new ZipEncoder().encode(dartJarArchive));
+
+        final Archive flutterJarArchive =
+            buildSingleFileArchive('META-INF/plugin.xml', r'''
+<idea-plugin version="2">
+  <name>Flutter</name>
+  <version>0.1.3</version>
+</idea-plugin>
+''');
+        writeFileCreatingDirectories(
+            fs.path.join(_kPluginsPath, 'flutter-intellij.jar'),
+            new ZipEncoder().encode(flutterJarArchive));
 
         final List<ValidationMessage> messages = <ValidationMessage>[];
+        plugins.validatePackage(messages, <String>['Dart'], 'Dart');
         plugins.validatePackage(messages,
             <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter',
             minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
-        plugins.validatePackage(messages, <String>['Dart'], 'Dart');
 
         ValidationMessage message = messages
             .firstWhere((ValidationMessage m) => m.message.startsWith('Dart '));
@@ -31,18 +67,18 @@
             (ValidationMessage m) => m.message.startsWith('Flutter '));
         expect(message.message, contains('Flutter plugin version 0.1.3'));
         expect(message.message, contains('recommended minimum version'));
+      }, overrides: <Type, Generator>{
+        FileSystem: () => fs,
       });
 
       testUsingContext('not found', () async {
-        final String pluginsPath =
-            fs.path.join('test', 'data', 'intellij', 'no_plugins');
-        final IntelliJPlugins plugins = new IntelliJPlugins(pluginsPath);
+        final IntelliJPlugins plugins = new IntelliJPlugins(_kPluginsPath);
 
         final List<ValidationMessage> messages = <ValidationMessage>[];
+        plugins.validatePackage(messages, <String>['Dart'], 'Dart');
         plugins.validatePackage(messages,
             <String>['flutter-intellij', 'flutter-intellij.jar'], 'Flutter',
             minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
-        plugins.validatePackage(messages, <String>['Dart'], 'Dart');
 
         ValidationMessage message = messages
             .firstWhere((ValidationMessage m) => m.message.startsWith('Dart '));
@@ -51,7 +87,20 @@
         message = messages.firstWhere(
             (ValidationMessage m) => m.message.startsWith('Flutter '));
         expect(message.message, contains('Flutter plugin not installed'));
+      }, overrides: <Type, Generator>{
+        FileSystem: () => fs,
       });
     });
   });
 }
+
+const String _kPluginsPath = '/data/intellij/plugins';
+
+Archive buildSingleFileArchive(String path, String content) {
+  final Archive archive = new Archive();
+
+  final List<int> bytes = utf8.encode(content);
+  archive.addFile(new ArchiveFile(path, bytes.length, bytes));
+
+  return archive;
+}