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 stringForKey:@"string"], @"hello");
26  XCTAssertThrows([self.testData stringForKey:@"number"]);
27  XCTAssertThrows([self.testData stringForKey:@"nonexistent"]);
28}
29
30- (void)test_nullableStringForKey {
31  XCTAssertEqual([self.testData nullableStringForKey:@"string"], @"hello");
32  XCTAssertNil([self.testData nullableStringForKey:@"nonexistent"]);
33  XCTAssertThrows([self.testData nullableStringForKey:@"number"]);
34}
35
36- (void)test_numberForKey {
37  XCTAssertEqual([self.testData numberForKey:@"number"], @2);
38  XCTAssertThrows([self.testData numberForKey:@"string"]);
39  XCTAssertThrows([self.testData numberForKey:@"nonexistent"]);
40}
41
42- (void)test_nullableNumberForKey {
43  XCTAssertEqual([self.testData nullableNumberForKey:@"number"], @2);
44  XCTAssertNil([self.testData nullableNumberForKey:@"nonexistent"]);
45  XCTAssertThrows([self.testData nullableNumberForKey:@"string"]);
46}
47
48- (void)test_dictionaryForKey {
49  XCTAssertEqual([self.testData dictionaryForKey:@"dictionary"], @{});
50  XCTAssertThrows([self.testData dictionaryForKey:@"string"]);
51  XCTAssertThrows([self.testData dictionaryForKey:@"nonexistent"]);
52}
53
54- (void)test_nullableDictionaryForKey {
55  XCTAssertEqual([self.testData nullableDictionaryForKey:@"dictionary"], @{});
56  XCTAssertNil([self.testData nullableDictionaryForKey:@"nonexistent"]);
57  XCTAssertThrows([self.testData nullableDictionaryForKey:@"string"]);
58}
59
60- (void)arrayForKey {
61  XCTAssertEqual([self.testData arrayForKey:@"array"], @[]);
62  XCTAssertThrows([self.testData arrayForKey:@"string"]);
63  XCTAssertThrows([self.testData arrayForKey:@"nonexistent"]);
64}
65
66- (void)test_nullableArrayForKey {
67  XCTAssertEqual([self.testData nullableArrayForKey:@"array"], @[]);
68  XCTAssertNil([self.testData nullableArrayForKey:@"nonexistent"]);
69  XCTAssertThrows([self.testData nullableArrayForKey:@"string"]);
70}
71
72@end
73