2929//  SOFTWARE.
3030//
3131
32+ import  Foundation
3233import  FlyingFox
3334import  FlyingFoxMacros
34- import  XCTest 
35+ import  Testing 
3536
36- final   class   HTTPHandlerMacroTests :   XCTestCase  { 
37+ struct   HTTPHandlerMacroTests  { 
3738
38-     func  testHandler( )  async  throws  { 
39+     @Test  
40+     func  handler( )  async  throws  { 
3941        let  handler  =  MacroHandler ( ) 
4042
4143        await  AsyncAssertEqual ( 
@@ -55,6 +57,24 @@ final class HTTPHandlerMacroTests: XCTestCase {
5557            try await  handler. handleRequest ( . make( path:  " /fish " ) ) . jsonDictionaryBody, 
5658            [ " name " :  " Pickles " ] 
5759        ) 
60+ 
61+         await  AsyncAssertEqual ( 
62+             try await  handler. handleRequest ( . make( path:  " /chips " ) ) . jsonDictionaryBody, 
63+             [ " name " :  " 🍟 " ] 
64+         ) 
65+ 
66+         await  AsyncAssertEqual ( 
67+             try await  handler. handleRequest ( . make( path:  " /shrimp " ) ) . jsonDictionaryBody, 
68+             [ " name " :  " 🦐 " ] 
69+         ) 
70+ 
71+         await  AsyncAssertEqual ( 
72+             try await  handler. handleRequest ( . make( path:  " /all " ) ) . jsonArrayBody, 
73+             [ 
74+                 [ " name " :  " Tyger Tyger " ] , 
75+                 [ " name " :  " Burning Bright " ] 
76+             ] 
77+         ) 
5878    } 
5979} 
6080
@@ -79,9 +99,29 @@ private struct MacroHandler {
7999        Fish ( name:  " Pickles " ) 
80100    } 
81101
102+     @JSONRoute ( " /chips " )  
103+     func  getFoo( )  ->  MacroHandler . Chips  { 
104+         MacroHandler . Chips ( name:  " 🍟 " ) 
105+     } 
106+ 
107+     @JSONRoute ( " /shrimp " )  
108+     func  getShrimp( )  ->  some  Encodable  { 
109+         MacroHandler . Chips ( name:  " 🦐 " ) 
110+     } 
111+ 
112+     @JSONRoute ( " /all " )  
113+     func  getAll( )  ->  [ Fish ]  { 
114+         [ 
115+             Fish ( name:  " Tyger Tyger " ) , 
116+             Fish ( name:  " Burning Bright " ) 
117+         ] 
118+     } 
119+ 
82120    struct  Fish :  Encodable  { 
83121        var  name :  String 
84122    } 
123+ 
124+     typealias  Chips  =  Fish 
85125} 
86126
87127private  extension  HTTPResponse  { 
@@ -95,4 +135,14 @@ private extension HTTPResponse {
95135            return  object as?  NSDictionary 
96136        } 
97137    } 
138+ 
139+     var  jsonArrayBody :  NSArray ? { 
140+         get async   { 
141+             guard  let  data =  try ? await  bodyData, 
142+                   let  object =  try ? JSONSerialization . jsonObject ( with:  data,  options:  [ ] )  else  { 
143+                 return  nil 
144+             } 
145+             return  object as?  NSArray 
146+         } 
147+     } 
98148} 
0 commit comments