diff --git a/cover/private/html/html.rkt b/cover/private/html/html.rkt
index 336c3e5..f00be11 100644
--- a/cover/private/html/html.rkt
+++ b/cover/private/html/html.rkt
@@ -21,6 +21,7 @@
(define-runtime-path root "../..")
(define-runtime-path tests/basic/prog.rkt "../../tests/basic/prog.rkt")
(define-runtime-path tests/basic/not-run.rkt "../../tests/basic/not-run.rkt")
+ (define-runtime-path tests/basic/no-expressions.rkt "../../tests/basic/no-expressions.rkt")
(define (mock-covered? pos)
(cond [(<= 1 pos 6) 'covered]
[(= 6 pos) 'missing]
@@ -151,7 +152,7 @@
(meta ([charset "utf-8"]))
(link ([rel "stylesheet"] [type "text/css"] [href ,(string-append assets-path "main.css")])))
(body ()
- ,(%s->xexpr (/ covered total))
+ ,(%s->xexpr (if (= total 0) 1 (/ covered total)))
(div ([class "code"]) ,(file->html path covered?)))))
(define (%s->xexpr %)
@@ -164,6 +165,20 @@
(test-files! f)
(define cov (get-test-coverage))
(define covered? (curry cov f))
+ (check-equal? (make-html-file cov f "assets/")
+ `(html ()
+ (head ()
+ (meta ([charset "utf-8"]))
+ (link ([rel "stylesheet"] [type "text/css"] [href "assets/main.css"])))
+ (body ()
+ (p () "expr: 100%" (br ()))
+ (div ([class "code"])
+ ,(file->html f covered?))))))
+ (parameterize ([current-cover-environment (make-cover-environment)])
+ (define f (path->string (simplify-path tests/basic/no-expressions.rkt)))
+ (test-files! f)
+ (define cov (get-test-coverage))
+ (define covered? (curry cov f))
(check-equal? (make-html-file cov f "assets/")
`(html ()
(head ()
@@ -191,16 +206,27 @@
(check-equal? (file->html f covered?)
`(div ([class "lines-wrapper"])
,(div:line-numbers (length lines))
- ,(div:file-lines lines covered?)))
+ ,(div:file-lines lines covered?)))))
+ (test-begin
(parameterize ([current-cover-environment (make-cover-environment)])
- (define f2 (path->string (simplify-path tests/basic/not-run.rkt)))
- (test-files! f2)
- (define covered? (curry (get-test-coverage) f2))
- (define lines (string-split (file->string f2) "\n" #:trim? #f))
- (check-equal? (file->html f2 covered?)
- `(div ([class "lines-wrapper"])
- ,(div:line-numbers 4)
- ,(div:file-lines lines covered?)))))))
+ (define f (path->string (simplify-path tests/basic/not-run.rkt)))
+ (test-files! f)
+ (define covered? (curry (get-test-coverage) f))
+ (define lines (string-split (file->string f) "\n" #:trim? #f))
+ (check-equal? (file->html f covered?)
+ `(div ([class "lines-wrapper"])
+ ,(div:line-numbers 4)
+ ,(div:file-lines lines covered?)))))
+ (test-begin
+ (parameterize ([current-cover-environment (make-cover-environment)])
+ (define f (path->string (simplify-path tests/basic/no-expressions.rkt)))
+ (test-files! f)
+ (define covered? (curry (get-test-coverage) f))
+ (define lines (string-split (file->string f) "\n" #:trim? #f))
+ (check-equal? (file->html f covered?)
+ `(div ([class "lines-wrapper"])
+ ,(div:line-numbers 1)
+ ,(div:file-lines lines covered?))))))
;; File Report
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -324,7 +350,7 @@
(path->string (find-relative-path (current-directory) (string->path name))))
(define covered (first expr-coverage-info))
(define total (second expr-coverage-info))
- (define percentage (* 100 (/ covered total)))
+ (define percentage (* 100 (if (= total 0) 1 (/ covered total))))
(define styles `([class "file-info"]))
`(tr ,styles
(td ([class "file-name"]) (a ([href ,path]) ,local-file))
@@ -347,7 +373,14 @@
(td ([class "coverage-percentage"]) "100")
(td ([class "covered-expressions"]) "10")
(td ([class "uncovered-expressions"]) "0")
- (td ([class "total-expressions"]) "10")))))
+ (td ([class "total-expressions"]) "10"))))
+ (test-begin (check-equal? (tr:file-report "foo.rkt" "foo.html" (list 0 0))
+ '(tr ((class "file-info"))
+ (td ([class "file-name"]) (a ((href "foo.html")) "foo.rkt"))
+ (td ([class "coverage-percentage"]) "100")
+ (td ([class "covered-expressions"]) "0")
+ (td ([class "uncovered-expressions"]) "0")
+ (td ([class "total-expressions"]) "0")))))
;; Percentage
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -359,14 +392,19 @@
(define (expression-coverage-percentage/all all-expr-info)
(define total-covered (for/sum ([v (in-list (hash-values all-expr-info))]) (first v)))
(define total-exprs (for/sum ([v (in-list (hash-values all-expr-info))]) (second v)))
- (* (/ total-covered total-exprs) 100))
+ (* (if (= total-exprs 0) 1 (/ total-covered total-exprs)) 100))
(module+ test
(test-begin
(check-equal?
(expression-coverage-percentage/all (hash "foo.rkt" (list 0 10)
"bar.rkt" (list 10 10)))
- 50)))
+ 50))
+ (test-begin
+ (check-equal?
+ (expression-coverage-percentage/all (hash "foo.rkt" (list 0 0)
+ "bar.rkt" (list 0 0)))
+ 100)))
;; Expression Coverage
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/cover/raco.rkt b/cover/raco.rkt
index da3b7a7..1d1be0c 100644
--- a/cover/raco.rkt
+++ b/cover/raco.rkt
@@ -233,7 +233,8 @@
(check-equal? (list->set (map (compose path->string ->relative)
(flatten (expand-directory (list extensions)))))
(set "prog.rkt"
- "not-run.rkt")))
+ "not-run.rkt"
+ "no-expressions.rkt")))
(parameterize ([current-directory cur])
(define omit (map ->absolute (get-info-var cur 'test-omit-paths)))
(define dirs (map ->absolute (filter list? (flatten (expand-directory (list extensions))))))
diff --git a/cover/tests/basic/no-expressions.rkt b/cover/tests/basic/no-expressions.rkt
new file mode 100644
index 0000000..9c79238
--- /dev/null
+++ b/cover/tests/basic/no-expressions.rkt
@@ -0,0 +1 @@
+#lang racket
\ No newline at end of file
diff --git a/cover/tests/basic/no-expressions.rktl b/cover/tests/basic/no-expressions.rktl
new file mode 100644
index 0000000..c5c5ef4
--- /dev/null
+++ b/cover/tests/basic/no-expressions.rktl
@@ -0,0 +1,2 @@
+()
+()