Ian Hickson | 449f4a6 | 2019-11-27 15:04:02 -0800 | [diff] [blame] | 1 | // Copyright 2014 The Flutter Authors. All rights reserved. |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | import 'dart:async'; |
| 6 | |
| 7 | import 'package:file/file.dart'; |
| 8 | import 'package:file/memory.dart'; |
Jonah Williams | ee7a37f | 2020-01-06 11:04:20 -0800 | [diff] [blame] | 9 | import 'package:platform/platform.dart'; |
| 10 | import 'package:mockito/mockito.dart'; |
| 11 | import 'package:process/process.dart'; |
| 12 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 13 | import 'package:flutter_tools/src/base/common.dart'; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 14 | import 'package:flutter_tools/src/base/io.dart'; |
Mikkel Nygaard Ravn | c2e1bc0 | 2018-02-15 22:55:36 +0100 | [diff] [blame] | 15 | import 'package:flutter_tools/src/cache.dart'; |
Zachary Anderson | 390ed1c | 2020-02-03 14:33:03 -0800 | [diff] [blame] | 16 | import 'package:flutter_tools/src/globals.dart' as globals; |
stuartmorgan | 81c38b2 | 2019-05-24 22:51:02 -0400 | [diff] [blame] | 17 | import 'package:flutter_tools/src/ios/xcodeproj.dart'; |
| 18 | import 'package:flutter_tools/src/macos/cocoapods.dart'; |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 19 | import 'package:flutter_tools/src/plugins.dart'; |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 20 | import 'package:flutter_tools/src/project.dart'; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 21 | |
Ian Hickson | d919e69 | 2019-07-13 11:51:44 -0700 | [diff] [blame] | 22 | import '../../src/common.dart'; |
| 23 | import '../../src/context.dart'; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 24 | |
Alexandre Ardhuin | a07d371 | 2018-09-14 21:06:19 +0200 | [diff] [blame] | 25 | typedef InvokeProcess = Future<ProcessResult> Function(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 26 | |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 27 | void main() { |
| 28 | FileSystem fs; |
| 29 | ProcessManager mockProcessManager; |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 30 | MockXcodeProjectInterpreter mockXcodeProjectInterpreter; |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 31 | FlutterProject projectUnderTest; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 32 | CocoaPods cocoaPodsUnderTest; |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 33 | InvokeProcess resultOfPodVersion; |
| 34 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 35 | void pretendPodVersionFails() { |
| 36 | resultOfPodVersion = () async => exitsWithError(); |
| 37 | } |
| 38 | |
| 39 | void pretendPodVersionIs(String versionText) { |
| 40 | resultOfPodVersion = () async => exitsHappy(versionText); |
| 41 | } |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 42 | |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 43 | void podsIsInHomeDir() { |
Zachary Anderson | 390ed1c | 2020-02-03 14:33:03 -0800 | [diff] [blame] | 44 | fs.directory(fs.path.join( |
| 45 | globals.fsUtils.homeDirPath, |
| 46 | '.cocoapods', |
| 47 | 'repos', |
| 48 | 'master', |
| 49 | )).createSync(recursive: true); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 50 | } |
| 51 | |
| 52 | String podsIsInCustomDir({String cocoapodsReposDir}) { |
Zachary Anderson | 390ed1c | 2020-02-03 14:33:03 -0800 | [diff] [blame] | 53 | cocoapodsReposDir ??= fs.path.join( |
| 54 | globals.fsUtils.homeDirPath, |
| 55 | 'cache', |
| 56 | 'cocoapods', |
| 57 | 'repos', |
| 58 | ); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 59 | fs.directory(fs.path.join(cocoapodsReposDir, 'master')).createSync(recursive: true); |
| 60 | return cocoapodsReposDir; |
| 61 | } |
| 62 | |
Mikkel Nygaard Ravn | b280074 | 2018-08-02 14:12:25 +0200 | [diff] [blame] | 63 | setUp(() async { |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 64 | Cache.flutterRoot = 'flutter'; |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 65 | fs = MemoryFileSystem(); |
| 66 | mockProcessManager = MockProcessManager(); |
| 67 | mockXcodeProjectInterpreter = MockXcodeProjectInterpreter(); |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 68 | projectUnderTest = FlutterProject.fromDirectory(fs.directory('project')); |
Mikkel Nygaard Ravn | a600fe7 | 2018-09-25 21:21:13 +0200 | [diff] [blame] | 69 | projectUnderTest.ios.xcodeProject.createSync(recursive: true); |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 70 | cocoaPodsUnderTest = CocoaPods(); |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 71 | pretendPodVersionIs('1.8.0'); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 72 | fs.file(fs.path.join( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 73 | Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-ios-objc', |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 74 | )) |
| 75 | ..createSync(recursive: true) |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 76 | ..writeAsStringSync('Objective-C iOS podfile template'); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 77 | fs.file(fs.path.join( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 78 | Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-ios-swift', |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 79 | )) |
| 80 | ..createSync(recursive: true) |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 81 | ..writeAsStringSync('Swift iOS podfile template'); |
| 82 | fs.file(fs.path.join( |
| 83 | Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-macos', |
| 84 | )) |
| 85 | ..createSync(recursive: true) |
| 86 | ..writeAsStringSync('macOS podfile template'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 87 | when(mockProcessManager.run( |
| 88 | <String>['pod', '--version'], |
Sam Rawlins | fba81d0 | 2018-05-31 08:24:26 -0700 | [diff] [blame] | 89 | workingDirectory: anyNamed('workingDirectory'), |
| 90 | environment: anyNamed('environment'), |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 91 | )).thenAnswer((_) => resultOfPodVersion()); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 92 | when(mockProcessManager.run( |
| 93 | <String>['pod', 'install', '--verbose'], |
| 94 | workingDirectory: 'project/ios', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 95 | environment: <String, String>{'FLUTTER_FRAMEWORK_DIR': 'engine/path', 'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 96 | )).thenAnswer((_) async => exitsHappy()); |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 97 | when(mockProcessManager.run( |
| 98 | <String>['pod', 'install', '--verbose'], |
| 99 | workingDirectory: 'project/macos', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 100 | environment: <String, String>{'FLUTTER_FRAMEWORK_DIR': 'engine/path', 'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 101 | )).thenAnswer((_) async => exitsHappy()); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 102 | }); |
| 103 | |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 104 | void pretendPodIsNotInstalled() { |
| 105 | when(mockProcessManager.run( |
| 106 | <String>['which', 'pod'], |
| 107 | workingDirectory: anyNamed('workingDirectory'), |
| 108 | environment: anyNamed('environment'), |
| 109 | )).thenAnswer((_) async => exitsWithError()); |
| 110 | } |
| 111 | |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 112 | void pretendPodIsBroken() { |
| 113 | // it is present |
| 114 | when(mockProcessManager.run( |
| 115 | <String>['which', 'pod'], |
| 116 | workingDirectory: anyNamed('workingDirectory'), |
| 117 | environment: anyNamed('environment'), |
| 118 | )).thenAnswer((_) async => exitsHappy()); |
| 119 | |
| 120 | // but is not working |
| 121 | when(mockProcessManager.run( |
| 122 | <String>['pod', '--version'], |
| 123 | workingDirectory: anyNamed('workingDirectory'), |
| 124 | environment: anyNamed('environment'), |
| 125 | )).thenAnswer((_) async => exitsWithError()); |
| 126 | } |
| 127 | |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 128 | void pretendPodIsInstalled() { |
| 129 | when(mockProcessManager.run( |
| 130 | <String>['which', 'pod'], |
| 131 | workingDirectory: anyNamed('workingDirectory'), |
| 132 | environment: anyNamed('environment'), |
| 133 | )).thenAnswer((_) async => exitsHappy()); |
| 134 | } |
| 135 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 136 | group('Evaluate installation', () { |
Christopher Fujino | 7d1fbca | 2020-03-20 13:05:19 -0700 | [diff] [blame] | 137 | setUp(() { |
| 138 | // Assume all binaries can run |
| 139 | when(mockProcessManager.canRun(any)).thenReturn(true); |
| 140 | }); |
| 141 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 142 | testUsingContext('detects not installed, if pod exec does not exist', () async { |
| 143 | pretendPodIsNotInstalled(); |
| 144 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.notInstalled); |
| 145 | }, overrides: <Type, Generator>{ |
| 146 | ProcessManager: () => mockProcessManager, |
| 147 | }); |
| 148 | |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 149 | testUsingContext('detects not installed, if pod is installed but version fails', () async { |
| 150 | pretendPodIsInstalled(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 151 | pretendPodVersionFails(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 152 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.brokenInstall); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 153 | }, overrides: <Type, Generator>{ |
| 154 | ProcessManager: () => mockProcessManager, |
| 155 | }); |
| 156 | |
| 157 | testUsingContext('detects installed', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 158 | pretendPodIsInstalled(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 159 | pretendPodVersionIs('0.0.1'); |
| 160 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, isNot(CocoaPodsStatus.notInstalled)); |
| 161 | }, overrides: <Type, Generator>{ |
| 162 | ProcessManager: () => mockProcessManager, |
| 163 | }); |
| 164 | |
KyleWong | 85ded44 | 2019-01-03 11:57:03 +0800 | [diff] [blame] | 165 | testUsingContext('detects unknown version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 166 | pretendPodIsInstalled(); |
KyleWong | 85ded44 | 2019-01-03 11:57:03 +0800 | [diff] [blame] | 167 | pretendPodVersionIs('Plugin loaded.\n1.5.3'); |
| 168 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.unknownVersion); |
| 169 | }, overrides: <Type, Generator>{ |
| 170 | ProcessManager: () => mockProcessManager, |
| 171 | }); |
| 172 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 173 | testUsingContext('detects below minimum version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 174 | pretendPodIsInstalled(); |
Jenn Magder | c8bf7ab | 2019-06-10 14:30:28 -0700 | [diff] [blame] | 175 | pretendPodVersionIs('1.5.0'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 176 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.belowMinimumVersion); |
| 177 | }, overrides: <Type, Generator>{ |
| 178 | ProcessManager: () => mockProcessManager, |
| 179 | }); |
| 180 | |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 181 | testUsingContext('detects below recommended version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 182 | pretendPodIsInstalled(); |
Jenn Magder | c8bf7ab | 2019-06-10 14:30:28 -0700 | [diff] [blame] | 183 | pretendPodVersionIs('1.6.0'); |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 184 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.belowRecommendedVersion); |
| 185 | }, overrides: <Type, Generator>{ |
| 186 | ProcessManager: () => mockProcessManager, |
| 187 | }); |
| 188 | |
| 189 | testUsingContext('detects at recommended version', () async { |
| 190 | pretendPodIsInstalled(); |
| 191 | pretendPodVersionIs('1.8.0'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 192 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.recommended); |
| 193 | }, overrides: <Type, Generator>{ |
| 194 | ProcessManager: () => mockProcessManager, |
| 195 | }); |
| 196 | |
| 197 | testUsingContext('detects above recommended version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 198 | pretendPodIsInstalled(); |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 199 | pretendPodVersionIs('1.8.1'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 200 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.recommended); |
| 201 | }, overrides: <Type, Generator>{ |
| 202 | ProcessManager: () => mockProcessManager, |
| 203 | }); |
Jenn Magder | 1eb1e22 | 2019-09-30 13:14:42 -0700 | [diff] [blame] | 204 | |
| 205 | testUsingContext('detects initialized over 1.8.0', () async { |
| 206 | pretendPodIsInstalled(); |
| 207 | pretendPodVersionIs('1.8.0'); |
| 208 | expect(await cocoaPodsUnderTest.isCocoaPodsInitialized, isTrue); |
| 209 | }, overrides: <Type, Generator>{ |
Jenn Magder | 1eb1e22 | 2019-09-30 13:14:42 -0700 | [diff] [blame] | 210 | Platform: () => FakePlatform(), |
| 211 | FileSystem: () => fs, |
Ian Hickson | 08643c4 | 2019-10-11 11:23:12 -0700 | [diff] [blame] | 212 | ProcessManager: () => mockProcessManager, |
Jenn Magder | 1eb1e22 | 2019-09-30 13:14:42 -0700 | [diff] [blame] | 213 | }); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 214 | }); |
| 215 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 216 | group('Setup Podfile', () { |
Sigurd Meldgaard | 6a8f904 | 2018-07-16 16:21:20 +0200 | [diff] [blame] | 217 | testUsingContext('creates objective-c Podfile when not present', () async { |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 218 | await cocoaPodsUnderTest.setupPodfile(projectUnderTest.ios); |
Sigurd Meldgaard | 6a8f904 | 2018-07-16 16:21:20 +0200 | [diff] [blame] | 219 | |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 220 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Objective-C iOS podfile template'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 221 | }, overrides: <Type, Generator>{ |
| 222 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 223 | ProcessManager: () => FakeProcessManager.any(), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 224 | }); |
| 225 | |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 226 | testUsingContext('creates swift Podfile if swift', () async { |
Mikkel Nygaard Ravn | 0d59679 | 2018-03-07 08:41:23 +0100 | [diff] [blame] | 227 | when(mockXcodeProjectInterpreter.isInstalled).thenReturn(true); |
Zachary Anderson | 8a33d24 | 2019-09-16 07:51:50 -0700 | [diff] [blame] | 228 | when(mockXcodeProjectInterpreter.getBuildSettings(any, any)) |
Alexandre Ardhuin | f11c341 | 2019-09-27 10:46:45 +0200 | [diff] [blame] | 229 | .thenAnswer((_) async => <String, String>{ |
Jenn Magder | dda74a1 | 2019-10-15 12:37:13 -0700 | [diff] [blame] | 230 | 'SWIFT_VERSION': '5.0', |
Alexandre Ardhuin | f11c341 | 2019-09-27 10:46:45 +0200 | [diff] [blame] | 231 | }); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 232 | |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 233 | final FlutterProject project = FlutterProject.fromPath('project'); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 234 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 235 | |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 236 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Swift iOS podfile template'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 237 | }, overrides: <Type, Generator>{ |
| 238 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 239 | ProcessManager: () => FakeProcessManager.any(), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 240 | XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, |
| 241 | }); |
| 242 | |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 243 | testUsingContext('creates macOS Podfile when not present', () async { |
| 244 | projectUnderTest.macos.xcodeProject.createSync(recursive: true); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 245 | await cocoaPodsUnderTest.setupPodfile(projectUnderTest.macos); |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 246 | |
| 247 | expect(projectUnderTest.macos.podfile.readAsStringSync(), 'macOS podfile template'); |
| 248 | }, overrides: <Type, Generator>{ |
| 249 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 250 | ProcessManager: () => FakeProcessManager.any(), |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 251 | }); |
| 252 | |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 253 | testUsingContext('does not recreate Podfile when already present', () async { |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 254 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 255 | |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 256 | final FlutterProject project = FlutterProject.fromPath('project'); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 257 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 258 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 259 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Existing Podfile'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 260 | }, overrides: <Type, Generator>{ |
| 261 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 262 | ProcessManager: () => FakeProcessManager.any(), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 263 | }); |
| 264 | |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 265 | testUsingContext('does not create Podfile when we cannot interpret Xcode projects', () async { |
Mikkel Nygaard Ravn | 0d59679 | 2018-03-07 08:41:23 +0100 | [diff] [blame] | 266 | when(mockXcodeProjectInterpreter.isInstalled).thenReturn(false); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 267 | |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 268 | final FlutterProject project = FlutterProject.fromPath('project'); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 269 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 270 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 271 | expect(projectUnderTest.ios.podfile.existsSync(), false); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 272 | }, overrides: <Type, Generator>{ |
| 273 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 274 | ProcessManager: () => FakeProcessManager.any(), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 275 | XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, |
| 276 | }); |
| 277 | |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 278 | testUsingContext('includes Pod config in xcconfig files, if not present', () async { |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 279 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
| 280 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 281 | ..createSync(recursive: true) |
| 282 | ..writeAsStringSync('Existing debug config'); |
| 283 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 284 | ..createSync(recursive: true) |
| 285 | ..writeAsStringSync('Existing release config'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 286 | |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 287 | final FlutterProject project = FlutterProject.fromPath('project'); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 288 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 289 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 290 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 291 | expect(debugContents, contains( |
| 292 | '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"\n')); |
| 293 | expect(debugContents, contains('Existing debug config')); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 294 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 295 | expect(releaseContents, contains( |
| 296 | '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n')); |
| 297 | expect(releaseContents, contains('Existing release config')); |
| 298 | }, overrides: <Type, Generator>{ |
| 299 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 300 | ProcessManager: () => FakeProcessManager.any(), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 301 | }); |
| 302 | }); |
| 303 | |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 304 | group('Update xcconfig', () { |
| 305 | testUsingContext('includes Pod config in xcconfig files, if the user manually added Pod dependencies without using Flutter plugins', () async { |
| 306 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Custom Podfile'); |
| 307 | projectUnderTest.ios.podfileLock..createSync()..writeAsStringSync('Podfile.lock from user executed `pod install`'); |
| 308 | projectUnderTest.packagesFile..createSync()..writeAsStringSync(''); |
| 309 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 310 | ..createSync(recursive: true) |
| 311 | ..writeAsStringSync('Existing debug config'); |
| 312 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 313 | ..createSync(recursive: true) |
| 314 | ..writeAsStringSync('Existing release config'); |
| 315 | |
Jonah Williams | 4ff4671 | 2019-04-29 08:21:32 -0700 | [diff] [blame] | 316 | final FlutterProject project = FlutterProject.fromPath('project'); |
Emmanuel Garcia | 0a93f4e | 2019-10-16 12:47:04 -0700 | [diff] [blame] | 317 | await injectPlugins(project, checkProjects: true); |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 318 | |
| 319 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
| 320 | expect(debugContents, contains( |
| 321 | '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"\n')); |
| 322 | expect(debugContents, contains('Existing debug config')); |
| 323 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
| 324 | expect(releaseContents, contains( |
| 325 | '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n')); |
| 326 | expect(releaseContents, contains('Existing release config')); |
| 327 | }, overrides: <Type, Generator>{ |
| 328 | FileSystem: () => fs, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 329 | ProcessManager: () => FakeProcessManager.any(), |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 330 | }); |
| 331 | }); |
| 332 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 333 | group('Process pods', () { |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 334 | setUp(() { |
| 335 | podsIsInHomeDir(); |
Christopher Fujino | 7d1fbca | 2020-03-20 13:05:19 -0700 | [diff] [blame] | 336 | // Assume all binaries can run |
| 337 | when(mockProcessManager.canRun(any)).thenReturn(true); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 338 | }); |
| 339 | |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 340 | testUsingContext('throwsToolExit if CocoaPods is not installed', () async { |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 341 | pretendPodIsNotInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 342 | projectUnderTest.ios.podfile.createSync(); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 343 | final Function invokeProcessPods = () async => await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 344 | xcodeProject: projectUnderTest.ios, |
| 345 | engineDir: 'engine/path', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 346 | ); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 347 | expect(invokeProcessPods, throwsToolExit()); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 348 | verifyNever(mockProcessManager.run( |
Sam Rawlins | 9f8a70b | 2018-06-21 16:23:47 -0700 | [diff] [blame] | 349 | argThat(containsAllInOrder(<String>['pod', 'install'])), |
Sam Rawlins | fba81d0 | 2018-05-31 08:24:26 -0700 | [diff] [blame] | 350 | workingDirectory: anyNamed('workingDirectory'), |
Sam Rawlins | 1f76f7f | 2018-05-16 10:19:05 -0700 | [diff] [blame] | 351 | environment: anyNamed('environment'), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 352 | )); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 353 | }, overrides: <Type, Generator>{ |
| 354 | FileSystem: () => fs, |
| 355 | ProcessManager: () => mockProcessManager, |
| 356 | }); |
| 357 | |
| 358 | testUsingContext('throwsToolExit if CocoaPods install is broken', () async { |
| 359 | pretendPodIsBroken(); |
| 360 | projectUnderTest.ios.podfile.createSync(); |
| 361 | final Function invokeProcessPods = () async => await cocoaPodsUnderTest.processPods( |
| 362 | xcodeProject: projectUnderTest.ios, |
| 363 | engineDir: 'engine/path', |
| 364 | ); |
| 365 | expect(invokeProcessPods, throwsToolExit()); |
| 366 | verifyNever(mockProcessManager.run( |
| 367 | argThat(containsAllInOrder(<String>['pod', 'install'])), |
| 368 | workingDirectory: anyNamed('workingDirectory'), |
| 369 | environment: anyNamed('environment'), |
| 370 | )); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 371 | }, overrides: <Type, Generator>{ |
| 372 | FileSystem: () => fs, |
| 373 | ProcessManager: () => mockProcessManager, |
| 374 | }); |
| 375 | |
Jenn Magder | 357d02c | 2019-10-15 15:33:55 -0700 | [diff] [blame] | 376 | testUsingContext('prints warning, if Podfile is out of date', () async { |
| 377 | pretendPodIsInstalled(); |
| 378 | |
| 379 | fs.file(fs.path.join('project', 'ios', 'Podfile')) |
| 380 | ..createSync() |
| 381 | ..writeAsStringSync('Existing Podfile'); |
| 382 | |
| 383 | final Directory symlinks = projectUnderTest.ios.symlinks |
| 384 | ..createSync(recursive: true); |
| 385 | symlinks.childLink('flutter').createSync('cache'); |
| 386 | |
| 387 | await cocoaPodsUnderTest.processPods( |
| 388 | xcodeProject: projectUnderTest.ios, |
| 389 | engineDir: 'engine/path', |
| 390 | ); |
| 391 | expect(testLogger.errorText, contains('Warning: Podfile is out of date')); |
| 392 | }, overrides: <Type, Generator>{ |
| 393 | FileSystem: () => fs, |
| 394 | ProcessManager: () => mockProcessManager, |
| 395 | }); |
| 396 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 397 | testUsingContext('throws, if Podfile is missing.', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 398 | pretendPodIsInstalled(); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 399 | try { |
| 400 | await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 401 | xcodeProject: projectUnderTest.ios, |
| 402 | engineDir: 'engine/path', |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 403 | ); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 404 | fail('ToolExit expected'); |
Zachary Anderson | 6c408a0 | 2020-03-06 10:22:12 -0800 | [diff] [blame] | 405 | } on Exception catch (e) { |
Dan Field | 8b29933 | 2020-01-27 14:36:02 -0800 | [diff] [blame] | 406 | expect(e, isA<ToolExit>()); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 407 | verifyNever(mockProcessManager.run( |
Sam Rawlins | 9f8a70b | 2018-06-21 16:23:47 -0700 | [diff] [blame] | 408 | argThat(containsAllInOrder(<String>['pod', 'install'])), |
Sam Rawlins | fba81d0 | 2018-05-31 08:24:26 -0700 | [diff] [blame] | 409 | workingDirectory: anyNamed('workingDirectory'), |
Sam Rawlins | 1f76f7f | 2018-05-16 10:19:05 -0700 | [diff] [blame] | 410 | environment: anyNamed('environment'), |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 411 | )); |
| 412 | } |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 413 | }, overrides: <Type, Generator>{ |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 414 | FileSystem: () => fs, |
| 415 | ProcessManager: () => mockProcessManager, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 416 | }); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 417 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 418 | testUsingContext('throws, if specs repo is outdated.', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 419 | pretendPodIsInstalled(); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 420 | fs.file(fs.path.join('project', 'ios', 'Podfile')) |
| 421 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 422 | ..writeAsStringSync('Existing Podfile'); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 423 | |
| 424 | when(mockProcessManager.run( |
| 425 | <String>['pod', 'install', '--verbose'], |
| 426 | workingDirectory: 'project/ios', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 427 | environment: <String, String>{ |
| 428 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 429 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 430 | 'LANG': 'en_US.UTF-8', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 431 | }, |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 432 | )).thenAnswer((_) async => exitsWithError( |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 433 | ''' |
| 434 | [!] Unable to satisfy the following requirements: |
| 435 | |
| 436 | - `Firebase/Auth` required by `Podfile` |
| 437 | - `Firebase/Auth (= 4.0.0)` required by `Podfile.lock` |
| 438 | |
| 439 | None of your spec sources contain a spec satisfying the dependencies: `Firebase/Auth, Firebase/Auth (= 4.0.0)`. |
| 440 | |
| 441 | You have either: |
| 442 | * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`. |
| 443 | * mistyped the name or version. |
| 444 | * not added the source repo that hosts the Podspec to your Podfile. |
| 445 | |
| 446 | Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.''', |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 447 | )); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 448 | try { |
| 449 | await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 450 | xcodeProject: projectUnderTest.ios, |
| 451 | engineDir: 'engine/path', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 452 | ); |
| 453 | fail('ToolExit expected'); |
Zachary Anderson | 6c408a0 | 2020-03-06 10:22:12 -0800 | [diff] [blame] | 454 | } on Exception catch (e) { |
Dan Field | 8b29933 | 2020-01-27 14:36:02 -0800 | [diff] [blame] | 455 | expect(e, isA<ToolExit>()); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 456 | expect( |
| 457 | testLogger.errorText, |
| 458 | contains("CocoaPods's specs repository is too out-of-date to satisfy dependencies"), |
| 459 | ); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 460 | } |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 461 | }, overrides: <Type, Generator>{ |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 462 | FileSystem: () => fs, |
| 463 | ProcessManager: () => mockProcessManager, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 464 | }); |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 465 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 466 | testUsingContext('run pod install, if Podfile.lock is missing', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 467 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 468 | projectUnderTest.ios.podfile |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 469 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 470 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 471 | projectUnderTest.ios.podManifestLock |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 472 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 473 | ..writeAsStringSync('Existing lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 474 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 475 | xcodeProject: projectUnderTest.ios, |
| 476 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 477 | dependenciesChanged: false, |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 478 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 479 | expect(didInstall, isTrue); |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 480 | verify(mockProcessManager.run( |
| 481 | <String>['pod', 'install', '--verbose'], |
| 482 | workingDirectory: 'project/ios', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 483 | environment: <String, String>{'FLUTTER_FRAMEWORK_DIR': 'engine/path', 'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 484 | )); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 485 | }, overrides: <Type, Generator>{ |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 486 | FileSystem: () => fs, |
| 487 | ProcessManager: () => mockProcessManager, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 488 | }); |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 489 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 490 | testUsingContext('runs pod install, if Manifest.lock is missing', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 491 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 492 | projectUnderTest.ios.podfile |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 493 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 494 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 495 | projectUnderTest.ios.podfileLock |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 496 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 497 | ..writeAsStringSync('Existing lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 498 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 499 | xcodeProject: projectUnderTest.ios, |
| 500 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 501 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | b3e4976 | 2018-02-15 22:17:12 +0100 | [diff] [blame] | 502 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 503 | expect(didInstall, isTrue); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 504 | verify(mockProcessManager.run( |
Mikkel Nygaard Ravn | c2e1bc0 | 2018-02-15 22:55:36 +0100 | [diff] [blame] | 505 | <String>['pod', 'install', '--verbose'], |
| 506 | workingDirectory: 'project/ios', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 507 | environment: <String, String>{ |
| 508 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 509 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 510 | 'LANG': 'en_US.UTF-8', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 511 | }, |
Mikkel Nygaard Ravn | b3e4976 | 2018-02-15 22:17:12 +0100 | [diff] [blame] | 512 | )); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 513 | }, overrides: <Type, Generator>{ |
Mikkel Nygaard Ravn | b3e4976 | 2018-02-15 22:17:12 +0100 | [diff] [blame] | 514 | FileSystem: () => fs, |
| 515 | ProcessManager: () => mockProcessManager, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 516 | }); |
| 517 | |
| 518 | testUsingContext('runs pod install, if Manifest.lock different from Podspec.lock', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 519 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 520 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 521 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 522 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 523 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 524 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 525 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 526 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 527 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 528 | ..writeAsStringSync('Different lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 529 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 530 | xcodeProject: projectUnderTest.ios, |
| 531 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 532 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 533 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 534 | expect(didInstall, isTrue); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 535 | verify(mockProcessManager.run( |
| 536 | <String>['pod', 'install', '--verbose'], |
| 537 | workingDirectory: 'project/ios', |
| 538 | environment: <String, String>{ |
| 539 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 540 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 541 | 'LANG': 'en_US.UTF-8', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 542 | }, |
| 543 | )); |
| 544 | }, overrides: <Type, Generator>{ |
| 545 | FileSystem: () => fs, |
| 546 | ProcessManager: () => mockProcessManager, |
| 547 | }); |
| 548 | |
| 549 | testUsingContext('runs pod install, if flutter framework changed', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 550 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 551 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 552 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 553 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 554 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 555 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 556 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 557 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 558 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 559 | ..writeAsStringSync('Existing lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 560 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 561 | xcodeProject: projectUnderTest.ios, |
| 562 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 563 | dependenciesChanged: true, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 564 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 565 | expect(didInstall, isTrue); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 566 | verify(mockProcessManager.run( |
| 567 | <String>['pod', 'install', '--verbose'], |
| 568 | workingDirectory: 'project/ios', |
| 569 | environment: <String, String>{ |
| 570 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 571 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 572 | 'LANG': 'en_US.UTF-8', |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 573 | }, |
| 574 | )); |
| 575 | }, overrides: <Type, Generator>{ |
| 576 | FileSystem: () => fs, |
| 577 | ProcessManager: () => mockProcessManager, |
| 578 | }); |
| 579 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 580 | testUsingContext('runs pod install, if Podfile.lock is older than Podfile', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 581 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 582 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 583 | ..createSync() |
| 584 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 585 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 586 | ..createSync() |
| 587 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 588 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 589 | ..createSync(recursive: true) |
| 590 | ..writeAsStringSync('Existing lock file.'); |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 591 | await Future<void>.delayed(const Duration(milliseconds: 10)); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 592 | projectUnderTest.ios.podfile |
Alexandre Ardhuin | c2ae654 | 2020-03-05 08:03:26 +0100 | [diff] [blame] | 593 | .writeAsStringSync('Updated Podfile'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 594 | await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 595 | xcodeProject: projectUnderTest.ios, |
| 596 | engineDir: 'engine/path', |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 597 | dependenciesChanged: false, |
| 598 | ); |
| 599 | verify(mockProcessManager.run( |
| 600 | <String>['pod', 'install', '--verbose'], |
| 601 | workingDirectory: 'project/ios', |
| 602 | environment: <String, String>{ |
| 603 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 604 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 605 | 'LANG': 'en_US.UTF-8', |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 606 | }, |
| 607 | )); |
| 608 | }, overrides: <Type, Generator>{ |
| 609 | FileSystem: () => fs, |
| 610 | ProcessManager: () => mockProcessManager, |
| 611 | }); |
| 612 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 613 | testUsingContext('skips pod install, if nothing changed', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 614 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 615 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 616 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 617 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 618 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 619 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 620 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 621 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 622 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 623 | ..writeAsStringSync('Existing lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 624 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 625 | xcodeProject: projectUnderTest.ios, |
| 626 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 627 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 628 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 629 | expect(didInstall, isFalse); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 630 | verifyNever(mockProcessManager.run( |
Sam Rawlins | 9f8a70b | 2018-06-21 16:23:47 -0700 | [diff] [blame] | 631 | argThat(containsAllInOrder(<String>['pod', 'install'])), |
Sam Rawlins | fba81d0 | 2018-05-31 08:24:26 -0700 | [diff] [blame] | 632 | workingDirectory: anyNamed('workingDirectory'), |
Sam Rawlins | 1f76f7f | 2018-05-16 10:19:05 -0700 | [diff] [blame] | 633 | environment: anyNamed('environment'), |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 634 | )); |
| 635 | }, overrides: <Type, Generator>{ |
| 636 | FileSystem: () => fs, |
| 637 | ProcessManager: () => mockProcessManager, |
| 638 | }); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 639 | |
| 640 | testUsingContext('a failed pod install deletes Pods/Manifest.lock', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 641 | pretendPodIsInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 642 | projectUnderTest.ios.podfile |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 643 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 644 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 645 | projectUnderTest.ios.podfileLock |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 646 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 647 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 648 | projectUnderTest.ios.podManifestLock |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 649 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 650 | ..writeAsStringSync('Existing lock file.'); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 651 | |
| 652 | when(mockProcessManager.run( |
| 653 | <String>['pod', 'install', '--verbose'], |
| 654 | workingDirectory: 'project/ios', |
| 655 | environment: <String, String>{ |
| 656 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 657 | 'COCOAPODS_DISABLE_STATS': 'true', |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 658 | 'LANG': 'en_US.UTF-8', |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 659 | }, |
Matan Lurey | 8107089 | 2018-03-19 11:45:44 -0700 | [diff] [blame] | 660 | )).thenAnswer( |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 661 | (_) async => exitsWithError() |
Matan Lurey | 8107089 | 2018-03-19 11:45:44 -0700 | [diff] [blame] | 662 | ); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 663 | |
| 664 | try { |
| 665 | await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 666 | xcodeProject: projectUnderTest.ios, |
| 667 | engineDir: 'engine/path', |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 668 | dependenciesChanged: true, |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 669 | ); |
| 670 | fail('Tool throw expected when pod install fails'); |
| 671 | } on ToolExit { |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 672 | expect(projectUnderTest.ios.podManifestLock.existsSync(), isFalse); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 673 | } |
| 674 | }, overrides: <Type, Generator>{ |
| 675 | FileSystem: () => fs, |
| 676 | ProcessManager: () => mockProcessManager, |
| 677 | }); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 678 | }); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 679 | |
| 680 | group('Pods repos dir is custom', () { |
| 681 | String cocoapodsRepoDir; |
| 682 | Map<String, String> environment; |
| 683 | setUp(() { |
Christopher Fujino | 7d1fbca | 2020-03-20 13:05:19 -0700 | [diff] [blame] | 684 | // Assume binaries exist and can run |
| 685 | when(mockProcessManager.canRun(any)).thenReturn(true); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 686 | cocoapodsRepoDir = podsIsInCustomDir(); |
| 687 | environment = <String, String>{ |
| 688 | 'FLUTTER_FRAMEWORK_DIR': 'engine/path', |
| 689 | 'COCOAPODS_DISABLE_STATS': 'true', |
| 690 | 'CP_REPOS_DIR': cocoapodsRepoDir, |
Dan Field | 088fa24 | 2019-12-02 13:26:32 -0800 | [diff] [blame] | 691 | 'LANG': 'en_US.UTF8', |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 692 | }; |
| 693 | }); |
| 694 | |
| 695 | testUsingContext('succeeds, if specs repo is in CP_REPOS_DIR.', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 696 | pretendPodIsInstalled(); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 697 | fs.file(fs.path.join('project', 'ios', 'Podfile')) |
| 698 | ..createSync() |
| 699 | ..writeAsStringSync('Existing Podfile'); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 700 | when(mockProcessManager.run( |
| 701 | <String>['pod', 'install', '--verbose'], |
| 702 | workingDirectory: 'project/ios', |
| 703 | environment: environment, |
| 704 | )).thenAnswer((_) async => exitsHappy()); |
| 705 | final bool success = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 706 | xcodeProject: projectUnderTest.ios, |
| 707 | engineDir: 'engine/path', |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 708 | ); |
| 709 | expect(success, true); |
| 710 | }, overrides: <Type, Generator>{ |
| 711 | FileSystem: () => fs, |
| 712 | ProcessManager: () => mockProcessManager, |
| 713 | Platform: () => FakePlatform(environment: environment), |
| 714 | }); |
| 715 | }); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 716 | } |
| 717 | |
| 718 | class MockProcessManager extends Mock implements ProcessManager {} |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 719 | class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {} |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 720 | |
Alexandre Ardhuin | 5169ab5 | 2019-02-21 09:27:07 +0100 | [diff] [blame] | 721 | ProcessResult exitsWithError([ String stdout = '' ]) => ProcessResult(1, 1, stdout, ''); |
| 722 | ProcessResult exitsHappy([ String stdout = '' ]) => ProcessResult(1, 0, stdout, ''); |