44 */
55
66import XCTest
7+ import AwsCommonRuntimeKit
78@testable import ClientRuntime
89
910class ClientErrorTests : XCTestCase {
1011
1112 func testNetworkErrorInEqualityWithoutDescription( ) throws {
1213 enum NetworkError : Error {
13- case actual
14- case expected
14+ case actual
15+ case expected
1516 }
1617 let actualNetworkError = ClientError . networkError ( NetworkError . actual)
1718 let expectedNetworkError = ClientError . networkError ( NetworkError . expected)
@@ -21,17 +22,17 @@ class ClientErrorTests: XCTestCase {
2122
2223 func testNetworkErrorInEqualityWithDescription( ) throws {
2324 enum NetworkError : Error , CustomStringConvertible {
24- case actual
25- case expected
26-
27- var description : String {
28- switch self {
29- case . actual:
30- return " Actual "
31- case . expected:
32- return " Expected "
25+ case actual
26+ case expected
27+
28+ var description : String {
29+ switch self {
30+ case . actual:
31+ return " Actual "
32+ case . expected:
33+ return " Expected "
34+ }
3335 }
34- }
3536 }
3637
3738 let actualNetworkError = ClientError . networkError ( NetworkError . actual)
@@ -42,22 +43,105 @@ class ClientErrorTests: XCTestCase {
4243
4344 func testNetworkErrorEqualityWithDescription( ) throws {
4445 enum NetworkError : Error , CustomStringConvertible {
45- case actual
46- case actualCopy
47-
48- var description : String {
49- switch self {
50- case . actual:
51- return " Actual "
52- case . actualCopy:
53- return " Actual "
46+ case actual
47+ case actualCopy
48+
49+ var description : String {
50+ switch self {
51+ case . actual:
52+ return " Actual "
53+ case . actualCopy:
54+ return " Actual "
55+ }
5456 }
55- }
5657 }
5758
5859 let actualNetworkError = ClientError . networkError ( NetworkError . actual)
5960 let actualCopyNetworkError = ClientError . networkError ( NetworkError . actualCopy)
6061
6162 XCTAssertEqual ( actualNetworkError, actualCopyNetworkError)
6263 }
64+
65+ // MARK: - WaiterTypedError protocol
66+
67+ func test_waiterErrorType_returnsErrorTypeForWaitableNetworkError( ) async throws {
68+ let networkError = WaitableError ( )
69+ let subject = ClientError . networkError ( networkError)
70+ XCTAssertEqual ( subject. waiterErrorType, networkError. waiterErrorType)
71+ }
72+
73+ func test_waiterErrorType_returnsNilForNonWaitableNetworkError( ) async throws {
74+ let networkError = NonWaitableError ( )
75+ let subject = ClientError . networkError ( networkError)
76+ XCTAssertNil ( subject. waiterErrorType)
77+ }
78+
79+ func test_waiterErrorType_returnsErrorTypeForWaitableDeserializationError( ) async throws {
80+ let deserializationError = WaitableError ( )
81+ let subject = ClientError . deserializationFailed ( deserializationError)
82+ XCTAssertEqual ( subject. waiterErrorType, deserializationError. waiterErrorType)
83+ }
84+
85+ func test_waiterErrorType_returnsNilForNonWaitableDeserializationError( ) async throws {
86+ let deserializationError = NonWaitableError ( )
87+ let subject = ClientError . deserializationFailed ( deserializationError)
88+ XCTAssertNil ( subject. waiterErrorType)
89+ }
90+
91+ func test_waiterErrorType_returnsErrorTypeForWaitableRetryError( ) async throws {
92+ let retryError = WaitableError ( )
93+ let subject = ClientError . retryError ( retryError)
94+ XCTAssertEqual ( subject. waiterErrorType, retryError. waiterErrorType)
95+ }
96+
97+ func test_waiterErrorType_returnsNilForNonWaitableRetryError( ) async throws {
98+ let retryError = NonWaitableError ( )
99+ let subject = ClientError . retryError ( retryError)
100+ XCTAssertNil ( subject. waiterErrorType)
101+ }
102+
103+ func test_waiterErrorType_returnsNilForCRTError( ) async throws {
104+ let crtError = CRTError ( code: 2 )
105+ let subject = ClientError . crtError ( crtError)
106+ XCTAssertNil ( subject. waiterErrorType)
107+ }
108+
109+ func test_waiterErrorType_returnsNilForPathCreationFailedError( ) async throws {
110+ let subject = ClientError . pathCreationFailed ( " path creation failed error " )
111+ XCTAssertNil ( subject. waiterErrorType)
112+ }
113+
114+ func test_waiterErrorType_returnsNilForQueryItemCreationFailedError( ) async throws {
115+ let subject = ClientError . queryItemCreationFailed ( " query item creation failed error " )
116+ XCTAssertNil ( subject. waiterErrorType)
117+ }
118+
119+ func test_waiterErrorType_returnsNilForSerializationFailedError( ) async throws {
120+ let subject = ClientError . serializationFailed ( " serialization failed error " )
121+ XCTAssertNil ( subject. waiterErrorType)
122+ }
123+
124+ func test_waiterErrorType_returnsNilForDataNotFoundError( ) async throws {
125+ let subject = ClientError . dataNotFound ( " data not found error " )
126+ XCTAssertNil ( subject. waiterErrorType)
127+ }
128+
129+ func test_waiterErrorType_returnsNilForUnknownError( ) async throws {
130+ let subject = ClientError . unknownError ( " unknown error " )
131+ XCTAssertNil ( subject. waiterErrorType)
132+ }
133+
134+ func test_waiterErrorType_returnsNilForAuthError( ) async throws {
135+ let subject = ClientError . authError ( " auth error " )
136+ XCTAssertNil ( subject. waiterErrorType)
137+ }
63138}
139+
140+ // MARK: - Helper types
141+
142+ fileprivate struct WaitableError : WaiterTypedError {
143+
144+ public var waiterErrorType : String ? { " WaitableType " }
145+ }
146+
147+ fileprivate struct NonWaitableError : Error { }
0 commit comments