@@ -18,36 +18,141 @@ import XCTest
18
18
19
19
class LoggerTests : XCTestCase {
20
20
21
- func testDebugLog( ) {
22
- CustomLogger . logCount = 0
23
- let logger = CustomLogger ( )
24
- CustomLogger . logLevel = . debug
21
+ let logger = TestLogger ( )
22
+
23
+ func testOPTLogger_DefaultMethods( ) {
24
+ // String messages
25
+
26
+ let message = " Log Message "
27
+
28
+ logger. e ( message)
29
+ verifyLogger ( . error, message)
30
+ logger. w ( message)
31
+ verifyLogger ( . warning, message)
32
+ logger. i ( message)
33
+ verifyLogger ( . info, message)
34
+ logger. d ( message)
35
+ verifyLogger ( . debug, message)
36
+
37
+ // LogMessage
38
+
39
+ let logMessage = LogMessage . experimentNotRunning ( " key " )
40
+
41
+ logger. e ( logMessage)
42
+ verifyLogger ( . error, logMessage. description)
43
+ logger. w ( logMessage)
44
+ verifyLogger ( . warning, logMessage. description)
45
+ logger. i ( logMessage)
46
+ verifyLogger ( . info, logMessage. description)
47
+ logger. d ( logMessage)
48
+ verifyLogger ( . debug, logMessage. description)
49
+
50
+ // OptimizelyError
51
+
52
+ let error = OptimizelyError . sdkNotReady
53
+ let errorMessage = " (src) " + error. reason
54
+
55
+ logger. e ( error, source: " src " )
56
+ verifyLogger ( . error, errorMessage)
57
+ logger. w ( error, source: " src " )
58
+ verifyLogger ( . warning, errorMessage)
59
+ logger. i ( error, source: " src " )
60
+ verifyLogger ( . info, errorMessage)
61
+ logger. d ( error, source: " src " )
62
+ verifyLogger ( . debug, errorMessage)
63
+ }
64
+
65
+ func testOPTLogger_DebugLog( ) {
66
+ TestLogger . logLevel = . debug
25
67
logger. d { ( ) -> String in
26
- return " Log Message "
68
+ return " message "
27
69
}
28
- XCTAssertTrue ( CustomLogger . logCount == 1 )
29
-
30
- CustomLogger . logCount = 0
31
- CustomLogger . logLevel = . info
70
+ XCTAssertTrue ( logger. logCount == 1 )
71
+ XCTAssertEqual ( logger. getMessages ( . debug) , [ " message " ] )
72
+ logger. clearMessages ( )
73
+
74
+ TestLogger . logLevel = . info
32
75
logger. d { ( ) -> String in
33
- return " Log Message "
76
+ return " message "
34
77
}
35
- XCTAssertTrue ( CustomLogger . logCount == 0 )
78
+ XCTAssertTrue ( logger . logCount == 0 )
36
79
}
37
80
38
81
// MARK: - DefaultLogger Tests
39
82
40
- func testLog_UseOSLog ( ) {
41
- let logger = DefaultLogger ( )
42
- logger . i ( " Log Message " )
83
+ func testDefaultLogger_DebugLevel ( ) {
84
+ let logger = TestDefaultLogger ( )
85
+ DefaultLogger . setLogLevel ( . debug )
43
86
44
- XCTAssertTrue ( logger. osLogUsed)
87
+ logger. e ( " message " )
88
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
89
+ logger. w ( " message " )
90
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
91
+ logger. i ( " message " )
92
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
93
+ logger. d ( " message " )
94
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
95
+ }
96
+
97
+ func testDefaultLogger_InfoLevel( ) {
98
+ let logger = TestDefaultLogger ( )
99
+ DefaultLogger . setLogLevel ( . info)
100
+
101
+ logger. e ( " message " )
102
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
103
+ logger. w ( " message " )
104
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
105
+ logger. i ( " message " )
106
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
107
+ logger. d ( " message " )
108
+ XCTAssert ( logger. logCount == 0 )
109
+ }
110
+
111
+ func testDefaultLogger_WarningLevel( ) {
112
+ let logger = TestDefaultLogger ( )
113
+ DefaultLogger . setLogLevel ( . warning)
114
+
115
+ logger. e ( " message " )
116
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
117
+ logger. w ( " message " )
118
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
119
+ logger. i ( " message " )
120
+ XCTAssert ( logger. logCount == 0 )
121
+ logger. d ( " message " )
122
+ XCTAssert ( logger. logCount == 0 )
123
+ }
124
+
125
+ func testDefaultLogger_ErrorLevel( ) {
126
+ let logger = TestDefaultLogger ( )
127
+ DefaultLogger . setLogLevel ( . error)
128
+
129
+ logger. e ( " message " )
130
+ XCTAssert ( logger. logCount > 0 ) ; logger. logCount = 0
131
+ logger. w ( " message " )
132
+ XCTAssert ( logger. logCount == 0 )
133
+ logger. i ( " message " )
134
+ XCTAssert ( logger. logCount == 0 )
135
+ logger. d ( " message " )
136
+ XCTAssert ( logger. logCount == 0 )
137
+ }
138
+
139
+ }
140
+
141
+ // MARK: - Utils
142
+
143
+ extension LoggerTests {
144
+
145
+ func verifyLogger( _ logLevel: OptimizelyLogLevel , _ message: String ) {
146
+ XCTAssertTrue ( logger. logCount == 1 )
147
+ XCTAssertEqual ( logger. getMessages ( logLevel) , [ message] )
148
+ logger. clearMessages ( )
45
149
}
46
150
47
151
}
48
152
49
- private class CustomLogger : OPTLogger {
50
- public static var logCount = 0
153
+ // MARK: - Mock Loggers
154
+
155
+ class TestLogger : OPTLogger {
51
156
private static var _logLevel : OptimizelyLogLevel ?
52
157
public static var logLevel : OptimizelyLogLevel {
53
158
get {
@@ -59,10 +164,34 @@ private class CustomLogger: OPTLogger {
59
164
}
60
165
61
166
required public init ( ) {
167
+ clearMessages ( )
62
168
}
63
169
64
170
func log( level: OptimizelyLogLevel , message: String ) {
65
- CustomLogger . logCount += 1
171
+ logMessages [ level. rawValue] . append ( message)
172
+ }
173
+
174
+ // Utils
175
+
176
+ var logMessages = [ [ String] ] ( )
177
+ var logCount : Int {
178
+ return logMessages. reduce ( 0 ) { $0 + $1. count }
179
+ }
180
+
181
+ func getMessages( _ level: OptimizelyLogLevel ) -> [ String ] {
182
+ return logMessages [ level. rawValue]
183
+ }
184
+
185
+ func clearMessages( ) {
186
+ logMessages = [ [ String] ] ( repeating: [ ] , count: OptimizelyLogLevel . debug. rawValue + 1 )
66
187
}
67
188
}
68
189
190
+ class TestDefaultLogger : DefaultLogger {
191
+ var logCount = 0
192
+ override func clog( level: OptimizelyLogLevel , message: String ) {
193
+ logCount += 1
194
+ }
195
+ }
196
+
197
+
0 commit comments