@@ -12,6 +12,8 @@ func withoutAsyncAlternativeThrowingWithMultipleResults(closure: @escaping (Int?
12
12
func asyncVoidWithoutAlternative( completionHandler2: @escaping ( ) -> Void ) { }
13
13
func resultWithoutAlternative( completionHandler2: @escaping ( Result < Int , Error > ) -> Void ) { }
14
14
15
+ func lottaClosures( x: ( ) -> Void , y: ( ) -> Void ) -> Int ? { nil }
16
+
15
17
struct MyError : Error { }
16
18
17
19
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):1 | %FileCheck -check-prefix=CREATE-CONTINUATION %s
@@ -173,7 +175,7 @@ func testThrowingContinuationRelayingErrorAndTwoComplexResults(completionHandler
173
175
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: }
174
176
// THROWING-CONTINUATION-RELAYING-ERROR-AND-TWO-COMPLEX-RESULTS-NEXT: }
175
177
176
- // RUN: %refactor -convert-to-async -dump-text -source-filename %s -pos=%(line+1):1 | %FileCheck -check-prefix=THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE %s
178
+ // RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):1 | %FileCheck -check-prefix=THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE %s
177
179
func testThrowingContinuationRelayingErrorAndComplexResultWithTrailingClosure( completionHandler: @escaping ( Int ? , Error ? ) -> Void ) {
178
180
withoutAsyncAlternativeThrowing { ( theValue, theError) in
179
181
completionHandler ( theValue. map { $0 + 1 } , theError)
@@ -185,7 +187,7 @@ func testThrowingContinuationRelayingErrorAndComplexResultWithTrailingClosure(co
185
187
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: if let error = theError {
186
188
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: continuation.resume(throwing: error)
187
189
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: } else {
188
- // THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: guard let result = theValue.map { $0 + 1 }.self else {
190
+ // THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: guard let result = ( theValue.map { $0 + 1 }) else {
189
191
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: fatalError("Expected non-nil result in the non-error case")
190
192
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: }
191
193
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: continuation.resume(returning: result)
@@ -194,6 +196,27 @@ func testThrowingContinuationRelayingErrorAndComplexResultWithTrailingClosure(co
194
196
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: }
195
197
// THROWING-CONTINUATION-RELAYING-ERROR-AND-COMPLEX-RESULT-WITH-TRAILING-CLOSURE-NEXT: }
196
198
199
+ // RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):1 | %FileCheck -check-prefix=MULTIPLE-TRAILING-CLOSURES %s
200
+ func testThrowingContinuationRelayingErrorAndComplexResultWithMultipleTrailingClosures( completionHandler: @escaping ( Int ? , Error ? ) -> Void ) {
201
+ withoutAsyncAlternativeThrowing { theValue, theError in
202
+ completionHandler ( lottaClosures { } y: { } , theError)
203
+ }
204
+ }
205
+ // MULTIPLE-TRAILING-CLOSURES: func testThrowingContinuationRelayingErrorAndComplexResultWithMultipleTrailingClosures() async throws -> Int {
206
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: return try await withCheckedThrowingContinuation { continuation in
207
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: withoutAsyncAlternativeThrowing { theValue, theError in
208
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: if let error = theError {
209
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: continuation.resume(throwing: error)
210
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: } else {
211
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: guard let result = (lottaClosures {} y: {}) else {
212
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: fatalError("Expected non-nil result in the non-error case")
213
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: }
214
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: continuation.resume(returning: result)
215
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: }
216
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: }
217
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: }
218
+ // MULTIPLE-TRAILING-CLOSURES-NEXT: }
219
+
197
220
// RUN: %refactor-check-compiles -convert-to-async -dump-text -source-filename %s -pos=%(line+1):1 | %FileCheck -check-prefix=THROWING-CONTINUATION-ALWAYS-RETURNING-ERROR-AND-RESULT %s
198
221
func testAlwaysReturnBothResultAndCompletionHandler( completionHandler: @escaping ( Int ? , Error ? ) -> Void ) {
199
222
withoutAsyncAlternativeBecauseOfMismatchedCompletionHandlerName { theValue in
0 commit comments