1// Copyright 2015-present 650 Industries. All rights reserved.
2
3#import "EXTest.h"
4#import "EXUnversioned.h"
5
6NSNotificationName EXTestSuiteCompletedNotification = @"EXTestSuiteCompletedNotification";
7
8@interface EXTest ()
9
10@property (nonatomic, assign) EXTestEnvironment environment;
11
12@end
13
14@implementation EXTest
15
16+ (NSString *)moduleName { return @"ExponentTest"; }
17
18- (instancetype)initWithEnvironment:(EXTestEnvironment)environment
19{
20  if (self = [super init]) {
21    _environment = environment;
22  }
23  return self;
24}
25
26RCT_EXPORT_METHOD(completed: (NSString *)jsonStringifiedResult)
27{
28  NSDictionary *failedResult = @{ @"failed": @(1) };
29
30  __block NSError *jsonError;
31  NSData *jsonData = [jsonStringifiedResult dataUsingEncoding:NSUTF8StringEncoding];
32  id resultObj = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&jsonError];
33  if (jsonError) {
34    resultObj = failedResult;
35  }
36
37  [[NSNotificationCenter defaultCenter] postNotificationName:EX_UNVERSIONED(@"EXTestSuiteCompletedNotification")
38                                                      object:nil
39                                                    userInfo:resultObj];
40}
41
42RCT_REMAP_METHOD(action,
43                 actionWithParams:(NSDictionary *)params
44                 withResolver:(RCTPromiseResolveBlock)resolve
45                 rejecter:(__unused RCTPromiseRejectBlock)reject)
46{
47  // stub on iOS
48  resolve(@{});
49}
50
51RCT_REMAP_METHOD(shouldSkipTestsRequiringPermissionsAsync,
52                 shouldSkipTestsRequiringPermissionsWithResolver:(RCTPromiseResolveBlock)resolve
53                 rejecter:(__unused RCTPromiseRejectBlock)reject)
54{
55  resolve(@(_environment == EXTestEnvironmentCI));
56}
57
58#pragma mark - util
59
60+ (EXTestEnvironment)testEnvironmentFromString:(NSString *)testEnvironmentString
61{
62  if ([testEnvironmentString isEqualToString:@"local"]) {
63    return EXTestEnvironmentLocal;
64  } else if ([testEnvironmentString isEqualToString:@"ci"]) {
65    return EXTestEnvironmentCI;
66  }
67  return EXTestEnvironmentNone;
68}
69
70@end
71