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 | |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 5 | import 'package:file/file.dart'; |
| 6 | import 'package:file/memory.dart'; |
Zachary Anderson | 6f0ed5e | 2020-05-06 08:15:39 -0700 | [diff] [blame] | 7 | import 'package:flutter_tools/src/base/logger.dart'; |
| 8 | import 'package:flutter_tools/src/base/platform.dart'; |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 9 | import 'package:flutter_tools/src/build_info.dart'; |
Mikkel Nygaard Ravn | c2e1bc0 | 2018-02-15 22:55:36 +0100 | [diff] [blame] | 10 | import 'package:flutter_tools/src/cache.dart'; |
Jenn Magder | d40cc5a | 2021-04-13 13:52:58 -0700 | [diff] [blame] | 11 | import 'package:flutter_tools/src/flutter_plugins.dart'; |
stuartmorgan | 81c38b2 | 2019-05-24 22:51:02 -0400 | [diff] [blame] | 12 | import 'package:flutter_tools/src/ios/xcodeproj.dart'; |
| 13 | import 'package:flutter_tools/src/macos/cocoapods.dart'; |
Sigurd Meldgaard | 1e8ef60 | 2018-06-28 14:35:00 +0200 | [diff] [blame] | 14 | import 'package:flutter_tools/src/project.dart'; |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 15 | import 'package:flutter_tools/src/reporting/reporting.dart'; |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 16 | import 'package:test/fake.dart'; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 17 | |
Ian Hickson | d919e69 | 2019-07-13 11:51:44 -0700 | [diff] [blame] | 18 | import '../../src/common.dart'; |
| 19 | import '../../src/context.dart'; |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 20 | import '../../src/fake_process_manager.dart'; |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 21 | |
| 22 | void main() { |
Jonah Williams | db829c1 | 2022-06-17 21:34:27 -0700 | [diff] [blame] | 23 | late FileSystem fileSystem; |
| 24 | late FakeProcessManager fakeProcessManager; |
| 25 | late CocoaPods cocoaPodsUnderTest; |
| 26 | late BufferLogger logger; |
| 27 | late TestUsage usage; |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 28 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 29 | void pretendPodVersionFails() { |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 30 | fakeProcessManager.addCommand( |
| 31 | const FakeCommand( |
| 32 | command: <String>['pod', '--version'], |
| 33 | exitCode: 1, |
| 34 | ), |
| 35 | ); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 36 | } |
| 37 | |
| 38 | void pretendPodVersionIs(String versionText) { |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 39 | fakeProcessManager.addCommand( |
| 40 | FakeCommand( |
| 41 | command: const <String>['pod', '--version'], |
| 42 | stdout: versionText, |
| 43 | ), |
| 44 | ); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 45 | } |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 46 | |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 47 | void podsIsInHomeDir() { |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 48 | fileSystem.directory(fileSystem.path.join( |
Zachary Anderson | 390ed1c | 2020-02-03 14:33:03 -0800 | [diff] [blame] | 49 | '.cocoapods', |
| 50 | 'repos', |
| 51 | 'master', |
| 52 | )).createSync(recursive: true); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 53 | } |
| 54 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 55 | FlutterProject setupProjectUnderTest() { |
| 56 | // This needs to be run within testWithoutContext and not setUp since FlutterProject uses context. |
| 57 | final FlutterProject projectUnderTest = FlutterProject.fromDirectory(fileSystem.directory('project')); |
| 58 | projectUnderTest.ios.xcodeProject.createSync(recursive: true); |
| 59 | projectUnderTest.macos.xcodeProject.createSync(recursive: true); |
| 60 | return projectUnderTest; |
| 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'; |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 65 | fileSystem = MemoryFileSystem.test(); |
Jenn Magder | 56c0002 | 2021-04-15 14:19:02 -0700 | [diff] [blame] | 66 | fakeProcessManager = FakeProcessManager.empty(); |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 67 | logger = BufferLogger.test(); |
Jonah Williams | b926c7b | 2021-01-28 12:41:14 -0800 | [diff] [blame] | 68 | usage = TestUsage(); |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 69 | cocoaPodsUnderTest = CocoaPods( |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 70 | fileSystem: fileSystem, |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 71 | processManager: fakeProcessManager, |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 72 | logger: logger, |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 73 | platform: FakePlatform(operatingSystem: 'macos'), |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 74 | xcodeProjectInterpreter: FakeXcodeProjectInterpreter(), |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 75 | usage: usage, |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 76 | ); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 77 | fileSystem.file(fileSystem.path.join( |
Jonah Williams | db829c1 | 2022-06-17 21:34:27 -0700 | [diff] [blame] | 78 | Cache.flutterRoot!, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-ios-objc', |
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('Objective-C iOS podfile template'); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 82 | fileSystem.file(fileSystem.path.join( |
Jonah Williams | db829c1 | 2022-06-17 21:34:27 -0700 | [diff] [blame] | 83 | Cache.flutterRoot!, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-ios-swift', |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 84 | )) |
| 85 | ..createSync(recursive: true) |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 86 | ..writeAsStringSync('Swift iOS podfile template'); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 87 | fileSystem.file(fileSystem.path.join( |
Jonah Williams | db829c1 | 2022-06-17 21:34:27 -0700 | [diff] [blame] | 88 | Cache.flutterRoot!, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-macos', |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 89 | )) |
| 90 | ..createSync(recursive: true) |
| 91 | ..writeAsStringSync('macOS podfile template'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 92 | }); |
| 93 | |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 94 | void pretendPodIsNotInstalled() { |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 95 | fakeProcessManager.addCommand( |
| 96 | const FakeCommand( |
| 97 | command: <String>['which', 'pod'], |
| 98 | exitCode: 1, |
| 99 | ), |
| 100 | ); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 101 | } |
| 102 | |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 103 | void pretendPodIsBroken() { |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 104 | fakeProcessManager.addCommands(<FakeCommand>[ |
| 105 | // it is present |
| 106 | const FakeCommand( |
| 107 | command: <String>['which', 'pod'], |
| 108 | ), |
| 109 | // but is not working |
| 110 | const FakeCommand( |
| 111 | command: <String>['pod', '--version'], |
| 112 | exitCode: 1, |
| 113 | ), |
| 114 | ]); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 115 | } |
| 116 | |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 117 | void pretendPodIsInstalled() { |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 118 | fakeProcessManager.addCommands(<FakeCommand>[ |
| 119 | const FakeCommand( |
| 120 | command: <String>['which', 'pod'], |
| 121 | ), |
| 122 | ]); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 123 | } |
| 124 | |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 125 | group('Evaluate installation', () { |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 126 | testWithoutContext('detects not installed, if pod exec does not exist', () async { |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 127 | pretendPodIsNotInstalled(); |
| 128 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.notInstalled); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 129 | }); |
| 130 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 131 | testWithoutContext('detects not installed, if pod is installed but version fails', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 132 | pretendPodIsInstalled(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 133 | pretendPodVersionFails(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 134 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.brokenInstall); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 135 | }); |
| 136 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 137 | testWithoutContext('detects installed', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 138 | pretendPodIsInstalled(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 139 | pretendPodVersionIs('0.0.1'); |
| 140 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, isNot(CocoaPodsStatus.notInstalled)); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 141 | }); |
| 142 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 143 | testWithoutContext('detects unknown version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 144 | pretendPodIsInstalled(); |
KyleWong | 85ded44 | 2019-01-03 11:57:03 +0800 | [diff] [blame] | 145 | pretendPodVersionIs('Plugin loaded.\n1.5.3'); |
| 146 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.unknownVersion); |
KyleWong | 85ded44 | 2019-01-03 11:57:03 +0800 | [diff] [blame] | 147 | }); |
| 148 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 149 | testWithoutContext('detects below minimum version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 150 | pretendPodIsInstalled(); |
Jenn Magder | bf7a326 | 2022-05-16 17:42:19 -0700 | [diff] [blame] | 151 | pretendPodVersionIs('1.9.0'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 152 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.belowMinimumVersion); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 153 | }); |
| 154 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 155 | testWithoutContext('detects below recommended version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 156 | pretendPodIsInstalled(); |
Jenn Magder | bf7a326 | 2022-05-16 17:42:19 -0700 | [diff] [blame] | 157 | pretendPodVersionIs('1.10.5'); |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 158 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.belowRecommendedVersion); |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 159 | }); |
| 160 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 161 | testWithoutContext('detects at recommended version', () async { |
Jenn Magder | a14ac4e | 2020-03-06 12:14:42 -0800 | [diff] [blame] | 162 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 163 | pretendPodVersionIs('1.11.0'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 164 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.recommended); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 165 | }); |
| 166 | |
Jenn Magder | 86389be | 2020-03-25 13:27:10 -0700 | [diff] [blame] | 167 | testWithoutContext('detects above recommended version', () async { |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 168 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 169 | pretendPodVersionIs('1.11.1'); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 170 | expect(await cocoaPodsUnderTest.evaluateCocoaPodsInstallation, CocoaPodsStatus.recommended); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 171 | }); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 172 | }); |
| 173 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 174 | group('Setup Podfile', () { |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 175 | testUsingContext('creates objective-c Podfile when not present', () async { |
| 176 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 177 | await cocoaPodsUnderTest.setupPodfile(projectUnderTest.ios); |
Sigurd Meldgaard | 6a8f904 | 2018-07-16 16:21:20 +0200 | [diff] [blame] | 178 | |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 179 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Objective-C iOS podfile template'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 180 | }); |
| 181 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 182 | testUsingContext('creates swift Podfile if swift', () async { |
| 183 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 184 | final FakeXcodeProjectInterpreter fakeXcodeProjectInterpreter = FakeXcodeProjectInterpreter(buildSettings: <String, String>{ |
| 185 | 'SWIFT_VERSION': '5.0', |
| 186 | }); |
| 187 | final CocoaPods cocoaPodsUnderTest = CocoaPods( |
| 188 | fileSystem: fileSystem, |
| 189 | processManager: fakeProcessManager, |
| 190 | logger: logger, |
| 191 | platform: FakePlatform(operatingSystem: 'macos'), |
| 192 | xcodeProjectInterpreter: fakeXcodeProjectInterpreter, |
| 193 | usage: usage, |
| 194 | ); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 195 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 196 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 197 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 198 | |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 199 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Swift iOS podfile template'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 200 | }); |
| 201 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 202 | testUsingContext('creates macOS Podfile when not present', () async { |
| 203 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 204 | projectUnderTest.macos.xcodeProject.createSync(recursive: true); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 205 | await cocoaPodsUnderTest.setupPodfile(projectUnderTest.macos); |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 206 | |
| 207 | expect(projectUnderTest.macos.podfile.readAsStringSync(), 'macOS podfile template'); |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 208 | }); |
| 209 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 210 | testUsingContext('does not recreate Podfile when already present', () async { |
| 211 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 212 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 213 | |
Jonah Williams | 0418257 | 2021-02-18 12:36:04 -0800 | [diff] [blame] | 214 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 215 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 216 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 217 | expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Existing Podfile'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 218 | }); |
| 219 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 220 | testUsingContext('does not create Podfile when we cannot interpret Xcode projects', () async { |
| 221 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 222 | final CocoaPods cocoaPodsUnderTest = CocoaPods( |
| 223 | fileSystem: fileSystem, |
| 224 | processManager: fakeProcessManager, |
| 225 | logger: logger, |
| 226 | platform: FakePlatform(operatingSystem: 'macos'), |
| 227 | xcodeProjectInterpreter: FakeXcodeProjectInterpreter(isInstalled: false), |
| 228 | usage: usage, |
| 229 | ); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 230 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 231 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 232 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 233 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 234 | expect(projectUnderTest.ios.podfile.existsSync(), false); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 235 | }); |
| 236 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 237 | testUsingContext('includes Pod config in xcconfig files, if not present', () async { |
| 238 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 239 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
| 240 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 241 | ..createSync(recursive: true) |
| 242 | ..writeAsStringSync('Existing debug config'); |
| 243 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 244 | ..createSync(recursive: true) |
| 245 | ..writeAsStringSync('Existing release config'); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 246 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 247 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Zachary Anderson | b7c714e | 2019-08-28 10:03:53 -0700 | [diff] [blame] | 248 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 249 | |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 250 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 251 | expect(debugContents, contains( |
Jenn Magder | 6891928 | 2021-01-06 13:55:23 -0800 | [diff] [blame] | 252 | '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"\n')); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 253 | expect(debugContents, contains('Existing debug config')); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 254 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 255 | expect(releaseContents, contains( |
Jenn Magder | 6891928 | 2021-01-06 13:55:23 -0800 | [diff] [blame] | 256 | '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n')); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 257 | expect(releaseContents, contains('Existing release config')); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 258 | }); |
Jenn Magder | ba5e237 | 2021-02-11 14:11:15 -0800 | [diff] [blame] | 259 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 260 | testUsingContext('does not include Pod config in xcconfig files, if legacy non-option include present', () async { |
| 261 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | ba5e237 | 2021-02-11 14:11:15 -0800 | [diff] [blame] | 262 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
| 263 | |
| 264 | const String legacyDebugInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig'; |
| 265 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 266 | ..createSync(recursive: true) |
| 267 | ..writeAsStringSync(legacyDebugInclude); |
| 268 | const String legacyReleaseInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig'; |
| 269 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 270 | ..createSync(recursive: true) |
| 271 | ..writeAsStringSync(legacyReleaseInclude); |
| 272 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 273 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Jenn Magder | ba5e237 | 2021-02-11 14:11:15 -0800 | [diff] [blame] | 274 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
| 275 | |
| 276 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
| 277 | // Redundant contains check, but this documents what we're testing--that the optional |
| 278 | // #include? doesn't get written in addition to the previous style #include. |
| 279 | expect(debugContents, isNot(contains('#include?'))); |
| 280 | expect(debugContents, equals(legacyDebugInclude)); |
| 281 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
| 282 | expect(releaseContents, isNot(contains('#include?'))); |
| 283 | expect(releaseContents, equals(legacyReleaseInclude)); |
Jenn Magder | ba5e237 | 2021-02-11 14:11:15 -0800 | [diff] [blame] | 284 | }); |
Jenn Magder | aff69e4 | 2021-10-27 12:53:05 -0700 | [diff] [blame] | 285 | |
| 286 | testUsingContext('does not include Pod config in xcconfig files, if flavor include present', () async { |
| 287 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
| 288 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); |
| 289 | |
| 290 | const String flavorDebugInclude = '#include? "Pods/Target Support Files/Pods-Free App/Pods-Free App.debug free.xcconfig"'; |
| 291 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 292 | ..createSync(recursive: true) |
| 293 | ..writeAsStringSync(flavorDebugInclude); |
| 294 | const String flavorReleaseInclude = '#include? "Pods/Target Support Files/Pods-Free App/Pods-Free App.release free.xcconfig"'; |
| 295 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 296 | ..createSync(recursive: true) |
| 297 | ..writeAsStringSync(flavorReleaseInclude); |
| 298 | |
| 299 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
| 300 | await cocoaPodsUnderTest.setupPodfile(project.ios); |
| 301 | |
| 302 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
| 303 | // Redundant contains check, but this documents what we're testing--that the optional |
| 304 | // #include? doesn't get written in addition to the previous style #include. |
| 305 | expect(debugContents, isNot(contains('Pods-Runner/Pods-Runner.debug'))); |
| 306 | expect(debugContents, equals(flavorDebugInclude)); |
| 307 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
| 308 | expect(releaseContents, isNot(contains('Pods-Runner/Pods-Runner.release'))); |
| 309 | expect(releaseContents, equals(flavorReleaseInclude)); |
| 310 | }); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 311 | }); |
| 312 | |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 313 | group('Update xcconfig', () { |
| 314 | testUsingContext('includes Pod config in xcconfig files, if the user manually added Pod dependencies without using Flutter plugins', () async { |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 315 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 316 | fileSystem.file(fileSystem.path.join('project', 'foo', '.packages')) |
Jonah Williams | 5d61bff | 2020-06-24 10:23:59 -0700 | [diff] [blame] | 317 | ..createSync(recursive: true) |
| 318 | ..writeAsStringSync('\n'); |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 319 | projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Custom Podfile'); |
| 320 | projectUnderTest.ios.podfileLock..createSync()..writeAsStringSync('Podfile.lock from user executed `pod install`'); |
| 321 | projectUnderTest.packagesFile..createSync()..writeAsStringSync(''); |
| 322 | projectUnderTest.ios.xcodeConfigFor('Debug') |
| 323 | ..createSync(recursive: true) |
| 324 | ..writeAsStringSync('Existing debug config'); |
| 325 | projectUnderTest.ios.xcodeConfigFor('Release') |
| 326 | ..createSync(recursive: true) |
| 327 | ..writeAsStringSync('Existing release config'); |
| 328 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 329 | final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); |
Jenn Magder | 5e17a24 | 2020-10-19 14:17:43 -0700 | [diff] [blame] | 330 | await injectPlugins(project, iosPlatform: true); |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 331 | |
| 332 | final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); |
| 333 | expect(debugContents, contains( |
Jenn Magder | 6891928 | 2021-01-06 13:55:23 -0800 | [diff] [blame] | 334 | '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"\n')); |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 335 | expect(debugContents, contains('Existing debug config')); |
| 336 | final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); |
| 337 | expect(releaseContents, contains( |
Jenn Magder | 6891928 | 2021-01-06 13:55:23 -0800 | [diff] [blame] | 338 | '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n')); |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 339 | expect(releaseContents, contains('Existing release config')); |
| 340 | }, overrides: <Type, Generator>{ |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 341 | FileSystem: () => fileSystem, |
Jonah Williams | 4c677e4 | 2019-10-22 22:05:00 -0700 | [diff] [blame] | 342 | ProcessManager: () => FakeProcessManager.any(), |
KyleWong | 60aa49e | 2019-01-30 12:33:16 +0800 | [diff] [blame] | 343 | }); |
| 344 | }); |
| 345 | |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 346 | group('Process pods', () { |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 347 | setUp(() { |
| 348 | podsIsInHomeDir(); |
| 349 | }); |
| 350 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 351 | testUsingContext('throwsToolExit if CocoaPods is not installed', () async { |
| 352 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 353 | pretendPodIsNotInstalled(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 354 | projectUnderTest.ios.podfile.createSync(); |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 355 | await expectLater(cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 356 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 357 | buildMode: BuildMode.debug, |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 358 | ), throwsToolExit(message: 'CocoaPods not installed or not in valid state')); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 359 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 360 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 361 | }); |
| 362 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 363 | testUsingContext('throwsToolExit if CocoaPods install is broken', () async { |
| 364 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 365 | pretendPodIsBroken(); |
| 366 | projectUnderTest.ios.podfile.createSync(); |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 367 | await expectLater(cocoaPodsUnderTest.processPods( |
Christopher Fujino | 2c846af | 2020-03-03 17:55:02 -0800 | [diff] [blame] | 368 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 369 | buildMode: BuildMode.debug, |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 370 | ), throwsToolExit(message: 'CocoaPods not installed or not in valid state')); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 371 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 372 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 373 | }); |
| 374 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 375 | testUsingContext('exits if Podfile creates the Flutter engine symlink', () async { |
| 376 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 377 | fileSystem.file(fileSystem.path.join('project', 'ios', 'Podfile')) |
Jenn Magder | 357d02c | 2019-10-15 15:33:55 -0700 | [diff] [blame] | 378 | ..createSync() |
| 379 | ..writeAsStringSync('Existing Podfile'); |
| 380 | |
| 381 | final Directory symlinks = projectUnderTest.ios.symlinks |
| 382 | ..createSync(recursive: true); |
| 383 | symlinks.childLink('flutter').createSync('cache'); |
| 384 | |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 385 | await expectLater(cocoaPodsUnderTest.processPods( |
Jenn Magder | 357d02c | 2019-10-15 15:33:55 -0700 | [diff] [blame] | 386 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 387 | buildMode: BuildMode.debug, |
| 388 | ), throwsToolExit(message: 'Podfile is out of date')); |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 389 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | 357d02c | 2019-10-15 15:33:55 -0700 | [diff] [blame] | 390 | }); |
| 391 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 392 | testUsingContext('exits if iOS Podfile parses .flutter-plugins', () async { |
| 393 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 394 | fileSystem.file(fileSystem.path.join('project', 'ios', 'Podfile')) |
Jenn Magder | 0093c6a | 2020-06-12 12:44:14 -0700 | [diff] [blame] | 395 | ..createSync() |
Hattomo (TomohiroHattori) | 08a70e7 | 2021-05-20 01:54:02 +0900 | [diff] [blame] | 396 | ..writeAsStringSync("plugin_pods = parse_KV_file('../.flutter-plugins')"); |
Jenn Magder | 0093c6a | 2020-06-12 12:44:14 -0700 | [diff] [blame] | 397 | |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 398 | await expectLater(cocoaPodsUnderTest.processPods( |
Jenn Magder | 0093c6a | 2020-06-12 12:44:14 -0700 | [diff] [blame] | 399 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 400 | buildMode: BuildMode.debug, |
| 401 | ), throwsToolExit(message: 'Podfile is out of date')); |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 402 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | 0093c6a | 2020-06-12 12:44:14 -0700 | [diff] [blame] | 403 | }); |
| 404 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 405 | testUsingContext('prints warning if macOS Podfile parses .flutter-plugins', () async { |
| 406 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | 1c18cf3 | 2020-12-17 11:48:16 -0800 | [diff] [blame] | 407 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 408 | pretendPodVersionIs('100.0.0'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 409 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 410 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 411 | command: <String>['pod', 'install', '--verbose'], |
| 412 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 413 | FakeCommand( |
| 414 | command: <String>['touch', 'project/macos/Podfile.lock'], |
| 415 | ), |
| 416 | ]); |
Jenn Magder | 1c18cf3 | 2020-12-17 11:48:16 -0800 | [diff] [blame] | 417 | |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 418 | projectUnderTest.macos.podfile |
Jenn Magder | 1c18cf3 | 2020-12-17 11:48:16 -0800 | [diff] [blame] | 419 | ..createSync() |
Hattomo (TomohiroHattori) | 08a70e7 | 2021-05-20 01:54:02 +0900 | [diff] [blame] | 420 | ..writeAsStringSync("plugin_pods = parse_KV_file('../.flutter-plugins')"); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 421 | projectUnderTest.macos.podfileLock |
| 422 | ..createSync() |
| 423 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | 1c18cf3 | 2020-12-17 11:48:16 -0800 | [diff] [blame] | 424 | |
| 425 | await cocoaPodsUnderTest.processPods( |
| 426 | xcodeProject: projectUnderTest.macos, |
| 427 | buildMode: BuildMode.debug, |
| 428 | ); |
| 429 | |
Greg Spencer | 52ae102 | 2021-11-10 16:13:04 -0800 | [diff] [blame] | 430 | expect(logger.warningText, contains('Warning: Podfile is out of date')); |
| 431 | expect(logger.warningText, contains('rm macos/Podfile')); |
Jenn Magder | 5a6d2a0 | 2021-03-30 12:42:39 -0700 | [diff] [blame] | 432 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | 1c18cf3 | 2020-12-17 11:48:16 -0800 | [diff] [blame] | 433 | }); |
| 434 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 435 | testUsingContext('throws, if Podfile is missing.', () async { |
| 436 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 437 | await expectLater(cocoaPodsUnderTest.processPods( |
| 438 | xcodeProject: projectUnderTest.ios, |
| 439 | buildMode: BuildMode.debug, |
| 440 | ), throwsToolExit(message: 'Podfile missing')); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 441 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 442 | }); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 443 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 444 | testUsingContext('throws, if specs repo is outdated.', () async { |
| 445 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 446 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 447 | pretendPodVersionIs('100.0.0'); |
Jonah Williams | e34c591 | 2020-06-23 11:14:38 -0700 | [diff] [blame] | 448 | fileSystem.file(fileSystem.path.join('project', 'ios', 'Podfile')) |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 449 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 450 | ..writeAsStringSync('Existing Podfile'); |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 451 | |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 452 | fakeProcessManager.addCommand( |
| 453 | const FakeCommand( |
| 454 | command: <String>['pod', 'install', '--verbose'], |
| 455 | workingDirectory: 'project/ios', |
| 456 | environment: <String, String>{ |
| 457 | 'COCOAPODS_DISABLE_STATS': 'true', |
| 458 | 'LANG': 'en_US.UTF-8', |
| 459 | }, |
| 460 | exitCode: 1, |
Ian Hickson | 6205c11 | 2023-02-17 14:27:33 -0800 | [diff] [blame^] | 461 | // This output is the output that a real CocoaPods install would generate. |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 462 | stdout: ''' |
xster | e940381 | 2017-11-10 12:41:58 -0800 | [diff] [blame] | 463 | [!] Unable to satisfy the following requirements: |
| 464 | |
| 465 | - `Firebase/Auth` required by `Podfile` |
| 466 | - `Firebase/Auth (= 4.0.0)` required by `Podfile.lock` |
| 467 | |
| 468 | None of your spec sources contain a spec satisfying the dependencies: `Firebase/Auth, Firebase/Auth (= 4.0.0)`. |
| 469 | |
| 470 | You have either: |
| 471 | * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`. |
| 472 | * mistyped the name or version. |
| 473 | * not added the source repo that hosts the Podspec to your Podfile. |
| 474 | |
| 475 | Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.''', |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 476 | ), |
| 477 | ); |
| 478 | |
| 479 | await expectLater(cocoaPodsUnderTest.processPods( |
| 480 | xcodeProject: projectUnderTest.ios, |
| 481 | buildMode: BuildMode.debug, |
| 482 | ), throwsToolExit()); |
| 483 | expect( |
| 484 | logger.errorText, |
Ian Hickson | 6205c11 | 2023-02-17 14:27:33 -0800 | [diff] [blame^] | 485 | contains("CocoaPods's specs repository is too out-of-date to satisfy dependencies"), |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 486 | ); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 487 | }); |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 488 | |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 489 | final Map<String, String> possibleErrors = <String, String>{ |
| 490 | 'symbol not found': 'LoadError - dlsym(0x7fbbeb6837d0, Init_ffi_c): symbol not found - /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi_c.bundle', |
| 491 | 'incompatible architecture': "LoadError - (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/lib/ffi_c.bundle' (no such file) - /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.4/lib/ffi_c.bundle", |
Jenn Magder | fe11f57 | 2022-04-14 14:34:10 -0700 | [diff] [blame] | 492 | 'bus error': '/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275: [BUG] Bus Error at 0x000000010072c000', |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 493 | }; |
| 494 | possibleErrors.forEach((String errorName, String cocoaPodsError) { |
| 495 | testUsingContext('ffi $errorName failure on ARM macOS prompts gem install', () async { |
| 496 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
| 497 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 498 | pretendPodVersionIs('100.0.0'); |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 499 | fileSystem.file(fileSystem.path.join('project', 'ios', 'Podfile')) |
| 500 | ..createSync() |
| 501 | ..writeAsStringSync('Existing Podfile'); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 502 | |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 503 | fakeProcessManager.addCommands(<FakeCommand>[ |
| 504 | FakeCommand( |
| 505 | command: const <String>['pod', 'install', '--verbose'], |
| 506 | workingDirectory: 'project/ios', |
| 507 | environment: const <String, String>{ |
| 508 | 'COCOAPODS_DISABLE_STATS': 'true', |
| 509 | 'LANG': 'en_US.UTF-8', |
| 510 | }, |
| 511 | exitCode: 1, |
Jenn Magder | c9825d2 | 2022-04-21 15:49:08 -0700 | [diff] [blame] | 512 | stderr: cocoaPodsError, |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 513 | ), |
| 514 | const FakeCommand( |
| 515 | command: <String>['which', 'sysctl'], |
| 516 | ), |
| 517 | const FakeCommand( |
| 518 | command: <String>['sysctl', 'hw.optional.arm64'], |
| 519 | stdout: 'hw.optional.arm64: 1', |
| 520 | ), |
| 521 | ]); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 522 | |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 523 | await expectToolExitLater( |
| 524 | cocoaPodsUnderTest.processPods( |
| 525 | xcodeProject: projectUnderTest.ios, |
| 526 | buildMode: BuildMode.debug, |
| 527 | ), |
| 528 | equals('Error running pod install'), |
| 529 | ); |
| 530 | expect( |
| 531 | logger.errorText, |
| 532 | contains('set up CocoaPods for ARM macOS'), |
| 533 | ); |
Jenn Magder | 2e1c146 | 2022-05-04 13:24:08 -0700 | [diff] [blame] | 534 | expect( |
| 535 | logger.errorText, |
| 536 | contains('enable-libffi-alloc'), |
| 537 | ); |
Jenn Magder | f7bd20f | 2021-12-07 15:29:03 -0800 | [diff] [blame] | 538 | expect(usage.events, contains(const TestUsageEvent('pod-install-failure', 'arm-ffi'))); |
| 539 | }); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 540 | }); |
| 541 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 542 | testUsingContext('ffi failure on x86 macOS does not prompt gem install', () async { |
| 543 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 544 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 545 | pretendPodVersionIs('100.0.0'); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 546 | fileSystem.file(fileSystem.path.join('project', 'ios', 'Podfile')) |
| 547 | ..createSync() |
| 548 | ..writeAsStringSync('Existing Podfile'); |
| 549 | |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 550 | fakeProcessManager.addCommands(<FakeCommand>[ |
| 551 | const FakeCommand( |
| 552 | command: <String>['pod', 'install', '--verbose'], |
| 553 | workingDirectory: 'project/ios', |
| 554 | environment: <String, String>{ |
| 555 | 'COCOAPODS_DISABLE_STATS': 'true', |
| 556 | 'LANG': 'en_US.UTF-8', |
| 557 | }, |
| 558 | exitCode: 1, |
| 559 | stderr: 'LoadError - dlsym(0x7fbbeb6837d0, Init_ffi_c): symbol not found - /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi_c.bundle', |
| 560 | ), |
| 561 | const FakeCommand( |
| 562 | command: <String>['which', 'sysctl'], |
| 563 | ), |
| 564 | const FakeCommand( |
| 565 | command: <String>['sysctl', 'hw.optional.arm64'], |
| 566 | exitCode: 1, |
| 567 | ), |
| 568 | ]); |
Jenn Magder | 37f4f1f | 2020-11-19 13:17:57 -0800 | [diff] [blame] | 569 | |
| 570 | // Capture Usage.test() events. |
| 571 | final StringBuffer buffer = |
| 572 | await capturedConsolePrint(() => expectToolExitLater( |
| 573 | cocoaPodsUnderTest.processPods( |
| 574 | xcodeProject: projectUnderTest.ios, |
| 575 | buildMode: BuildMode.debug, |
| 576 | ), |
| 577 | equals('Error running pod install'), |
| 578 | )); |
| 579 | expect( |
| 580 | logger.errorText, |
| 581 | isNot(contains('ARM macOS')), |
| 582 | ); |
| 583 | expect(buffer.isEmpty, true); |
| 584 | }); |
| 585 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 586 | testUsingContext('run pod install, if Podfile.lock is missing', () async { |
| 587 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 588 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 589 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 590 | projectUnderTest.ios.podfile |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 591 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 592 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 593 | projectUnderTest.ios.podManifestLock |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 594 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 595 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 596 | |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 597 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 598 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 599 | command: <String>['pod', 'install', '--verbose'], |
| 600 | workingDirectory: 'project/ios', |
| 601 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 602 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 603 | ]); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 604 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 605 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 606 | buildMode: BuildMode.debug, |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 607 | dependenciesChanged: false, |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 608 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 609 | expect(didInstall, isTrue); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 610 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 611 | }); |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 612 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 613 | testUsingContext('runs iOS pod install, if Manifest.lock is missing', () async { |
| 614 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 615 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 616 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 617 | projectUnderTest.ios.podfile |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 618 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 619 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 620 | projectUnderTest.ios.podfileLock |
xster | 4d2c2aa | 2017-12-27 07:30:31 -0800 | [diff] [blame] | 621 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 622 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 623 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 624 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 625 | command: <String>['pod', 'install', '--verbose'], |
| 626 | workingDirectory: 'project/ios', |
| 627 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 628 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 629 | FakeCommand( |
| 630 | command: <String>['touch', 'project/ios/Podfile.lock'], |
| 631 | ), |
| 632 | ]); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 633 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 634 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 635 | buildMode: BuildMode.debug, |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 636 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | b3e4976 | 2018-02-15 22:17:12 +0100 | [diff] [blame] | 637 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 638 | expect(didInstall, isTrue); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 639 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 640 | }); |
| 641 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 642 | testUsingContext('runs macOS pod install, if Manifest.lock is missing', () async { |
| 643 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 644 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 645 | pretendPodVersionIs('100.0.0'); |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 646 | projectUnderTest.macos.podfile |
| 647 | ..createSync() |
| 648 | ..writeAsStringSync('Existing Podfile'); |
| 649 | projectUnderTest.macos.podfileLock |
| 650 | ..createSync() |
| 651 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 652 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 653 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 654 | command: <String>['pod', 'install', '--verbose'], |
| 655 | workingDirectory: 'project/macos', |
| 656 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 657 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 658 | FakeCommand( |
| 659 | command: <String>['touch', 'project/macos/Podfile.lock'], |
| 660 | ), |
| 661 | ]); |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 662 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
| 663 | xcodeProject: projectUnderTest.macos, |
| 664 | buildMode: BuildMode.debug, |
| 665 | dependenciesChanged: false, |
| 666 | ); |
| 667 | expect(didInstall, isTrue); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 668 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 669 | }); |
| 670 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 671 | testUsingContext('runs pod install, if Manifest.lock different from Podspec.lock', () async { |
| 672 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 673 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 674 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 675 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 676 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 677 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 678 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 679 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 680 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 681 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 682 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 683 | ..writeAsStringSync('Different lock file.'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 684 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 685 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 686 | command: <String>['pod', 'install', '--verbose'], |
| 687 | workingDirectory: 'project/ios', |
| 688 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 689 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 690 | FakeCommand( |
| 691 | command: <String>['touch', 'project/ios/Podfile.lock'], |
| 692 | ), |
| 693 | ]); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 694 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 695 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 696 | buildMode: BuildMode.debug, |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 697 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 698 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 699 | expect(didInstall, isTrue); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 700 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 701 | }); |
| 702 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 703 | testUsingContext('runs pod install, if flutter framework changed', () async { |
| 704 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 705 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 706 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 707 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 708 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 709 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 710 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 711 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 712 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 713 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 714 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 715 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 716 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 717 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 718 | command: <String>['pod', 'install', '--verbose'], |
| 719 | workingDirectory: 'project/ios', |
| 720 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 721 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 722 | FakeCommand( |
| 723 | command: <String>['touch', 'project/ios/Podfile.lock'], |
| 724 | ), |
| 725 | ]); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 726 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 727 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 728 | buildMode: BuildMode.debug, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 729 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 730 | expect(didInstall, isTrue); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 731 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 732 | }); |
| 733 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 734 | testUsingContext('runs pod install, if Podfile.lock is older than Podfile', () async { |
| 735 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 736 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 737 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 738 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 739 | ..createSync() |
| 740 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 741 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 742 | ..createSync() |
| 743 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 744 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 745 | ..createSync(recursive: true) |
| 746 | ..writeAsStringSync('Existing lock file.'); |
Alexandre Ardhuin | d927c93 | 2018-09-12 08:29:29 +0200 | [diff] [blame] | 747 | await Future<void>.delayed(const Duration(milliseconds: 10)); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 748 | projectUnderTest.ios.podfile |
Alexandre Ardhuin | c2ae654 | 2020-03-05 08:03:26 +0100 | [diff] [blame] | 749 | .writeAsStringSync('Updated Podfile'); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 750 | fakeProcessManager.addCommands(const <FakeCommand>[ |
| 751 | FakeCommand( |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 752 | command: <String>['pod', 'install', '--verbose'], |
| 753 | workingDirectory: 'project/ios', |
| 754 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 755 | ), |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 756 | FakeCommand( |
| 757 | command: <String>['touch', 'project/ios/Podfile.lock'], |
| 758 | ), |
| 759 | ]); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 760 | await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 761 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 762 | buildMode: BuildMode.debug, |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 763 | dependenciesChanged: false, |
| 764 | ); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 765 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 766 | }); |
| 767 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 768 | testUsingContext('skips pod install, if nothing changed', () async { |
| 769 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 770 | projectUnderTest.ios.podfile |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 771 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 772 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 773 | projectUnderTest.ios.podfileLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 774 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 775 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 776 | projectUnderTest.ios.podManifestLock |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 777 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 778 | ..writeAsStringSync('Existing lock file.'); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 779 | final bool didInstall = await cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 780 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 781 | buildMode: BuildMode.debug, |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 782 | dependenciesChanged: false, |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 783 | ); |
Chris Bracken | cdbdafa | 2018-05-03 19:40:16 -0700 | [diff] [blame] | 784 | expect(didInstall, isFalse); |
Jenn Magder | ba764eb | 2021-04-06 15:54:02 -0700 | [diff] [blame] | 785 | expect(fakeProcessManager, hasNoRemainingExpectations); |
Mikkel Nygaard Ravn | 2000435 | 2018-02-16 10:17:28 +0100 | [diff] [blame] | 786 | }); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 787 | |
Jenn Magder | 8ddc27e | 2021-03-31 16:55:20 -0700 | [diff] [blame] | 788 | testUsingContext('a failed pod install deletes Pods/Manifest.lock', () async { |
| 789 | final FlutterProject projectUnderTest = setupProjectUnderTest(); |
Christopher Fujino | d1e0273 | 2019-08-23 09:21:09 -0700 | [diff] [blame] | 790 | pretendPodIsInstalled(); |
Jenn Magder | 320d2cf | 2022-02-24 12:11:21 -0800 | [diff] [blame] | 791 | pretendPodVersionIs('100.0.0'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 792 | projectUnderTest.ios.podfile |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 793 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 794 | ..writeAsStringSync('Existing Podfile'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 795 | projectUnderTest.ios.podfileLock |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 796 | ..createSync() |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 797 | ..writeAsStringSync('Existing lock file.'); |
Sigurd Meldgaard | 2d3a5c7 | 2018-07-20 08:00:30 +0200 | [diff] [blame] | 798 | projectUnderTest.ios.podManifestLock |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 799 | ..createSync(recursive: true) |
Mikkel Nygaard Ravn | 61c7171 | 2018-05-08 08:02:39 +0200 | [diff] [blame] | 800 | ..writeAsStringSync('Existing lock file.'); |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 801 | fakeProcessManager.addCommand( |
| 802 | const FakeCommand( |
| 803 | command: <String>['pod', 'install', '--verbose'], |
| 804 | workingDirectory: 'project/ios', |
| 805 | environment: <String, String>{'COCOAPODS_DISABLE_STATS': 'true', 'LANG': 'en_US.UTF-8'}, |
| 806 | exitCode: 1, |
| 807 | ), |
Matan Lurey | 8107089 | 2018-03-19 11:45:44 -0700 | [diff] [blame] | 808 | ); |
xster | f7f1685 | 2018-02-16 16:05:16 -0800 | [diff] [blame] | 809 | |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 810 | await expectLater(cocoaPodsUnderTest.processPods( |
stuartmorgan | 3ebebeb | 2019-05-31 13:19:44 -0700 | [diff] [blame] | 811 | xcodeProject: projectUnderTest.ios, |
Jenn Magder | e26c7f9 | 2020-11-18 13:33:04 -0800 | [diff] [blame] | 812 | buildMode: BuildMode.debug, |
Jenn Magder | dc30327 | 2021-01-29 14:32:33 -0800 | [diff] [blame] | 813 | ), throwsToolExit(message: 'Error running pod install')); |
| 814 | expect(projectUnderTest.ios.podManifestLock.existsSync(), isFalse); |
Dan Field | 704814c | 2019-02-05 16:03:37 -0800 | [diff] [blame] | 815 | }); |
| 816 | }); |
xster | 6a49419 | 2017-07-12 18:35:08 -0700 | [diff] [blame] | 817 | } |
| 818 | |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 819 | class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterpreter { |
| 820 | FakeXcodeProjectInterpreter({this.isInstalled = true, this.buildSettings = const <String, String>{}}); |
| 821 | |
| 822 | @override |
| 823 | final bool isInstalled; |
| 824 | |
| 825 | @override |
| 826 | Future<Map<String, String>> getBuildSettings( |
| 827 | String projectPath, { |
Jonah Williams | db829c1 | 2022-06-17 21:34:27 -0700 | [diff] [blame] | 828 | XcodeProjectBuildContext? buildContext, |
Jenn Magder | 0cf1007 | 2021-03-16 13:53:04 -0700 | [diff] [blame] | 829 | Duration timeout = const Duration(minutes: 1), |
| 830 | }) async => buildSettings; |
| 831 | |
| 832 | final Map<String, String> buildSettings; |
| 833 | } |