@@ -2,6 +2,11 @@ import { Yok } from "../../lib/common/yok";
22import { assert } from "chai" ;
33import { AddPlatformService } from "../../lib/services/platform/add-platform-service" ;
44import { MainController } from "../../lib/controllers/main-controller" ;
5+ import { RunOnDeviceEvents } from "../../lib/constants" ;
6+ import { RunOnDevicesEmitter } from "../../lib/run-on-devices-emitter" ;
7+ import { WorkflowDataService } from "../../lib/services/workflow/workflow-data-service" ;
8+ import { RunOnDevicesDataService } from "../../lib/services/run-on-devices-data-service" ;
9+ import { PlatformWatcherService } from "../../lib/services/platform/platform-watcher-service" ;
510
611const deviceMap : IDictionary < any > = {
712 myiOSDevice : {
@@ -22,7 +27,15 @@ function createTestInjector(): IInjector {
2227 const injector = new Yok ( ) ;
2328
2429 injector . register ( "devicesService" , ( {
25- getDeviceByIdentifier : ( identifier : string ) => { return deviceMap [ identifier ] ; }
30+ on : ( ) => ( { } ) ,
31+ getDeviceByIdentifier : ( identifier : string ) => { return deviceMap [ identifier ] ; } ,
32+ getPlatformsFromDeviceDescriptors : ( deviceDescriptors : ILiveSyncDeviceInfo [ ] ) => {
33+ return _ ( deviceDescriptors )
34+ . map ( device => deviceMap [ device . identifier ] )
35+ . map ( device => device . deviceInfo . platform )
36+ . uniq ( )
37+ . value ( ) ;
38+ }
2639 } ) ) ;
2740 injector . register ( "deviceWorkflowService" , ( { } ) ) ;
2841 injector . register ( "errors" , ( {
@@ -40,7 +53,7 @@ function createTestInjector(): IInjector {
4053 injector . register ( "platformWatcherService" , ( {
4154 on : ( ) => ( { } ) ,
4255 emit : ( ) => ( { } ) ,
43- startWatcher : ( ) => ( { } )
56+ startWatchers : ( ) => ( { } )
4457 } ) ) ;
4558 injector . register ( "mainController" , MainController ) ;
4659 injector . register ( "pluginsService" , ( { } ) ) ;
@@ -50,11 +63,23 @@ function createTestInjector(): IInjector {
5063 } )
5164 } ) ) ;
5265 injector . register ( "buildArtefactsService" , ( { } ) ) ;
66+ injector . register ( "addPlatformService" , { } ) ;
5367 injector . register ( "buildPlatformService" , ( { } ) ) ;
54- injector . register ( "platformAddService" , ( { } ) ) ;
55- injector . register ( "platformService" , ( { } ) ) ;
56- injector . register ( "projectChangesService" , ( { } ) ) ;
68+ injector . register ( "preparePlatformService" , ( { } ) ) ;
69+ injector . register ( "deviceInstallAppService" , { } ) ;
70+ injector . register ( "deviceRefreshAppService" , { } ) ;
71+ injector . register ( "deviceDebugAppService" , { } ) ;
5772 injector . register ( "fs" , ( { } ) ) ;
73+ injector . register ( "hooksService" , {
74+ executeAfterHooks : ( ) => ( { } )
75+ } ) ;
76+ injector . register ( "projectChangesService" , ( { } ) ) ;
77+ injector . register ( "runOnDevicesController" , {
78+ on : ( ) => ( { } )
79+ } ) ;
80+ injector . register ( "runOnDevicesDataService" , RunOnDevicesDataService ) ;
81+ injector . register ( "runOnDevicesEmitter" , RunOnDevicesEmitter ) ;
82+ injector . register ( "workflowDataService" , WorkflowDataService ) ;
5883
5984 return injector ;
6085}
@@ -73,7 +98,7 @@ const liveSyncInfo = {
7398} ;
7499
75100describe ( "MainController" , ( ) => {
76- describe ( "start " , ( ) => {
101+ describe ( "runOnDevices " , ( ) => {
77102 describe ( "when the run on device is called for second time for the same projectDir" , ( ) => {
78103 it ( "should run only for new devies (for which the initial sync is still not executed)" , async ( ) => {
79104 return ;
@@ -87,15 +112,14 @@ describe("MainController", () => {
87112 const injector = createTestInjector ( ) ;
88113
89114 let isAddPlatformIfNeededCalled = false ;
90- const platformAddService : AddPlatformService = injector . resolve ( "platformAddService " ) ;
91- platformAddService . addPlatformIfNeeded = async ( ) => { isAddPlatformIfNeededCalled = true ; } ;
115+ const addPlatformService : AddPlatformService = injector . resolve ( "addPlatformService " ) ;
116+ addPlatformService . addPlatformIfNeeded = async ( ) => { isAddPlatformIfNeededCalled = true ; } ;
92117
93118 let isStartWatcherCalled = false ;
94- const platformWatcherService : IPlatformWatcherService = injector . resolve ( "platformWatcherService" ) ;
95- ( < any > platformWatcherService ) . startWatcher = async ( ) => {
119+ const platformWatcherService : PlatformWatcherService = injector . resolve ( "platformWatcherService" ) ;
120+ platformWatcherService . startWatchers = async ( ) => {
96121 assert . isTrue ( isAddPlatformIfNeededCalled ) ;
97122 isStartWatcherCalled = true ;
98- return true ;
99123 } ;
100124
101125 const mainController : MainController = injector . resolve ( "mainController" ) ;
@@ -127,13 +151,13 @@ describe("MainController", () => {
127151 const injector = createTestInjector ( ) ;
128152
129153 const actualAddedPlatforms : IPlatformData [ ] = [ ] ;
130- const platformAddService : AddPlatformService = injector . resolve ( "platformAddService " ) ;
131- platformAddService . addPlatformIfNeeded = async ( platformData : IPlatformData ) => {
154+ const addPlatformService : AddPlatformService = injector . resolve ( "addPlatformService " ) ;
155+ addPlatformService . addPlatformIfNeeded = async ( platformData : IPlatformData ) => {
132156 actualAddedPlatforms . push ( platformData ) ;
133157 } ;
134158
135- const mainController = injector . resolve ( "mainController" ) ;
136- await mainController . runPlatform ( projectDir , testCase . connectedDevices , liveSyncInfo ) ;
159+ const mainController : MainController = injector . resolve ( "mainController" ) ;
160+ await mainController . runOnDevices ( projectDir , testCase . connectedDevices , liveSyncInfo ) ;
137161
138162 assert . deepEqual ( actualAddedPlatforms . map ( pData => pData . platformNameLowerCase ) , testCase . expectedAddedPlatforms ) ;
139163 } ) ;
@@ -198,4 +222,58 @@ describe("MainController", () => {
198222 } ) ;
199223 } ) ;
200224 } ) ;
225+ describe ( "stopRunOnDevices" , ( ) => {
226+ const testCases = [
227+ {
228+ name : "stops LiveSync operation for all devices and emits liveSyncStopped for all of them when stopLiveSync is called without deviceIdentifiers" ,
229+ currentDeviceIdentifiers : [ "device1" , "device2" , "device3" ] ,
230+ expectedDeviceIdentifiers : [ "device1" , "device2" , "device3" ]
231+ } ,
232+ {
233+ name : "stops LiveSync operation for all devices and emits liveSyncStopped for all of them when stopLiveSync is called without deviceIdentifiers (when a single device is attached)" ,
234+ currentDeviceIdentifiers : [ "device1" ] ,
235+ expectedDeviceIdentifiers : [ "device1" ]
236+ } ,
237+ {
238+ name : "stops LiveSync operation for specified devices and emits liveSyncStopped for each of them (when a single device is attached)" ,
239+ currentDeviceIdentifiers : [ "device1" ] ,
240+ expectedDeviceIdentifiers : [ "device1" ] ,
241+ deviceIdentifiersToBeStopped : [ "device1" ]
242+ } ,
243+ {
244+ name : "stops LiveSync operation for specified devices and emits liveSyncStopped for each of them" ,
245+ currentDeviceIdentifiers : [ "device1" , "device2" , "device3" ] ,
246+ expectedDeviceIdentifiers : [ "device1" , "device3" ] ,
247+ deviceIdentifiersToBeStopped : [ "device1" , "device3" ]
248+ } ,
249+ {
250+ name : "does not raise liveSyncStopped event for device, which is not currently being liveSynced" ,
251+ currentDeviceIdentifiers : [ "device1" , "device2" , "device3" ] ,
252+ expectedDeviceIdentifiers : [ "device1" ] ,
253+ deviceIdentifiersToBeStopped : [ "device1" , "device4" ]
254+ }
255+ ] ;
256+
257+ for ( const testCase of testCases ) {
258+ it ( testCase . name , async ( ) => {
259+ const testInjector = createTestInjector ( ) ;
260+ const mainController = testInjector . resolve ( "mainController" ) ;
261+
262+ const runOnDevicesDataService : RunOnDevicesDataService = testInjector . resolve ( "runOnDevicesDataService" ) ;
263+ runOnDevicesDataService . persistData ( projectDir , testCase . currentDeviceIdentifiers . map ( identifier => ( < any > { identifier } ) ) ) ;
264+
265+ const emittedDeviceIdentifiersForLiveSyncStoppedEvent : string [ ] = [ ] ;
266+
267+ const runOnDevicesEmitter = testInjector . resolve ( "runOnDevicesEmitter" ) ;
268+ runOnDevicesEmitter . on ( RunOnDeviceEvents . runOnDeviceStopped , ( data : any ) => {
269+ assert . equal ( data . projectDir , projectDir ) ;
270+ emittedDeviceIdentifiersForLiveSyncStoppedEvent . push ( data . deviceIdentifier ) ;
271+ } ) ;
272+
273+ await mainController . stopRunOnDevices ( projectDir , testCase . deviceIdentifiersToBeStopped ) ;
274+
275+ assert . deepEqual ( emittedDeviceIdentifiersForLiveSyncStoppedEvent , testCase . expectedDeviceIdentifiers ) ;
276+ } ) ;
277+ }
278+ } ) ;
201279} ) ;
0 commit comments