// Copyright 2013 The Flutter 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/test_command.dart'; import 'package:test/test.dart'; import 'util.dart'; void main() { group('$TestCommand', () { CommandRunner runner; final RecordingProcessRunner processRunner = RecordingProcessRunner(); setUp(() { initializeFakePackages(); final TestCommand command = TestCommand(mockPackagesDir, mockFileSystem, processRunner: processRunner); runner = CommandRunner('test_test', 'Test for $TestCommand'); runner.addCommand(command); }); tearDown(() { cleanupPackages(); processRunner.recordedCalls.clear(); }); test('runs flutter test on each plugin', () async { final Directory plugin1Dir = createFakePlugin('plugin1', withExtraFiles: >[ ['test', 'empty_test.dart'], ]); final Directory plugin2Dir = createFakePlugin('plugin2', withExtraFiles: >[ ['test', 'empty_test.dart'], ]); await runner.run(['test']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( 'flutter', const ['test', '--color'], plugin1Dir.path), ProcessCall( 'flutter', const ['test', '--color'], plugin2Dir.path), ]), ); cleanupPackages(); }); test('skips testing plugins without test directory', () async { createFakePlugin('plugin1'); final Directory plugin2Dir = createFakePlugin('plugin2', withExtraFiles: >[ ['test', 'empty_test.dart'], ]); await runner.run(['test']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( 'flutter', const ['test', '--color'], plugin2Dir.path), ]), ); cleanupPackages(); }); test('runs pub run test on non-Flutter packages', () async { final Directory plugin1Dir = createFakePlugin('plugin1', isFlutter: true, withExtraFiles: >[ ['test', 'empty_test.dart'], ]); final Directory plugin2Dir = createFakePlugin('plugin2', isFlutter: false, withExtraFiles: >[ ['test', 'empty_test.dart'], ]); await runner.run(['test', '--enable-experiment=exp1']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( 'flutter', const ['test', '--color', '--enable-experiment=exp1'], plugin1Dir.path), ProcessCall('pub', const ['get'], plugin2Dir.path), ProcessCall( 'pub', const ['run', '--enable-experiment=exp1', 'test'], plugin2Dir.path), ]), ); cleanupPackages(); }); test('runs on Chrome for web plugins', () async { final Directory pluginDir = createFakePlugin( 'plugin', withExtraFiles: >[ ['test', 'empty_test.dart'], ], isFlutter: true, isWebPlugin: true, ); await runner.run(['test']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( 'flutter', const ['test', '--color', '--platform=chrome'], pluginDir.path), ]), ); }); test('enable-experiment flag', () async { final Directory plugin1Dir = createFakePlugin('plugin1', isFlutter: true, withExtraFiles: >[ ['test', 'empty_test.dart'], ]); final Directory plugin2Dir = createFakePlugin('plugin2', isFlutter: false, withExtraFiles: >[ ['test', 'empty_test.dart'], ]); await runner.run(['test', '--enable-experiment=exp1']); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( 'flutter', const ['test', '--color', '--enable-experiment=exp1'], plugin1Dir.path), ProcessCall('pub', const ['get'], plugin2Dir.path), ProcessCall( 'pub', const ['run', '--enable-experiment=exp1', 'test'], plugin2Dir.path), ]), ); cleanupPackages(); }); }); }