diff --git a/e2e/testing.scm b/e2e/testing.scm index c9a3316..a6593f7 100644 --- a/e2e/testing.scm +++ b/e2e/testing.scm @@ -1,5 +1,5 @@ (define-module (e2e testing) - #:export (assert define-test run-tests)) + #:export (assert define-test run-tests run-tests-with-cleanup)) (use-modules (sxml simple) @@ -47,10 +47,8 @@ ((error? result) `((error (@ (message ,(cddr result)))))) (#t '())))) -(define (junit-report results) - (let ((count (length results)) - (fails (length (filter fail? results))) - (errors (length (filter error? results)))) +(define (junit-report results fails errors) + (let ((count (length results))) `(testsuites (testsuite (@ (name "wipforth e2e") @@ -60,5 +58,14 @@ ,@(map test-junit-report results))))) (define (run-tests) - (let ((results (map run-test (fluid-ref *tests*)))) - (sxml->xml (junit-report results)))) + (let* ((results (map run-test (fluid-ref *tests*))) + (fails (length (filter fail? results))) + (errors (length (filter error? results)))) + (sxml->xml (junit-report results fails errors)) + (exit (if (= (+ fails errors) 0) 0 1)))) + +(define-syntax-rule (run-tests-with-cleanup body ...) + (dynamic-wind + (lambda () #f) + run-tests + (lambda () body ...))) diff --git a/tests.scm b/tests.scm index 0e4f0a1..064e048 100644 --- a/tests.scm +++ b/tests.scm @@ -40,8 +40,7 @@ (assert (string=? "Hello, world!" result-line) (format #f "Result line: ~s" result-line)))) -(run-tests) - -(client-teardown client) -(close-firefox firefox) -(server-stop server) +(run-tests-with-cleanup + (client-teardown client) + (close-firefox firefox) + (server-stop server))