@@ -148,8 +148,7 @@ struct RPCErrorTests {
148
148
let error5 = RPCError (
149
149
code: . aborted,
150
150
message: " Error 5. " ,
151
- cause: error4,
152
- flatteningCauses: true
151
+ cause: error4
153
152
)
154
153
155
154
let unknownMerged = RPCError ( code: . unknown, message: " Error 2. Error 1. " )
@@ -161,4 +160,33 @@ struct RPCErrorTests {
161
160
)
162
161
#expect( error5 == abortedMerged)
163
162
}
163
+
164
+ @Test ( " Causes of errors with different status codes aren't flattened " )
165
+ func testDifferentStatusCodeAreNotFlattened( ) throws {
166
+ let error1 = RPCError ( code: . unknown, message: " Error 1. " )
167
+ let error2 = RPCError ( code: . dataLoss, message: " Error 2. " , cause: error1)
168
+ let error3 = RPCError ( code: . alreadyExists, message: " Error 3. " , cause: error2)
169
+ let error4 = RPCError ( code: . aborted, message: " Error 4. " , cause: error3)
170
+ let error5 = RPCError (
171
+ code: . deadlineExceeded,
172
+ message: " Error 5. " ,
173
+ cause: error4
174
+ )
175
+
176
+ #expect( error5. code == . deadlineExceeded)
177
+ #expect( error5. message == " Error 5. " )
178
+ let wrappedError4 = try #require( error5. cause as? RPCError )
179
+ #expect( wrappedError4. code == . aborted)
180
+ #expect( wrappedError4. message == " Error 4. " )
181
+ let wrappedError3 = try #require( wrappedError4. cause as? RPCError )
182
+ #expect( wrappedError3. code == . alreadyExists)
183
+ #expect( wrappedError3. message == " Error 3. " )
184
+ let wrappedError2 = try #require( wrappedError3. cause as? RPCError )
185
+ #expect( wrappedError2. code == . dataLoss)
186
+ #expect( wrappedError2. message == " Error 2. " )
187
+ let wrappedError1 = try #require( wrappedError2. cause as? RPCError )
188
+ #expect( wrappedError1. code == . unknown)
189
+ #expect( wrappedError1. message == " Error 1. " )
190
+ #expect( wrappedError1. cause == nil )
191
+ }
164
192
}
0 commit comments