12a38a11eSExponent GitHub Bot// Copyright 2015-present 650 Industries. All rights reserved. 22a38a11eSExponent GitHub Bot 3d5e9e21bSBen Roth#import "ExpoKit.h" 4*652b7dd7SBen Roth#import "EXKernel.h" 5*652b7dd7SBen Roth#import "EXKernelLinkingManager.h" 6d5e9e21bSBen Roth#import "EXRootViewController.h" 7*652b7dd7SBen Roth#import "EXShellManager.h" 89aa11ec8SBen Roth#import "EXTest.h" 9d5e9e21bSBen Roth 10d5e9e21bSBen Roth#import <React/RCTAssert.h> 11d5e9e21bSBen Roth#import <React/RCTUtils.h> 122a38a11eSExponent GitHub Bot 132a38a11eSExponent GitHub Bot#import <XCTest/XCTest.h> 142a38a11eSExponent GitHub Bot 152a38a11eSExponent GitHub Bot@interface ExponentIntegrationTests : XCTestCase 162a38a11eSExponent GitHub Bot 17d5e9e21bSBen Roth@property (nonatomic, strong) EXRootViewController *rootViewController; 189aa11ec8SBen Roth@property (nonatomic, strong) NSDictionary *jsTestSuiteResult; 19d5e9e21bSBen Roth 202a38a11eSExponent GitHub Bot@end 212a38a11eSExponent GitHub Bot 222a38a11eSExponent GitHub Bot@implementation ExponentIntegrationTests 232a38a11eSExponent GitHub Bot 242a38a11eSExponent GitHub Bot- (void)setUp 252a38a11eSExponent GitHub Bot{ 262a38a11eSExponent GitHub Bot [super setUp]; 279aa11ec8SBen Roth 289aa11ec8SBen Roth _jsTestSuiteResult = nil; 29d5e9e21bSBen Roth _rootViewController = (EXRootViewController *)[ExpoKit sharedInstance].rootViewController; 30*652b7dd7SBen Roth [[NSNotificationCenter defaultCenter] addObserver:self 31*652b7dd7SBen Roth selector:@selector(_onKernelJSLoaded) 32*652b7dd7SBen Roth name:kEXKernelJSIsLoadedNotification 33*652b7dd7SBen Roth object:nil]; 34*652b7dd7SBen Roth [[NSNotificationCenter defaultCenter] addObserver:self 35*652b7dd7SBen Roth selector:@selector(_onTestSuiteCompleted:) 36*652b7dd7SBen Roth name:EXTestSuiteCompletedNotification object:nil]; 372a38a11eSExponent GitHub Bot} 382a38a11eSExponent GitHub Bot 39d5e9e21bSBen Roth- (void)testDoesTestSuiteAppPassAllJSTests 402a38a11eSExponent GitHub Bot{ 41d5e9e21bSBen Roth [_rootViewController applicationWillEnterForeground]; 422a38a11eSExponent GitHub Bot 439aa11ec8SBen Roth // wait for JS 449aa11ec8SBen Roth NSDate *dateToTimeOut = [NSDate dateWithTimeIntervalSinceNow:60]; 459aa11ec8SBen Roth while (dateToTimeOut.timeIntervalSinceNow > 0 && _jsTestSuiteResult == nil) { 46d5e9e21bSBen Roth [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 47d5e9e21bSBen Roth [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 48d5e9e21bSBen Roth } 499aa11ec8SBen Roth XCTAssert((_jsTestSuiteResult), @"Test suite timed out"); 509aa11ec8SBen Roth XCTAssert(([_jsTestSuiteResult[@"failed"] integerValue] == 0), @"Test suite failed: %@", _jsTestSuiteResult); 519aa11ec8SBen Roth} 529aa11ec8SBen Roth 539aa11ec8SBen Roth#pragma mark - internal 549aa11ec8SBen Roth 55*652b7dd7SBen Roth- (void)_onKernelJSLoaded 56*652b7dd7SBen Roth{ 57*652b7dd7SBen Roth // if test environment isn't configured for a shell app, override here 58*652b7dd7SBen Roth // since clearly we're running tests 59*652b7dd7SBen Roth if ([EXShellManager sharedInstance].testEnvironment == EXTestEnvironmentNone) { 60*652b7dd7SBen Roth [EXShellManager sharedInstance].testEnvironment = EXTestEnvironmentLocal; 61*652b7dd7SBen Roth } 62*652b7dd7SBen Roth [[EXKernel sharedInstance].serviceRegistry.linkingManager openUrl:@"exp://localhost:19002" isUniversalLink:NO]; 63*652b7dd7SBen Roth} 64*652b7dd7SBen Roth 659aa11ec8SBen Roth- (void)_onTestSuiteCompleted:(NSNotification *)notif 669aa11ec8SBen Roth{ 679aa11ec8SBen Roth _jsTestSuiteResult = notif.userInfo; 682a38a11eSExponent GitHub Bot} 692a38a11eSExponent GitHub Bot 702a38a11eSExponent GitHub Bot@end 71