FBSimulatorControlTests/Utilities/FBSimulatorControlTestCase.m (88 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 "FBSimulatorControlTestCase.h"
#import <FBSimulatorControl/FBSimulatorControl.h>
#import "FBSimulatorControlAssertions.h"
static NSString *const DeviceSetEnvKey = @"FBSIMULATORCONTROL_DEVICE_SET";
static NSString *const DeviceSetEnvDefault = @"default";
static NSString *const DeviceSetEnvCustom = @"custom";
static NSString *const LaunchTypeEnvKey = @"FBSIMULATORCONTROL_LAUNCH_TYPE";
static NSString *const LaunchTypeSimulatorApp = @"simulator_app";
static NSString *const LaunchTypeDirect = @"direct";
static NSString *const RecordVideoEnvKey = @"FBSIMULATORCONTROL_RECORD_VIDEO";
@interface FBSimulatorControlTestCase ()
@end
@implementation FBSimulatorControlTestCase
@synthesize control = _control;
+ (void)initialize
{
if (!NSProcessInfo.processInfo.environment[FBControlCoreStderrLogging]) {
setenv(FBControlCoreStderrLogging.UTF8String, "YES", 1);
}
if (!NSProcessInfo.processInfo.environment[FBControlCoreDebugLogging]) {
setenv(FBControlCoreDebugLogging.UTF8String, "NO", 1);
}
[FBControlCoreGlobalConfiguration.defaultLogger logFormat:@"Current Configuration => %@", FBControlCoreGlobalConfiguration.description];
[FBSimulatorControlFrameworkLoader.essentialFrameworks loadPrivateFrameworksOrAbort];
}
#pragma mark Property Overrides
- (FBSimulatorControl *)control
{
if (!_control) {
FBSimulatorControlConfiguration *configuration = [FBSimulatorControlConfiguration
configurationWithDeviceSetPath:self.deviceSetPath
logger:nil
reporter:nil];
NSError *error;
FBSimulatorControl *control = [FBSimulatorControl withConfiguration:configuration error:&error];
XCTAssertNil(error);
XCTAssertNotNil(control);
_control = control;
}
return _control;
}
#pragma mark Configuration
+ (BOOL)isRunningOnTravis
{
if (NSProcessInfo.processInfo.environment[@"TRAVIS"]) {
NSLog(@"Running in Travis environment, skipping test");
return YES;
}
return NO;
}
+ (BOOL)useDirectLaunching
{
return ![NSProcessInfo.processInfo.environment[LaunchTypeEnvKey] isEqualToString:LaunchTypeSimulatorApp];
}
+ (FBSimulatorBootOptions)bootOptions
{
FBSimulatorBootOptions options = 0;
if (self.useDirectLaunching) {
options = options | FBSimulatorBootOptionsTieToProcessLifecycle;
}
return options;
}
+ (NSString *)defaultDeviceSetPath
{
NSString *value = NSProcessInfo.processInfo.environment[DeviceSetEnvKey];
if ([value isEqualToString:DeviceSetEnvCustom]) {
return [NSTemporaryDirectory() stringByAppendingPathComponent:@"FBSimulatorControlSimulatorLaunchTests_CustomSet"];
}
return nil;
}
+ (FBSimulatorBootConfiguration *)defaultBootConfiguration
{
return [[FBSimulatorBootConfiguration alloc] initWithOptions:self.bootOptions environment:@{}];
}
#pragma mark XCTestCase
- (void)setUp
{
self.continueAfterFailure = NO;
self.simulatorConfiguration = [FBSimulatorConfiguration.defaultConfiguration withDeviceModel:FBDeviceModeliPhoneSE_1stGeneration];
self.bootConfiguration = [[FBSimulatorBootConfiguration alloc] initWithOptions:FBSimulatorControlTestCase.bootOptions environment:@{}];
self.deviceSetPath = FBSimulatorControlTestCase.defaultDeviceSetPath;
}
- (void)tearDown
{
[[self.control.set shutdownAll] await:nil];
_control = nil;
}
@end