FBSimulatorControlTests/Fixtures/FBSimulatorControlFixtures.m (139 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "FBSimulatorControlFixtures.h"
#import <FBControlCore/FBControlCore.h>
#import <XCTestBootstrap/XCTestBootstrap.h>
#import <FBSimulatorControl/FBSimulatorControl.h>
#import <XCTestBootstrap/XCTestBootstrap.h>
@implementation FBSimulatorControlFixtures
+ (FBBundleDescriptor *)tableSearchApplicationWithError:(NSError **)error
{
NSString *path = [[NSBundle bundleForClass:self] pathForResource:@"TableSearch" ofType:@"app"];
return [FBBundleDescriptor bundleFromPath:path error:error];
}
+ (NSString *)photo0Path
{
return [[NSBundle bundleForClass:self] pathForResource:@"photo0" ofType:@"png"];
}
+ (NSString *)photo1Path
{
return [[NSBundle bundleForClass:self] pathForResource:@"photo1" ofType:@"png"];
}
+ (NSString *)video0Path
{
return [[NSBundle bundleForClass:self] pathForResource:@"video0" ofType:@"mp4"];
}
+ (NSString *)simulatorSystemLogPath
{
return [[NSBundle bundleForClass:self] pathForResource:@"simulator_system" ofType:@"log"];
}
+ (NSString *)treeJSONPath
{
return [[NSBundle bundleForClass:self] pathForResource:@"tree" ofType:@"json"];
}
+ (NSString *)iOSUnitTestBundlePath
{
return [[NSBundle bundleForClass:self] pathForResource:@"iOSUnitTestFixture" ofType:@"xctest"];
}
@end
@implementation XCTestCase (FBSimulatorControlFixtures)
- (FBTestLaunchConfiguration *)testLaunchTableSearch
{
return [[FBTestLaunchConfiguration alloc]
initWithTestBundle:self.iOSUnitTestBundle
applicationLaunchConfiguration:self.tableSearchAppLaunch
testHostBundle:nil
timeout:0
initializeUITesting:NO
useXcodebuild:NO
testsToRun:nil
testsToSkip:nil
targetApplicationBundle:nil
xcTestRunProperties:nil
resultBundlePath:nil
reportActivities:NO
coverageDirectoryPath:nil
logDirectoryPath:nil];
}
- (FBTestLaunchConfiguration *)testLaunchSafari
{
return [[FBTestLaunchConfiguration alloc]
initWithTestBundle:self.iOSUnitTestBundle
applicationLaunchConfiguration:self.safariAppLaunch
testHostBundle:nil
timeout:0
initializeUITesting:NO
useXcodebuild:NO
testsToRun:nil
testsToSkip:nil
targetApplicationBundle:nil
xcTestRunProperties:nil
resultBundlePath:nil
reportActivities:NO
coverageDirectoryPath:nil
logDirectoryPath:nil];
}
- (FBBundleDescriptor *)tableSearchApplication
{
NSError *error = nil;
FBBundleDescriptor *value = [FBSimulatorControlFixtures tableSearchApplicationWithError:&error];
XCTAssertNil(error);
XCTAssertNotNil(value);
return value;
}
static NSString *const MobileSafariBundleName = @"MobileSafari";
static NSString *const MobileSafariBundleIdentifier = @"com.apple.mobilesafari";
- (FBApplicationLaunchConfiguration *)tableSearchAppLaunch
{
FBBundleDescriptor *application = self.tableSearchApplication;
if (!application) {
return nil;
}
return [[FBApplicationLaunchConfiguration alloc]
initWithBundleID:application.identifier
bundleName:application.name
arguments:@[]
environment:@{@"FROM" : @"FBSIMULATORCONTROL"}
waitForDebugger:NO
io:FBProcessIO.outputToDevNull
launchMode:FBApplicationLaunchModeFailIfRunning];
}
- (FBApplicationLaunchConfiguration *)safariAppLaunch
{
return [self safariAppLaunchWithMode:FBApplicationLaunchModeFailIfRunning];
}
- (FBApplicationLaunchConfiguration *)safariAppLaunchWithMode:(FBApplicationLaunchMode)launchMode
{
return [[FBApplicationLaunchConfiguration alloc]
initWithBundleID:MobileSafariBundleIdentifier
bundleName:MobileSafariBundleName
arguments:@[]
environment:@{@"FROM" : @"FBSIMULATORCONTROL"}
waitForDebugger:NO
io:FBProcessIO.outputToDevNull
launchMode:launchMode];
}
- (FBProcessSpawnConfiguration *)agentLaunch1
{
return [[FBProcessSpawnConfiguration alloc]
initWithLaunchPath:[FBBinaryDescriptor binaryWithPath:NSProcessInfo.processInfo.arguments[0] error:nil].path
arguments:@[@"BINGBONG"]
environment:@{@"FIB" : @"BLE"}
io:FBProcessIO.outputToDevNull
mode:FBProcessSpawnModeDefault];
}
- (nullable FBBundleDescriptor *)iOSUnitTestBundle
{
NSError *error = nil;
NSString *bundlePath = FBSimulatorControlFixtures.iOSUnitTestBundlePath;
FBBundleDescriptor * bundle = [FBBundleDescriptor bundleFromPath:bundlePath error:&error];
XCTAssert(bundle, @"Failed to load bundle at %@: %@", bundlePath, error);
FBCodesignProvider *codesign = [FBCodesignProvider codeSignCommandWithAdHocIdentityWithLogger:nil];
if ([[codesign cdHashForBundleAtPath:bundlePath] await:nil]) {
return bundle;
}
if ([[codesign signBundleAtPath:bundlePath] await:&error]) {
return bundle;
}
XCTFail(@"Bundle at path %@ could not be codesigned: %@", bundlePath, error);
return nil;
}
@end