cover/raco.rkt
2014-12-28 22:24:14 -06:00

53 lines
1.7 KiB
Racket

#lang racket
(require raco/command-name "main.rkt" "format.rkt")
(module+ main
(define coverage-dir "coverage")
(define coverage? #f)
(define output-format "")
(define files
(expand-directories
(command-line
#:program (short-program+command-name)
#:once-any
[("-d" "--directory") d "Specify output directory" (set! coverage-dir d)]
[("-c" "--coverage") format
"Specify that coverage should be run and optional what format"
(set! coverage? #t)
(set! output-format format)]
#:args files
files)))
(printf "testing ~s\n" files)
(define passed (keyword-apply test-files! '(#:coverage) (list coverage?) files))
(when coverage?
(printf "COVERAGE!")
(define coverage (get-test-coverage))
(case output-format
[("html") (generate-html-coverage coverage coverage-dir)]
[("coveralls") (generate-coveralls-coverage coverage (hasheq) coverage-dir)]))
(exit
(case passed
[(#t) 0]
[(#f) 1])))
;; TODO allow for arbitrary extensions
(define extensions '(#rx".rkt$" #rx".ss$"))
(define (expand-directories files)
(flatten
(for/list ([f files])
(if (not (directory-exists? f))
f
(parameterize ([current-directory (build-path (current-directory) f)])
(expand-directory))))))
(define (expand-directory)
(for/list ([p (directory-list)])
(cond [(directory-exists? p)
(parameterize ([current-directory (build-path (current-directory) p)])
(expand-directory))]
[(ormap (lambda (r) (regexp-match r (path->string p))) extensions)
(path->string (build-path (current-directory) p))]
[else null])))