@@ -79,6 +79,32 @@ final class AddAsyncMacroTests: XCTestCase {
7979    ) 
8080  } 
8181
82+   func  testImplicitVoidResult( )  { 
83+     assertMacroExpansion ( 
84+       """ 
85+       @AddAsync 
86+       func d(a: Int, completionBlock: @escaping (Bool) -> Void) { 
87+       } 
88+        """ , 
89+       expandedSource:  """ 
90+         func d(a: Int, completionBlock: @escaping (Bool) -> Void) { 
91+         } 
92+ 
93+         func d(a: Int) async -> Bool { 
94+           await withCheckedContinuation { continuation in 
95+             d(a: a) { returnValue in 
96+ 
97+               continuation.resume(returning: returnValue) 
98+             } 
99+           } 
100+ 
101+         } 
102+          """ , 
103+       macros:  macros, 
104+       indentationWidth:  . spaces( 2 ) 
105+     ) 
106+   } 
107+ 
82108  func  testExpansionOnStoredPropertyEmitsError( )  { 
83109    assertMacroExpansion ( 
84110      """ 
@@ -105,18 +131,18 @@ final class AddAsyncMacroTests: XCTestCase {
105131    ) 
106132  } 
107133
108-   func  testExpansionOnAsyncFunctionEmitsError ( )  { 
134+   func  testNonVoidResult ( )  { 
109135    assertMacroExpansion ( 
110136      """ 
111137      struct Test { 
112138        @AddAsync 
113-         async  func sayHello() { 
139+         func sayHello() -> Int  { 
114140        } 
115141      } 
116142       """ , 
117143      expandedSource:  """ 
118144        struct Test { 
119-           async  func sayHello() { 
145+           func sayHello() -> Int  { 
120146          } 
121147        } 
122148         """ , 
@@ -132,4 +158,50 @@ final class AddAsyncMacroTests: XCTestCase {
132158      indentationWidth:  . spaces( 2 ) 
133159    ) 
134160  } 
161+ 
162+   func  testAlreadyAsync( )  { 
163+     assertMacroExpansion ( 
164+       """ 
165+       @AddAsync 
166+       func d(a: Int, completionBlock: @escaping (Bool) -> Void) async { 
167+       } 
168+        """ , 
169+       expandedSource:  """ 
170+         func d(a: Int, completionBlock: @escaping (Bool) -> Void) async { 
171+         } 
172+          """ , 
173+       diagnostics:  [ 
174+         DiagnosticSpec ( 
175+           message:  " @addAsync requires an non async function " , 
176+           line:  1 , 
177+           column:  1 , 
178+           severity:  . error
179+         ) 
180+       ] , 
181+       macros:  macros, 
182+       indentationWidth:  . spaces( 2 ) 
183+     ) 
184+   } 
185+ 
186+   func  testNoCompletionHandler( )  { 
187+     assertMacroExpansion ( 
188+       """ 
189+       @AddAsync 
190+       func sayHello(x: Int) {} 
191+        """ , 
192+       expandedSource:  """ 
193+         func sayHello(x: Int) {} 
194+          """ , 
195+       diagnostics:  [ 
196+         DiagnosticSpec ( 
197+           message:  " @addAsync requires an function that has a completion handler as last parameter " , 
198+           line:  1 , 
199+           column:  1 , 
200+           severity:  . error
201+         ) 
202+       ] , 
203+       macros:  macros, 
204+       indentationWidth:  . spaces( 2 ) 
205+     ) 
206+   } 
135207} 
0 commit comments