// Copyright 2019 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:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:flutter_plugin_tools/src/analyze_command.dart'; import 'package:flutter_plugin_tools/src/common.dart'; import 'package:test/test.dart'; import 'mocks.dart'; import 'util.dart'; void main() { RecordingProcessRunner processRunner; CommandRunner runner; setUp(() { initializeFakePackages(); processRunner = RecordingProcessRunner(); final AnalyzeCommand analyzeCommand = AnalyzeCommand( mockPackagesDir, mockFileSystem, processRunner: processRunner); runner = CommandRunner('analyze_command', 'Test for analyze_command'); runner.addCommand(analyzeCommand); }); tearDown(() { mockPackagesDir.deleteSync(recursive: true); }); test('analyzes all packages', () async { final Directory plugin1Dir = await createFakePlugin('a'); final Directory plugin2Dir = await createFakePlugin('b'); final MockProcess mockProcess = MockProcess(); mockProcess.exitCodeCompleter.complete(0); processRunner.processToReturn = mockProcess; await runner.run(['analyze']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall('pub', ['global', 'activate', 'tuneup'], mockPackagesDir.path), ProcessCall('flutter', ['packages', 'get'], plugin1Dir.path), ProcessCall('flutter', ['packages', 'get'], plugin2Dir.path), ProcessCall('pub', ['global', 'run', 'tuneup', 'check'], plugin1Dir.path), ProcessCall('pub', ['global', 'run', 'tuneup', 'check'], plugin2Dir.path), ])); }); group('verifies analysis settings', () { test('fails analysis_options.yaml', () async { await createFakePlugin('foo', withExtraFiles: >[ ['analysis_options.yaml'] ]); await expectLater(() => runner.run(['analyze']), throwsA(const TypeMatcher())); }); test('fails .analysis_options', () async { await createFakePlugin('foo', withExtraFiles: >[ ['.analysis_options'] ]); await expectLater(() => runner.run(['analyze']), throwsA(const TypeMatcher())); }); test('takes an allow list', () async { final Directory pluginDir = await createFakePlugin('foo', withExtraFiles: >[ ['analysis_options.yaml'] ]); final MockProcess mockProcess = MockProcess(); mockProcess.exitCodeCompleter.complete(0); processRunner.processToReturn = mockProcess; await runner.run(['analyze', '--custom-analysis', 'foo']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall('pub', ['global', 'activate', 'tuneup'], mockPackagesDir.path), ProcessCall('flutter', ['packages', 'get'], pluginDir.path), ProcessCall('pub', ['global', 'run', 'tuneup', 'check'], pluginDir.path), ])); }); }); }