(define-syntax test-handler (syntax-rules (=>) ((_ (method uri body) (additional-headers ...) => response tests ...) (parameterize ((current-request (make-request uri: (uri-reference uri) method: 'method port: (open-input-string (or body "")) headers: (headers '(additional-headers ...) (if body (headers `((content-length ,(string-length body)))) (headers '()))))) (current-response (make-response port: (open-output-string)))) ((testing-handler) void) (let* ((response (get-output-string (response-port (current-response)))) (response (call-with-input-string response read-response))) tests ...))) ((_ (method uri) (additional-headers ...) => response tests ...) (test-handler (method uri #f) (additional-headers ...) => response tests ...))))