| // Copyright 2014 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 'dart:async'; |
| |
| import 'package:file/memory.dart'; |
| import 'package:flutter_tools/src/base/platform.dart'; |
| import 'package:flutter_tools/src/cache.dart'; |
| import 'package:flutter_tools/src/debug_adapters/flutter_adapter_args.dart'; |
| import 'package:flutter_tools/src/globals.dart' as globals show platform; |
| import 'package:test/test.dart'; |
| |
| import 'mocks.dart'; |
| |
| void main() { |
| // Use the real platform as a base so that Windows bots test paths. |
| final FakePlatform platform = FakePlatform.fromPlatform(globals.platform); |
| final FileSystemStyle fsStyle = platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix; |
| |
| group('flutter test adapter', () { |
| final String expectedFlutterExecutable = platform.isWindows |
| ? r'C:\fake\flutter\bin\flutter.bat' |
| : '/fake/flutter/bin/flutter'; |
| |
| setUpAll(() { |
| Cache.flutterRoot = platform.isWindows |
| ? r'C:\fake\flutter' |
| : '/fake/flutter'; |
| }); |
| |
| test('includes toolArgs', () async { |
| final MockFlutterTestDebugAdapter adapter = MockFlutterTestDebugAdapter( |
| fileSystem: MemoryFileSystem.test(style: fsStyle), |
| platform: platform, |
| ); |
| final Completer<void> responseCompleter = Completer<void>(); |
| final MockRequest request = MockRequest(); |
| final FlutterLaunchRequestArguments args = FlutterLaunchRequestArguments( |
| cwd: '/project', |
| program: 'foo.dart', |
| toolArgs: <String>['tool_arg'], |
| noDebug: true, |
| ); |
| |
| await adapter.configurationDoneRequest(request, null, () {}); |
| await adapter.launchRequest(request, args, responseCompleter.complete); |
| await responseCompleter.future; |
| |
| expect(adapter.executable, equals(expectedFlutterExecutable)); |
| expect(adapter.processArgs, contains('tool_arg')); |
| }); |
| |
| test('includes env variables', () async { |
| final MockFlutterTestDebugAdapter adapter = MockFlutterTestDebugAdapter( |
| fileSystem: MemoryFileSystem.test(style: fsStyle), |
| platform: platform, |
| ); |
| final Completer<void> responseCompleter = Completer<void>(); |
| final MockRequest request = MockRequest(); |
| final FlutterLaunchRequestArguments args = FlutterLaunchRequestArguments( |
| cwd: '/project', |
| program: 'foo.dart', |
| env: <String, String>{ |
| 'MY_TEST_ENV': 'MY_TEST_VALUE', |
| }, |
| ); |
| |
| await adapter.configurationDoneRequest(request, null, () {}); |
| await adapter.launchRequest(request, args, responseCompleter.complete); |
| await responseCompleter.future; |
| |
| expect(adapter.env!['MY_TEST_ENV'], 'MY_TEST_VALUE'); |
| }); |
| |
| group('includes customTool', () { |
| test('with no args replaced', () async { |
| final MockFlutterTestDebugAdapter adapter = MockFlutterTestDebugAdapter( |
| fileSystem: MemoryFileSystem.test(style: fsStyle), |
| platform: platform, |
| ); |
| final Completer<void> responseCompleter = Completer<void>(); |
| final MockRequest request = MockRequest(); |
| final FlutterLaunchRequestArguments args = FlutterLaunchRequestArguments( |
| cwd: '/project', |
| program: 'foo.dart', |
| customTool: '/custom/flutter', |
| noDebug: true, |
| ); |
| |
| await adapter.configurationDoneRequest(request, null, () {}); |
| await adapter.launchRequest(request, args, responseCompleter.complete); |
| await responseCompleter.future; |
| |
| expect(adapter.executable, equals('/custom/flutter')); |
| // args should be in-tact |
| expect(adapter.processArgs, contains('--machine')); |
| }); |
| |
| test('with all args replaced', () async { |
| final MockFlutterTestDebugAdapter adapter = MockFlutterTestDebugAdapter( |
| fileSystem: MemoryFileSystem.test(style: fsStyle), |
| platform: platform, |
| ); |
| final Completer<void> responseCompleter = Completer<void>(); |
| final MockRequest request = MockRequest(); |
| final FlutterLaunchRequestArguments args = FlutterLaunchRequestArguments( |
| cwd: '/project', |
| program: 'foo.dart', |
| customTool: '/custom/flutter', |
| customToolReplacesArgs: 9999, // replaces all built-in args |
| noDebug: true, |
| toolArgs: <String>['tool_args'], // should still be in args |
| ); |
| |
| await adapter.configurationDoneRequest(request, null, () {}); |
| await adapter.launchRequest(request, args, responseCompleter.complete); |
| await responseCompleter.future; |
| |
| expect(adapter.executable, equals('/custom/flutter')); |
| // normal built-in args are replaced by customToolReplacesArgs, but |
| // user-provided toolArgs are not. |
| expect(adapter.processArgs, isNot(contains('--machine'))); |
| expect(adapter.processArgs, contains('tool_args')); |
| }); |
| }); |
| }); |
| } |