1// Copyright 2016-present 650 Industries. All rights reserved.
2
3#import <XCTest/XCTest.h>
4#import <ExpoModulesCore/EXAppDefines.h>
5
6@interface EXAppDefines (EXAppDefinesWithUnloader)
7
8+ (void)_unload;
9
10@end
11
12@interface EXAppDefinesTest : XCTestCase
13
14@end
15
16@implementation EXAppDefinesTest
17
18- (void)setUp
19{
20  // EXAppDefines expects to load just once.
21  // To make it testable with difference test cases,
22  // we call the internal private `_unload` method to reset state.
23  [EXAppDefines performSelector:@selector(_unload)];
24}
25
26- (void)test_load
27{
28  NSDictionary *defines = @{
29    @"APP_DEBUG": @(YES),
30    @"APP_RCT_DEBUG": @(YES),
31    @"APP_RCT_DEV": @(YES),
32  };
33  XCTAssertNoThrow([EXAppDefines load:defines]);
34}
35
36- (void)test_load_throwIfLoadedTwice
37{
38  NSDictionary *defines = @{
39    @"APP_DEBUG": @(YES),
40    @"APP_RCT_DEBUG": @(YES),
41    @"APP_RCT_DEV": @(YES),
42  };
43  XCTAssertNoThrow([EXAppDefines load:defines]);
44  XCTAssertThrows([EXAppDefines load:defines]);
45}
46
47- (void)test_loadAndGetAppDebug_shouldMatchDebugDefines
48{
49  NSDictionary *defines = @{
50    @"APP_DEBUG": @(YES),
51    @"APP_RCT_DEBUG": @(YES),
52    @"APP_RCT_DEV": @(YES),
53  };
54  [EXAppDefines load:defines];
55  XCTAssertEqual(EXAppDefines.APP_DEBUG, YES);
56}
57
58- (void)test_loadAndGetAppDebug_shouldMatchReleaseDefines
59{
60  NSDictionary *defines = @{
61    @"APP_DEBUG": @(NO),
62    @"APP_RCT_DEBUG": @(NO),
63    @"APP_RCT_DEV": @(NO),
64  };
65  [EXAppDefines load:defines];
66  XCTAssertEqual(EXAppDefines.APP_DEBUG, NO);
67}
68
69- (void)test_getters_returnsDefaultValues
70{
71  XCTAssertNoThrow([EXAppDefines load:@{}]);
72  XCTAssertEqual(EXAppDefines.APP_DEBUG, NO);
73  XCTAssertEqual(EXAppDefines.APP_RCT_DEBUG, NO);
74  XCTAssertEqual(EXAppDefines.APP_RCT_DEV, NO);
75  XCTAssertEqual(EXAppDefines.getAllDefines.count, 0u);
76}
77
78- (void)test_getAppDebug_throwIfNotLoaded
79{
80  XCTAssertThrows(EXAppDefines.APP_DEBUG);
81}
82
83- (void)test_passExtraDefines_shouldGetMatchedDefines
84{
85  NSDictionary *defines = @{
86    @"APP_DEBUG": @(YES),
87    @"APP_RCT_DEBUG": @(YES),
88    @"APP_RCT_DEV": @(YES),
89    @"foo": @1,
90    @"bar": @2,
91  };
92
93  [EXAppDefines load:defines];
94  NSDictionary *result = EXAppDefines.getAllDefines;
95  XCTAssertEqual([result[@"foo"] intValue], 1);
96  XCTAssertEqual([result[@"bar"] intValue], 2);
97}
98
99@end
100