@@ -26,6 +26,7 @@ import 'package:flutter_tools/src/base/platform.dart';
26
26
import 'package:flutter_tools/src/base/user_messages.dart' ;
27
27
import 'package:flutter_tools/src/build_info.dart' ;
28
28
import 'package:flutter_tools/src/cache.dart' ;
29
+ import 'package:flutter_tools/src/commands/daemon.dart' ;
29
30
import 'package:flutter_tools/src/commands/run.dart' ;
30
31
import 'package:flutter_tools/src/devfs.dart' ;
31
32
import 'package:flutter_tools/src/device.dart' ;
@@ -405,6 +406,67 @@ void main() {
405
406
ProcessManager : () => FakeProcessManager .any (),
406
407
Usage : () => usage,
407
408
});
409
+
410
+ group ('--machine' , () {
411
+ testUsingContext ('enables multidex by default' , () async {
412
+ final DaemonCapturingRunCommand command = DaemonCapturingRunCommand ();
413
+ final FakeDevice device = FakeDevice ();
414
+ mockDeviceManager
415
+ ..devices = < Device > [device]
416
+ ..targetDevices = < Device > [device];
417
+
418
+ await expectLater (
419
+ () => createTestCommandRunner (command).run (< String > [
420
+ 'run' ,
421
+ '--no-pub' ,
422
+ '--machine' ,
423
+ '-d' ,
424
+ device.id,
425
+ ]),
426
+ throwsToolExit (),
427
+ );
428
+ expect (command.appDomain.multidexEnabled, isTrue);
429
+ }, overrides: < Type , Generator > {
430
+ Artifacts : () => artifacts,
431
+ Cache : () => Cache .test (processManager: FakeProcessManager .any ()),
432
+ DeviceManager : () => mockDeviceManager,
433
+ FileSystem : () => fs,
434
+ ProcessManager : () => FakeProcessManager .any (),
435
+ Usage : () => usage,
436
+ Stdio : () => FakeStdio (),
437
+ Logger : () => AppRunLogger (parent: BufferLogger .test ()),
438
+ });
439
+
440
+ testUsingContext ('can disable multidex with --no-multidex' , () async {
441
+ final DaemonCapturingRunCommand command = DaemonCapturingRunCommand ();
442
+ final FakeDevice device = FakeDevice ();
443
+ mockDeviceManager
444
+ ..devices = < Device > [device]
445
+ ..targetDevices = < Device > [device];
446
+
447
+ await expectLater (
448
+ () => createTestCommandRunner (command).run (< String > [
449
+ 'run' ,
450
+ '--no-pub' ,
451
+ '--no-multidex' ,
452
+ '--machine' ,
453
+ '-d' ,
454
+ device.id,
455
+ ]),
456
+ throwsToolExit (),
457
+ );
458
+ expect (command.appDomain.multidexEnabled, isFalse);
459
+ }, overrides: < Type , Generator > {
460
+ Artifacts : () => artifacts,
461
+ Cache : () => Cache .test (processManager: FakeProcessManager .any ()),
462
+ DeviceManager : () => mockDeviceManager,
463
+ FileSystem : () => fs,
464
+ ProcessManager : () => FakeProcessManager .any (),
465
+ Usage : () => usage,
466
+ Stdio : () => FakeStdio (),
467
+ Logger : () => AppRunLogger (parent: BufferLogger .test ()),
468
+ });
469
+ });
408
470
});
409
471
410
472
group ('Fatal Logs' , () {
@@ -687,6 +749,13 @@ class FakeDeviceManager extends Fake implements DeviceManager {
687
749
return targetDevices;
688
750
}
689
751
752
+ @override
753
+ List <DeviceDiscovery > get deviceDiscoverers {
754
+ final FakePollingDeviceDiscovery discoverer = FakePollingDeviceDiscovery ();
755
+ devices.forEach (discoverer.addDevice);
756
+ return < DeviceDiscovery > [discoverer];
757
+ }
758
+
690
759
@override
691
760
Future <List <Device >> getAllConnectedDevices () async => devices;
692
761
}
@@ -739,6 +808,9 @@ class FakeDevice extends Fake implements Device {
739
808
@override
740
809
bool supportsHotReload = false ;
741
810
811
+ @override
812
+ bool get supportsHotRestart => true ;
813
+
742
814
@override
743
815
bool get supportsFastStart => false ;
744
816
@@ -858,3 +930,44 @@ class FakeResidentRunner extends Fake implements ResidentRunner {
858
930
return 0 ;
859
931
}
860
932
}
933
+
934
+ class DaemonCapturingRunCommand extends RunCommand {
935
+ /*late*/ Daemon daemon;
936
+ /*late*/ CapturingAppDomain appDomain;
937
+
938
+ @override
939
+ Daemon createMachineDaemon () {
940
+ daemon = super .createMachineDaemon ();
941
+ appDomain = daemon.appDomain = CapturingAppDomain (daemon);
942
+ daemon.registerDomain (appDomain);
943
+ return daemon;
944
+ }
945
+ }
946
+
947
+ class CapturingAppDomain extends AppDomain {
948
+ CapturingAppDomain (Daemon daemon) : super (daemon);
949
+
950
+ bool /*?*/ multidexEnabled;
951
+
952
+ @override
953
+ Future <AppInstance > startApp (
954
+ Device device,
955
+ String projectDirectory,
956
+ String target,
957
+ String route,
958
+ DebuggingOptions options,
959
+ bool enableHotReload, {
960
+ File applicationBinary,
961
+ @required bool trackWidgetCreation,
962
+ String projectRootPath,
963
+ String packagesFilePath,
964
+ String dillOutputPath,
965
+ bool ipv6 = false ,
966
+ bool multidexEnabled = false ,
967
+ String isolateFilter,
968
+ bool machine = true ,
969
+ }) async {
970
+ this .multidexEnabled = multidexEnabled;
971
+ throwToolExit ('' );
972
+ }
973
+ }
0 commit comments