Unverified Commit 0cf10072 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Remove mocks from cocoapods_test (#78279)

parent b3fa6eb6
...@@ -11,13 +11,12 @@ import 'package:flutter_tools/src/base/logger.dart'; ...@@ -11,13 +11,12 @@ import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:flutter_tools/src/ios/xcodeproj.dart'; import 'package:flutter_tools/src/ios/xcodeproj.dart';
import 'package:flutter_tools/src/macos/cocoapods.dart'; import 'package:flutter_tools/src/macos/cocoapods.dart';
import 'package:flutter_tools/src/plugins.dart'; import 'package:flutter_tools/src/plugins.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/reporting/reporting.dart';
import 'package:mockito/mockito.dart'; import 'package:test/fake.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/context.dart';
...@@ -27,7 +26,6 @@ typedef InvokeProcess = Future<ProcessResult> Function(); ...@@ -27,7 +26,6 @@ typedef InvokeProcess = Future<ProcessResult> Function();
void main() { void main() {
FileSystem fileSystem; FileSystem fileSystem;
FakeProcessManager fakeProcessManager; FakeProcessManager fakeProcessManager;
MockXcodeProjectInterpreter mockXcodeProjectInterpreter;
FlutterProject projectUnderTest; FlutterProject projectUnderTest;
CocoaPods cocoaPodsUnderTest; CocoaPods cocoaPodsUnderTest;
BufferLogger logger; BufferLogger logger;
...@@ -64,7 +62,6 @@ void main() { ...@@ -64,7 +62,6 @@ void main() {
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]); fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
logger = BufferLogger.test(); logger = BufferLogger.test();
mockXcodeProjectInterpreter = MockXcodeProjectInterpreter();
projectUnderTest = FlutterProject.fromDirectory(fileSystem.directory('project')); projectUnderTest = FlutterProject.fromDirectory(fileSystem.directory('project'));
projectUnderTest.ios.xcodeProject.createSync(recursive: true); projectUnderTest.ios.xcodeProject.createSync(recursive: true);
projectUnderTest.macos.xcodeProject.createSync(recursive: true); projectUnderTest.macos.xcodeProject.createSync(recursive: true);
...@@ -74,7 +71,7 @@ void main() { ...@@ -74,7 +71,7 @@ void main() {
processManager: fakeProcessManager, processManager: fakeProcessManager,
logger: logger, logger: logger,
platform: FakePlatform(operatingSystem: 'macos'), platform: FakePlatform(operatingSystem: 'macos'),
xcodeProjectInterpreter: mockXcodeProjectInterpreter, xcodeProjectInterpreter: FakeXcodeProjectInterpreter(),
usage: usage, usage: usage,
); );
fileSystem.file(fileSystem.path.join( fileSystem.file(fileSystem.path.join(
...@@ -175,32 +172,29 @@ void main() { ...@@ -175,32 +172,29 @@ void main() {
}); });
group('Setup Podfile', () { group('Setup Podfile', () {
setUp(() {
when(mockXcodeProjectInterpreter.isInstalled).thenReturn(true);
});
testWithoutContext('creates objective-c Podfile when not present', () async { testWithoutContext('creates objective-c Podfile when not present', () async {
when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: null, timeout: anyNamed('timeout')))
.thenAnswer((_) async => <String, String>{});
await cocoaPodsUnderTest.setupPodfile(projectUnderTest.ios); await cocoaPodsUnderTest.setupPodfile(projectUnderTest.ios);
expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Objective-C iOS podfile template'); expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Objective-C iOS podfile template');
}); });
testUsingContext('creates swift Podfile if swift', () async { testWithoutContext('creates swift Podfile if swift', () async {
when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: null, timeout: anyNamed('timeout'))) final FakeXcodeProjectInterpreter fakeXcodeProjectInterpreter = FakeXcodeProjectInterpreter(buildSettings: <String, String>{
.thenAnswer((_) async => <String, String>{ 'SWIFT_VERSION': '5.0',
'SWIFT_VERSION': '5.0', });
}); final CocoaPods cocoaPodsUnderTest = CocoaPods(
fileSystem: fileSystem,
processManager: fakeProcessManager,
logger: logger,
platform: FakePlatform(operatingSystem: 'macos'),
xcodeProjectInterpreter: fakeXcodeProjectInterpreter,
usage: usage,
);
final FlutterProject project = FlutterProject.fromDirectoryTest(globals.fs.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await cocoaPodsUnderTest.setupPodfile(project.ios); await cocoaPodsUnderTest.setupPodfile(project.ios);
expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Swift iOS podfile template'); expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Swift iOS podfile template');
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
XcodeProjectInterpreter: () => mockXcodeProjectInterpreter,
}); });
testWithoutContext('creates macOS Podfile when not present', () async { testWithoutContext('creates macOS Podfile when not present', () async {
...@@ -210,32 +204,32 @@ void main() { ...@@ -210,32 +204,32 @@ void main() {
expect(projectUnderTest.macos.podfile.readAsStringSync(), 'macOS podfile template'); expect(projectUnderTest.macos.podfile.readAsStringSync(), 'macOS podfile template');
}); });
testUsingContext('does not recreate Podfile when already present', () async { testWithoutContext('does not recreate Podfile when already present', () async {
projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile');
final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await cocoaPodsUnderTest.setupPodfile(project.ios); await cocoaPodsUnderTest.setupPodfile(project.ios);
expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Existing Podfile'); expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Existing Podfile');
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
}); });
testUsingContext('does not create Podfile when we cannot interpret Xcode projects', () async { testWithoutContext('does not create Podfile when we cannot interpret Xcode projects', () async {
when(mockXcodeProjectInterpreter.isInstalled).thenReturn(false); final CocoaPods cocoaPodsUnderTest = CocoaPods(
fileSystem: fileSystem,
processManager: fakeProcessManager,
logger: logger,
platform: FakePlatform(operatingSystem: 'macos'),
xcodeProjectInterpreter: FakeXcodeProjectInterpreter(isInstalled: false),
usage: usage,
);
final FlutterProject project = FlutterProject.fromDirectoryTest(globals.fs.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await cocoaPodsUnderTest.setupPodfile(project.ios); await cocoaPodsUnderTest.setupPodfile(project.ios);
expect(projectUnderTest.ios.podfile.existsSync(), false); expect(projectUnderTest.ios.podfile.existsSync(), false);
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
XcodeProjectInterpreter: () => mockXcodeProjectInterpreter,
}); });
testUsingContext('includes Pod config in xcconfig files, if not present', () async { testWithoutContext('includes Pod config in xcconfig files, if not present', () async {
projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile');
projectUnderTest.ios.xcodeConfigFor('Debug') projectUnderTest.ios.xcodeConfigFor('Debug')
..createSync(recursive: true) ..createSync(recursive: true)
...@@ -244,7 +238,7 @@ void main() { ...@@ -244,7 +238,7 @@ void main() {
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('Existing release config'); ..writeAsStringSync('Existing release config');
final FlutterProject project = FlutterProject.fromDirectoryTest(globals.fs.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await cocoaPodsUnderTest.setupPodfile(project.ios); await cocoaPodsUnderTest.setupPodfile(project.ios);
final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync();
...@@ -255,12 +249,9 @@ void main() { ...@@ -255,12 +249,9 @@ void main() {
expect(releaseContents, contains( expect(releaseContents, contains(
'#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n')); '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"\n'));
expect(releaseContents, contains('Existing release config')); expect(releaseContents, contains('Existing release config'));
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
}); });
testUsingContext('does not include Pod config in xcconfig files, if legacy non-option include present', () async { testWithoutContext('does not include Pod config in xcconfig files, if legacy non-option include present', () async {
projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile');
const String legacyDebugInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig'; const String legacyDebugInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig';
...@@ -272,7 +263,7 @@ void main() { ...@@ -272,7 +263,7 @@ void main() {
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync(legacyReleaseInclude); ..writeAsStringSync(legacyReleaseInclude);
final FlutterProject project = FlutterProject.fromDirectoryTest(globals.fs.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await cocoaPodsUnderTest.setupPodfile(project.ios); await cocoaPodsUnderTest.setupPodfile(project.ios);
final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync();
...@@ -283,15 +274,12 @@ void main() { ...@@ -283,15 +274,12 @@ void main() {
final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync();
expect(releaseContents, isNot(contains('#include?'))); expect(releaseContents, isNot(contains('#include?')));
expect(releaseContents, equals(legacyReleaseInclude)); expect(releaseContents, equals(legacyReleaseInclude));
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
}); });
}); });
group('Update xcconfig', () { group('Update xcconfig', () {
testUsingContext('includes Pod config in xcconfig files, if the user manually added Pod dependencies without using Flutter plugins', () async { testUsingContext('includes Pod config in xcconfig files, if the user manually added Pod dependencies without using Flutter plugins', () async {
globals.fs.file(globals.fs.path.join('project', 'foo', '.packages')) fileSystem.file(fileSystem.path.join('project', 'foo', '.packages'))
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('\n'); ..writeAsStringSync('\n');
projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Custom Podfile'); projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Custom Podfile');
...@@ -304,7 +292,7 @@ void main() { ...@@ -304,7 +292,7 @@ void main() {
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('Existing release config'); ..writeAsStringSync('Existing release config');
final FlutterProject project = FlutterProject.fromDirectoryTest(globals.fs.directory('project')); final FlutterProject project = FlutterProject.fromDirectoryTest(fileSystem.directory('project'));
await injectPlugins(project, iosPlatform: true); await injectPlugins(project, iosPlatform: true);
final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync();
...@@ -757,4 +745,18 @@ Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by ...@@ -757,4 +745,18 @@ Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by
}); });
} }
class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {} class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterpreter {
FakeXcodeProjectInterpreter({this.isInstalled = true, this.buildSettings = const <String, String>{}});
@override
final bool isInstalled;
@override
Future<Map<String, String>> getBuildSettings(
String projectPath, {
String scheme,
Duration timeout = const Duration(minutes: 1),
}) async => buildSettings;
final Map<String, String> buildSettings;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment