1
1
//
2
2
// LazyContainersTests.swift
3
+ // LazyContainersTests
3
4
//
4
5
// Created by Ben Leggiero on 2019-08-19
5
- // Copyright BH-0-PD © 2019 - https://github.com/BlueHuskyStudios/Licenses/blob/master/Licenses/BH-0-PD.txt
6
+ // Copyright Ben Leggiero © 2020
7
+ // https://github.com/RougeWare/Swift-Lazy-Patterns/blob/master/LICENSE.txt
6
8
//
7
9
8
10
@@ -12,22 +14,29 @@ import XCTest
12
14
13
15
14
16
15
- var sideEffect : String ?
16
-
17
+ var sideEffectA : String ?
17
18
func makeLazyA( ) -> String {
18
- sideEffect = " Side effect A "
19
+ sideEffectA = " Side effect A1 "
19
20
return " lAzy "
20
21
}
21
22
23
+ var sideEffectB : String ?
24
+ func makeLazyB( ) -> String {
25
+ sideEffectB = " Side effect B "
26
+ return " Lazy B (this time with side-effects) "
27
+ }
28
+
22
29
23
30
24
31
final class LazyContainersTests : XCTestCase {
25
32
33
+ #if swift(>=5.3)
26
34
@Lazy ( initializer: makeLazyA)
27
- var lazyInitWithPropertyWrapper : String
35
+ var lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect : String
36
+ #endif
28
37
29
38
var lazyInitTraditionally = Lazy < String > ( ) {
30
- sideEffect = " Side effect B "
39
+ sideEffectA = " Side effect A2 "
31
40
return " lazy B "
32
41
}
33
42
@@ -43,7 +52,8 @@ final class LazyContainersTests: XCTestCase {
43
52
44
53
45
54
override func setUp( ) {
46
- sideEffect = nil
55
+ sideEffectA = nil
56
+ sideEffectB = nil
47
57
}
48
58
49
59
@@ -55,43 +65,60 @@ final class LazyContainersTests: XCTestCase {
55
65
56
66
// MARK: - `Lazy`
57
67
58
- func testLazyInitWithPropertyWrapper( ) {
59
- XCTAssertEqual ( sideEffect, nil )
60
- XCTAssertFalse ( _lazyInitWithPropertyWrapper. isInitialized)
61
- XCTAssertEqual ( sideEffect, nil )
62
- XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapper)
63
- XCTAssertEqual ( sideEffect, " Side effect A " )
64
- XCTAssertTrue ( _lazyInitWithPropertyWrapper. isInitialized)
65
- XCTAssertEqual ( sideEffect, " Side effect A " )
66
- XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapper)
67
- XCTAssertEqual ( sideEffect, " Side effect A " )
68
- XCTAssertTrue ( _lazyInitWithPropertyWrapper. isInitialized)
69
- XCTAssertEqual ( sideEffect, " Side effect A " )
70
- XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapper)
71
- XCTAssertEqual ( sideEffect, " Side effect A " )
72
- XCTAssertTrue ( _lazyInitWithPropertyWrapper. isInitialized)
73
- XCTAssertEqual ( sideEffect, " Side effect A " )
68
+ #if swift(>=5.3)
69
+ func testLazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect( ) {
70
+ XCTAssertEqual ( sideEffectA, nil )
71
+ XCTAssertFalse ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect. isInitialized)
72
+ XCTAssertEqual ( sideEffectA, nil )
73
+ XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect)
74
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
75
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect. isInitialized)
76
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
77
+ XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect)
78
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
79
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect. isInitialized)
80
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
81
+ XCTAssertEqual ( " lAzy " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect)
82
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
83
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect. isInitialized)
84
+ XCTAssertEqual ( sideEffectA, " Side effect A1 " )
74
85
75
- lazyInitWithPropertyWrapper = " MAnual "
86
+ lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect = " MAnual "
76
87
77
- XCTAssertEqual ( sideEffect , " Side effect A " )
78
- XCTAssertTrue ( _lazyInitWithPropertyWrapper . isInitialized)
79
- XCTAssertEqual ( sideEffect , " Side effect A " )
80
- XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapper )
81
- XCTAssertEqual ( sideEffect , " Side effect A " )
82
- XCTAssertTrue ( _lazyInitWithPropertyWrapper . isInitialized)
83
- XCTAssertEqual ( sideEffect , " Side effect A " )
84
- XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapper )
85
- XCTAssertEqual ( sideEffect , " Side effect A " )
86
- XCTAssertTrue ( _lazyInitWithPropertyWrapper . isInitialized)
87
- XCTAssertEqual ( sideEffect , " Side effect A " )
88
- XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapper )
89
- XCTAssertEqual ( sideEffect , " Side effect A " )
90
- XCTAssertTrue ( _lazyInitWithPropertyWrapper . isInitialized)
91
- XCTAssertEqual ( sideEffect , " Side effect A " )
88
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
89
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect . isInitialized)
90
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
91
+ XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect )
92
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
93
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect . isInitialized)
94
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
95
+ XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect )
96
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
97
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect . isInitialized)
98
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
99
+ XCTAssertEqual ( " MAnual " , lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect )
100
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
101
+ XCTAssertTrue ( _lazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect . isInitialized)
102
+ XCTAssertEqual ( sideEffectA , " Side effect A1 " )
92
103
}
93
104
94
105
106
+ func testLazyInitWithPropertyWrapperAndSideEffect( ) {
107
+
108
+ struct Test {
109
+ @Lazy
110
+ var lazyInitWithPropertyWrapperAndSideEffect = makeLazyB ( )
111
+ }
112
+
113
+
114
+ let test = Test ( )
115
+
116
+ XCTAssertNil ( sideEffectB, " @Lazy eagerly evaluated its initial value " )
117
+ XCTAssertEqual ( test. lazyInitWithPropertyWrapperAndSideEffect, " Lazy B (this time with side-effects) " )
118
+ }
119
+ #endif
120
+
121
+
95
122
func testLazyInitTraditionally( ) {
96
123
XCTAssertFalse ( lazyInitTraditionally. isInitialized)
97
124
XCTAssertEqual ( " lazy B " , lazyInitTraditionally. wrappedValue)
@@ -249,9 +276,16 @@ final class LazyContainersTests: XCTestCase {
249
276
XCTAssertEqual ( " Manual F " , functionalLazyInitTraditionally. wrappedValue)
250
277
XCTAssertTrue ( functionalLazyInitTraditionally. isInitialized)
251
278
}
252
-
253
- static var allTests = [
254
- ( " testLazyInitWithPropertyWrapper " , testLazyInitWithPropertyWrapper) ,
279
+
280
+ #if swift(>=5.3)
281
+ static let testsWhichRequireSwift5_3 = [
282
+ ( " testLazyInitWithPropertyWrapperWithCustomInitializerAndSideEffect " , testLazyInitWithPropertyWrapperAndCustomInitializerWithSideEffect) ,
283
+ ( " testLazyInitWithPropertyWrapperAndSideEffect " , testLazyInitWithPropertyWrapperAndSideEffect) ,
284
+ ]
285
+ #endif
286
+
287
+
288
+ static let testsWhichWorkBeforeSwift5_3 = [
255
289
( " testLazyInitTraditionally " , testLazyInitTraditionally) ,
256
290
257
291
( " testResettableLazyInitWithPropertyWrapper " , testResettableLazyInitWithPropertyWrapper) ,
@@ -260,4 +294,12 @@ final class LazyContainersTests: XCTestCase {
260
294
( " testFunctionalLazyInitWithPropertyWrapper " , testFunctionalLazyInitWithPropertyWrapper) ,
261
295
( " testFunctionalLazyInitTraditionally " , testFunctionalLazyInitTraditionally) ,
262
296
]
297
+
298
+
299
+ #if swift(>=5.3)
300
+ static let allTests = testsWhichRequireSwift5_3 + testsWhichWorkBeforeSwift5_3
301
+ #else
302
+ @inline ( __always)
303
+ static let allTests = testsWhichWorkBeforeSwift5_3
304
+ #endif
263
305
}
0 commit comments