@@ -148,8 +148,7 @@ struct RPCErrorTests {
148148 let error5 = RPCError (
149149 code: . aborted,
150150 message: " Error 5. " ,
151- cause: error4,
152- flatteningCauses: true
151+ cause: error4
153152 )
154153
155154 let unknownMerged = RPCError ( code: . unknown, message: " Error 2. Error 1. " )
@@ -161,4 +160,33 @@ struct RPCErrorTests {
161160 )
162161 #expect( error5 == abortedMerged)
163162 }
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+ }
164192}
0 commit comments