1*c4ef02aeSEvan Baconimport { vol } from 'memfs'; 2*c4ef02aeSEvan Bacon 3*c4ef02aeSEvan Baconimport rnFixture from '../../../prebuild/__tests__/fixtures/react-native-project'; 4*c4ef02aeSEvan Baconimport { SimulatorLogStreamer } from '../../../start/platforms/ios/simctlLogging'; 5*c4ef02aeSEvan Baconimport { DevServerManager } from '../../../start/server/DevServerManager'; 6*c4ef02aeSEvan Baconimport { getAppDeltaDirectory, installOnDeviceAsync } from '../appleDevice/installOnDeviceAsync'; 7*c4ef02aeSEvan Baconimport { launchAppAsync } from '../launchApp'; 8*c4ef02aeSEvan Bacon 9*c4ef02aeSEvan Baconjest.mock('../../../log'); 10*c4ef02aeSEvan Bacon 11*c4ef02aeSEvan Baconjest.mock('../../../utils/env', () => ({ 12*c4ef02aeSEvan Bacon env: { 13*c4ef02aeSEvan Bacon CI: false, 14*c4ef02aeSEvan Bacon }, 15*c4ef02aeSEvan Bacon})); 16*c4ef02aeSEvan Bacon 17*c4ef02aeSEvan Baconjest.mock('../../../start/platforms/ios/AppleDeviceManager', () => ({ 18*c4ef02aeSEvan Bacon AppleDeviceManager: { 19*c4ef02aeSEvan Bacon resolveAsync: async () => ({ 20*c4ef02aeSEvan Bacon installAppAsync: jest.fn(), 21*c4ef02aeSEvan Bacon device: {}, 22*c4ef02aeSEvan Bacon }), 23*c4ef02aeSEvan Bacon }, 24*c4ef02aeSEvan Bacon})); 25*c4ef02aeSEvan Bacon 26*c4ef02aeSEvan Baconjest.mock('../../../start/platforms/ios/simctlLogging', () => ({ 27*c4ef02aeSEvan Bacon SimulatorLogStreamer: { 28*c4ef02aeSEvan Bacon getStreamer: jest.fn(() => ({ attachAsync: jest.fn() })), 29*c4ef02aeSEvan Bacon }, 30*c4ef02aeSEvan Bacon})); 31*c4ef02aeSEvan Bacon 32*c4ef02aeSEvan Baconjest.mock('../appleDevice/installOnDeviceAsync', () => ({ 33*c4ef02aeSEvan Bacon getAppDeltaDirectory: jest.fn(() => '/mock_delta'), 34*c4ef02aeSEvan Bacon installOnDeviceAsync: jest.fn(async () => ''), 35*c4ef02aeSEvan Bacon})); 36*c4ef02aeSEvan Bacon 37*c4ef02aeSEvan Baconconst mockPlist = `<?xml version="1.0" encoding="UTF-8"?> 38*c4ef02aeSEvan Bacon<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 39*c4ef02aeSEvan Bacon<plist version="1.0"> 40*c4ef02aeSEvan Bacon <dict> 41*c4ef02aeSEvan Bacon <key>CFBundleIdentifier</key> 42*c4ef02aeSEvan Bacon <string>dev.bacon.myapp</string> 43*c4ef02aeSEvan Bacon </dict> 44*c4ef02aeSEvan Bacon</plist>`; 45*c4ef02aeSEvan Bacon 46*c4ef02aeSEvan Baconfunction getMockDevServerManager() { 47*c4ef02aeSEvan Bacon return { 48*c4ef02aeSEvan Bacon startAsync: jest.fn(), 49*c4ef02aeSEvan Bacon getDefaultDevServer: jest.fn(() => ({ 50*c4ef02aeSEvan Bacon openCustomRuntimeAsync: jest.fn(), 51*c4ef02aeSEvan Bacon })), 52*c4ef02aeSEvan Bacon } as unknown as DevServerManager; 53*c4ef02aeSEvan Bacon} 54*c4ef02aeSEvan Bacon 55*c4ef02aeSEvan Bacondescribe(launchAppAsync, () => { 56*c4ef02aeSEvan Bacon afterEach(() => vol.reset()); 57*c4ef02aeSEvan Bacon 58*c4ef02aeSEvan Bacon it(`runs ios on simulator`, async () => { 59*c4ef02aeSEvan Bacon vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/'); 60*c4ef02aeSEvan Bacon 61*c4ef02aeSEvan Bacon await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), { 62*c4ef02aeSEvan Bacon device: { 63*c4ef02aeSEvan Bacon name: 'simulator', 64*c4ef02aeSEvan Bacon udid: '123', 65*c4ef02aeSEvan Bacon }, 66*c4ef02aeSEvan Bacon isSimulator: true, 67*c4ef02aeSEvan Bacon shouldStartBundler: true, 68*c4ef02aeSEvan Bacon }); 69*c4ef02aeSEvan Bacon 70*c4ef02aeSEvan Bacon expect(SimulatorLogStreamer.getStreamer).toBeCalled(); 71*c4ef02aeSEvan Bacon 72*c4ef02aeSEvan Bacon expect(installOnDeviceAsync).not.toBeCalled(); 73*c4ef02aeSEvan Bacon expect(getAppDeltaDirectory).not.toBeCalled(); 74*c4ef02aeSEvan Bacon }); 75*c4ef02aeSEvan Bacon it(`does not streams logs on simulator if the dev server is skipped`, async () => { 76*c4ef02aeSEvan Bacon vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/'); 77*c4ef02aeSEvan Bacon await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), { 78*c4ef02aeSEvan Bacon device: { 79*c4ef02aeSEvan Bacon name: 'simulator', 80*c4ef02aeSEvan Bacon udid: '123', 81*c4ef02aeSEvan Bacon }, 82*c4ef02aeSEvan Bacon isSimulator: true, 83*c4ef02aeSEvan Bacon shouldStartBundler: false, 84*c4ef02aeSEvan Bacon }); 85*c4ef02aeSEvan Bacon 86*c4ef02aeSEvan Bacon expect(SimulatorLogStreamer.getStreamer).not.toBeCalled(); 87*c4ef02aeSEvan Bacon expect(installOnDeviceAsync).not.toBeCalled(); 88*c4ef02aeSEvan Bacon expect(getAppDeltaDirectory).not.toBeCalled(); 89*c4ef02aeSEvan Bacon }); 90*c4ef02aeSEvan Bacon 91*c4ef02aeSEvan Bacon it(`runs ios on device`, async () => { 92*c4ef02aeSEvan Bacon vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/'); 93*c4ef02aeSEvan Bacon 94*c4ef02aeSEvan Bacon await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), { 95*c4ef02aeSEvan Bacon device: { 96*c4ef02aeSEvan Bacon name: "Evan's phone", 97*c4ef02aeSEvan Bacon udid: '00008101-001964A22629003A', 98*c4ef02aeSEvan Bacon }, 99*c4ef02aeSEvan Bacon isSimulator: false, 100*c4ef02aeSEvan Bacon shouldStartBundler: true, 101*c4ef02aeSEvan Bacon }); 102*c4ef02aeSEvan Bacon 103*c4ef02aeSEvan Bacon expect(SimulatorLogStreamer.getStreamer).not.toBeCalled(); 104*c4ef02aeSEvan Bacon 105*c4ef02aeSEvan Bacon expect(installOnDeviceAsync).toBeCalled(); 106*c4ef02aeSEvan Bacon expect(getAppDeltaDirectory).toBeCalled(); 107*c4ef02aeSEvan Bacon }); 108*c4ef02aeSEvan Bacon}); 109