-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSTConfigTests.m
132 lines (95 loc) · 3.8 KB
/
STConfigTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//
// STConfigTests.m
// StoryTeller
//
// Created by Derek Clarkson on 22/06/2015.
// Copyright © 2015 Derek Clarkson. All rights reserved.
//
@import XCTest;
@import StoryTeller;
@import StoryTeller.Private;
#import <OCMock/OCMock.h>
#import "InMemoryLogger.h"
@interface STConfigTests : XCTestCase
@property (nonatomic, assign) BOOL booleanProperty;
@end
@implementation STConfigTests {
id _mockProcessInfo;
}
-(void) tearDown {
[_mockProcessInfo stopMocking];
}
-(void) testLogAll {
// Test
STConfig *config = [[STConfig alloc] init];
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
[config configure:mockStoryTeller];
// Verify
OCMVerify([mockStoryTeller setLogger:[OCMArg isKindOfClass:[STConsoleLogger class]]]);
}
-(void) testConfigWithDefault {
// Test
STConfig *config = [[STConfig alloc] init];
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
[config configure:mockStoryTeller];
// Verify
OCMVerify([mockStoryTeller setLogger:[OCMArg isKindOfClass:[STConsoleLogger class]]]);
}
-(void) testConfigReadsCommandLineArgs {
[self mockProcessInfo];
[self stubProcessInfoArguments:@[@"loggerClass=InMemoryLogger",
@"log=abc log=def",
@"logLineFormat=xyz"]];
// Test
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
STConfig *config = [[STConfig alloc] init];
[config configure:mockStoryTeller];
// Verify
OCMVerify([mockStoryTeller setLogger:[OCMArg isKindOfClass:[InMemoryLogger class]]]);
OCMVerify([mockStoryTeller startLogging:@"abc"]);
OCMVerify([mockStoryTeller startLogging:@"def"]);
}
-(void) testConfigReadsEnvironment {
[self mockProcessInfo];
[self stubProcessInfoEnvironment:@{@"loggerClass":@"InMemoryLogger",
@"log":@"abc",
@"log":@"def",
@"logLineFormat":@"xyz"}];
// Test
STConfig *config = [[STConfig alloc] init];
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
[config configure:mockStoryTeller];
// Verify
OCMVerify([mockStoryTeller setLogger:[OCMArg isKindOfClass:[InMemoryLogger class]]]);
OCMVerify([mockStoryTeller startLogging:@"abc"]);
OCMVerify([mockStoryTeller startLogging:@"def"]);
}
-(void) testConfigArgumentsOverrideEnvironment {
[self mockProcessInfo];
[self stubProcessInfoEnvironment:@{@"loggerClass":@"EnvironmentLogger"}];
[self stubProcessInfoArguments:@[@"loggerClass=ArgumentLogger"]];
// Test
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
STConfig *config = [[STConfig alloc] init];
XCTAssertThrowsSpecificNamed([config configure:mockStoryTeller], NSException, @"StoryTellerUnknownClass");
}
-(void) testConfigWithInvalidLoggerClass {
[self mockProcessInfo];
[self stubProcessInfoArguments:@[@"loggerClass=XXXXX"]];
// Test
STStoryTeller *mockStoryTeller = OCMClassMock([STStoryTeller class]);
STConfig *config = [[STConfig alloc] init];
XCTAssertThrowsSpecificNamed([config configure:mockStoryTeller], NSException, @"StoryTellerUnknownClass");
}
#pragma mark - Internal
-(void) mockProcessInfo {
_mockProcessInfo = OCMClassMock([NSProcessInfo class]);
OCMStub(ClassMethod([_mockProcessInfo processInfo])).andReturn(_mockProcessInfo);
}
-(void) stubProcessInfoArguments:(NSArray<NSString *> *) args {
OCMStub([(NSProcessInfo *)_mockProcessInfo arguments]).andReturn(args);
}
-(void) stubProcessInfoEnvironment:(NSDictionary<NSString *, NSString *> *) args {
OCMStub([(NSProcessInfo *)_mockProcessInfo environment]).andReturn(args);
}
@end