1//  Copyright (c) 2020 650 Industries, Inc. All rights reserved.
2
3#import <XCTest/XCTest.h>
4
5#import <EXJSONUtils/NSDictionary+EXJSONUtils.h>
6
7@interface NSDictionaryEXManifestsManifestTest : XCTestCase
8
9@property (nonatomic, strong) NSDictionary *testData;
10
11@end
12
13@implementation NSDictionaryEXManifestsManifestTest
14
15- (void)setUp {
16  _testData = @{
17    @"string": @"hello",
18    @"number": @2,
19    @"dictionary": @{},
20    @"array": @[],
21  };
22}
23
24- (void)test_stringForKey {
25  XCTAssertEqual([self.testData expo_stringForKey:@"string"], @"hello");
26  XCTAssertThrows([self.testData expo_stringForKey:@"number"]);
27  XCTAssertThrows([self.testData expo_stringForKey:@"nonexistent"]);
28}
29
30- (void)test_nullableStringForKey {
31  XCTAssertEqual([self.testData expo_nullableStringForKey:@"string"], @"hello");
32  XCTAssertNil([self.testData expo_nullableStringForKey:@"nonexistent"]);
33  XCTAssertThrows([self.testData expo_nullableStringForKey:@"number"]);
34}
35
36- (void)test_numberForKey {
37  XCTAssertEqual([self.testData expo_numberForKey:@"number"], @2);
38  XCTAssertThrows([self.testData expo_numberForKey:@"string"]);
39  XCTAssertThrows([self.testData expo_numberForKey:@"nonexistent"]);
40}
41
42- (void)test_nullableNumberForKey {
43  XCTAssertEqual([self.testData expo_nullableNumberForKey:@"number"], @2);
44  XCTAssertNil([self.testData expo_nullableNumberForKey:@"nonexistent"]);
45  XCTAssertThrows([self.testData expo_nullableNumberForKey:@"string"]);
46}
47
48- (void)test_dictionaryForKey {
49  XCTAssertEqual([self.testData expo_dictionaryForKey:@"dictionary"], @{});
50  XCTAssertThrows([self.testData expo_dictionaryForKey:@"string"]);
51  XCTAssertThrows([self.testData expo_dictionaryForKey:@"nonexistent"]);
52}
53
54- (void)test_nullableDictionaryForKey {
55  XCTAssertEqual([self.testData expo_nullableDictionaryForKey:@"dictionary"], @{});
56  XCTAssertNil([self.testData expo_nullableDictionaryForKey:@"nonexistent"]);
57  XCTAssertThrows([self.testData expo_nullableDictionaryForKey:@"string"]);
58}
59
60- (void)arrayForKey {
61  XCTAssertEqual([self.testData expo_arrayForKey:@"array"], @[]);
62  XCTAssertThrows([self.testData expo_arrayForKey:@"string"]);
63  XCTAssertThrows([self.testData expo_arrayForKey:@"nonexistent"]);
64}
65
66- (void)test_nullableArrayForKey {
67  XCTAssertEqual([self.testData expo_nullableArrayForKey:@"array"], @[]);
68  XCTAssertNil([self.testData expo_nullableArrayForKey:@"nonexistent"]);
69  XCTAssertThrows([self.testData expo_nullableArrayForKey:@"string"]);
70}
71
72@end
73