(module recurring-fixture mzscheme (require-for-syntax (planet "test.ss" ("schematics" "schemeunit.plt" 1 1))) (require-for-syntax (planet "keyword.ss" ("schematics" "schemeunit.plt" 1 1))) (provide make-test-suite*/with-recurring-fixture) (define-syntax (make-test-suite*/with-recurring-fixture stx) (syntax-case stx () ((_ name tests ...) (let ((sexp (syntax-object->datum (syntax (tests ...))))) (with-syntax ((fixture-setup (datum->syntax-object stx (get-keyword-arg 'fixture-setup sexp '(void)) stx)) (fixture-teardown (datum->syntax-object stx (get-keyword-arg 'fixture-teardown sexp '(void)) stx)) (((case-name case-body ...) ...) (datum->syntax-object stx `(lambda () ,@(get-positional-args '(fixture-setup fixture-teardown) sexp '((void)))) stx))) (syntax/loc stx (make-test-suite name (make-test-case case-name case-body ... 'setup fixture-setup 'teardown fixture-teardown) ...))))))) )