@@ -2,6 +2,26 @@ import Hooks
2
2
import XCTest
3
3
4
4
final class AsyncStatusTests : XCTestCase {
5
+ func testIsRunning( ) {
6
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
7
+ . pending,
8
+ . running,
9
+ . success( 0 ) ,
10
+ . failure( URLError ( . badURL) ) ,
11
+ ]
12
+
13
+ let expected = [
14
+ false ,
15
+ true ,
16
+ false ,
17
+ false ,
18
+ ]
19
+
20
+ for (status, expected) in zip ( statuses, expected) {
21
+ XCTAssertEqual ( status. isRunning, expected)
22
+ }
23
+ }
24
+
5
25
func testResult( ) {
6
26
let statuses : [ AsyncStatus < Int , URLError > ] = [
7
27
. pending,
@@ -21,4 +41,124 @@ final class AsyncStatusTests: XCTestCase {
21
41
XCTAssertEqual ( status. result, expected)
22
42
}
23
43
}
44
+
45
+ func testMap( ) {
46
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
47
+ . pending,
48
+ . running,
49
+ . success( 0 ) ,
50
+ . failure( URLError ( . badURL) ) ,
51
+ ]
52
+
53
+ let expected : [ AsyncStatus < Int , URLError > ] = [
54
+ . pending,
55
+ . running,
56
+ . success( 100 ) ,
57
+ . failure( URLError ( . badURL) ) ,
58
+ ]
59
+
60
+ for (status, expected) in zip ( statuses, expected) {
61
+ XCTAssertEqual ( status. map { _ in 100 } , expected)
62
+ }
63
+ }
64
+
65
+ func testMapError( ) {
66
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
67
+ . pending,
68
+ . running,
69
+ . success( 0 ) ,
70
+ . failure( URLError ( . badURL) ) ,
71
+ ]
72
+
73
+ let expected : [ AsyncStatus < Int , URLError > ] = [
74
+ . pending,
75
+ . running,
76
+ . success( 0 ) ,
77
+ . failure( URLError ( . cancelled) ) ,
78
+ ]
79
+
80
+ for (status, expected) in zip ( statuses, expected) {
81
+ XCTAssertEqual (
82
+ status. mapError { _ in URLError ( . cancelled) } ,
83
+ expected
84
+ )
85
+ }
86
+ }
87
+
88
+ func testFlatMap( ) {
89
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
90
+ . pending,
91
+ . running,
92
+ . success( 0 ) ,
93
+ . failure( URLError ( . badURL) ) ,
94
+ ]
95
+
96
+ let expected : [ AsyncStatus < Int , URLError > ] = [
97
+ . pending,
98
+ . running,
99
+ . failure( URLError ( . callIsActive) ) ,
100
+ . failure( URLError ( . badURL) ) ,
101
+ ]
102
+
103
+ for (status, expected) in zip ( statuses, expected) {
104
+ XCTAssertEqual (
105
+ status. flatMap { _ in . failure( URLError ( . callIsActive) ) } ,
106
+ expected
107
+ )
108
+ }
109
+ }
110
+
111
+ func testFlatMapError( ) {
112
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
113
+ . pending,
114
+ . running,
115
+ . success( 0 ) ,
116
+ . failure( URLError ( . badURL) ) ,
117
+ ]
118
+
119
+ let expected : [ AsyncStatus < Int , URLError > ] = [
120
+ . pending,
121
+ . running,
122
+ . success( 0 ) ,
123
+ . success( 100 ) ,
124
+ ]
125
+
126
+ for (status, expected) in zip ( statuses, expected) {
127
+ XCTAssertEqual (
128
+ status. flatMapError { _ in . success( 100 ) } ,
129
+ expected
130
+ )
131
+ }
132
+ }
133
+
134
+ func testGet( ) throws {
135
+ let statuses : [ AsyncStatus < Int , URLError > ] = [
136
+ . pending,
137
+ . running,
138
+ . success( 100 ) ,
139
+ ]
140
+
141
+ let expected : [ Int ? ] = [
142
+ nil ,
143
+ nil ,
144
+ 100 ,
145
+ nil ,
146
+ ]
147
+
148
+ for (status, expected) in zip ( statuses, expected) {
149
+ XCTAssertEqual (
150
+ try status. get ( ) ,
151
+ expected
152
+ )
153
+ }
154
+
155
+ do {
156
+ let error = URLError ( . badServerResponse)
157
+ _ = try AsyncStatus < Int , URLError > . failure ( error) . get ( )
158
+ }
159
+ catch {
160
+ let error = error as? URLError
161
+ XCTAssertEqual ( error, URLError ( . badServerResponse) )
162
+ }
163
+ }
24
164
}
0 commit comments