scheme-libraries/retropikzel/ctrf.scm

126 lines
4.8 KiB
Scheme

(define (any->string any)
(parameterize
((current-output-port (open-output-string)))
(display any)
(get-output-string (current-output-port))))
(define runner
(lambda ()
(let ((runner (test-runner-null))
(tests (list))
(current-test-start-time 0)
(current-test-groups '()))
(test-runner-on-group-begin!
runner
(lambda (runner suite-name count)
(set! current-test-groups (append current-test-groups (list suite-name)))))
(test-runner-on-group-end!
runner
(lambda (runner)
(set! current-test-groups
(reverse (list-tail (reverse current-test-groups) 1)))))
(test-runner-on-test-begin!
runner
(lambda (runner)
(set! current-test-start-time (time-ms))))
(test-runner-on-test-end!
runner
(lambda (runner)
(let* ((name (test-runner-test-name runner))
(result (test-result-kind runner))
(status (cond ((equal? result 'pass) "passed")
((equal? result 'xpass) "passed")
((equal? result 'fail) "failed")
((equal? result 'xfail) "failed")
((equal? result 'skipped) "skipped")
(else "other")))
(duration (exact (floor (- (time-ms) current-test-start-time))))
(extra (make-hash-table)))
(when (test-result-ref runner 'expected-value)
(hash-table-set! extra
'expected-value
(test-result-ref runner 'expected-value)))
(when (test-result-ref runner 'actual-value)
(hash-table-set! extra
'actual-value
(test-result-ref runner 'actual-value)))
(when (test-result-ref runner 'expected-error)
(hash-table-set! extra
'expected-error
(test-result-ref runner 'expected-error)))
(when (test-result-ref runner 'actual-error)
(hash-table-set! extra
'actual-error
(test-result-ref runner 'actual-error)))
(when (test-result-ref runner 'source-form)
(hash-table-set! extra
'source-form
(any->string (test-result-ref runner 'source-form))))
(let ((test (alist->hash-table
`((name . ,name)
(status . ,status)
(duration . ,duration)
(suite . ,current-test-groups)
(extra . ,extra)))))
(when (test-result-ref runner 'source-file)
(hash-table-set! extra
'filePath
(test-result-ref runner 'source-file)))
(when (test-result-ref runner 'source-line)
(hash-table-set! extra
'line
(test-result-ref runner 'source-line)))
(set! tests (append tests (list test)))))))
(test-runner-on-final!
runner
(lambda (runner)
(let*
((pass (test-runner-pass-count runner))
(xpass (test-runner-xpass-count runner))
(fail (test-runner-fail-count runner))
(xfail (test-runner-xfail-count runner))
(skipped (test-runner-skip-count runner))
(tool (alist->hash-table
`((name . "srfi-64-retropikzel-ctrf"))))
(summary (alist->hash-table
`((tests . ,(+ pass xpass fail xfail))
(passed . ,(+ pass xpass))
(failed . ,(+ fail xfail))
(pending . 0)
(skipped . ,skipped)
(other . 0))))
(results (alist->hash-table
`((tool . ,tool)
(summary . ,summary)
(tests . ,tests))))
(env (alist->hash-table
`((appName . ,implementation-name)
(osPlatform . ,operation-system))))
(output (alist->hash-table
`((reportFormat . "CTRF")
(specVersion . "0.0.0")
(results . ,results)
(generatedBy . "(retropikzel ctrf)")
(environment . ,env)))))
(display (json-write '((a . 1))))
(newline)
(exit (+ fail xfail)))))
runner)))
(test-runner-factory runner)