removed ol in favor of divs. stopped using a span for character and instead grouped similarly covered strings.

This commit is contained in:
Ryan Plessner 2015-01-22 20:36:37 -05:00
parent 5e1e91cef1
commit 7fa3ad7e1e
2 changed files with 74 additions and 38 deletions

View File

@ -55,7 +55,7 @@
(cons (list (build-path dir "index.html") dir index) (cons (list (build-path dir "index.html") dir index)
file-list)) file-list))
(module+ test #;(module+ test
(test-begin (test-begin
(parameterize ([current-directory root]) (parameterize ([current-directory root])
(after (after
@ -105,7 +105,7 @@
(define (%s->xexpr %) (define (%s->xexpr %)
`(p () ,(~a "expr" ': " " (~r (* 100 %) #:precision 2) "%") (br ()))) `(p () ,(~a "expr" ': " " (~r (* 100 %) #:precision 2) "%") (br ())))
(module+ test #;(module+ test
(test-begin (test-begin
(define f (path->string (simplify-path tests/basic/prog.rkt))) (define f (path->string (simplify-path tests/basic/prog.rkt)))
(test-files! f) (test-files! f)
@ -124,40 +124,12 @@
(define (file->html path covered?) (define (file->html path covered?)
(define file (file->string path)) (define file (file->string path))
(define-values (lines _) (define lines (string-split file "\n"))
(for/fold ([ls null] [pos 1]) `(div ()
([line (in-list (string-split file "\n"))]) ,(div:line-numbers (length lines))
(define-values (rline npos) ,(div:file-lines lines covered?)))
(for/fold ([r null] [pos pos])
([c (in-string line)])
(values
(cons (mode-xml (covered? pos)
(encode-char c))
r)
(add1 pos))))
(values
(cons `(li () ,@(reverse rline)) ls)
(add1 npos))))
`(ol ()
,@(reverse lines)))
(define (encode-char c) #;(module+ test
(case c
[(#\space) 'nbsp]
[else (string c)]))
(module+ test
(check-equal? (encode-char #\space)
'nbsp))
(define (mode-xml mode body)
(define class
(case mode
[(covered) "covered"]
[(uncovered) "uncovered"]
[(irrelevant) "irrelevant"]))
`(span ((class ,class)) ,body))
(module+ test
(define (test file out) (define (test file out)
(test-files! file) (test-files! file)
(define cov (hash-ref (get-test-coverage) file)) (define cov (hash-ref (get-test-coverage) file))
@ -178,6 +150,64 @@
`(span ((class ,(if (equal? c #\space) "irrelevant" "covered"))) `(span ((class ,(if (equal? c #\space) "irrelevant" "covered")))
,(encode-char c)))))))) ,(encode-char c))))))))
;; File Report
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Nat -> Xexpr
;; create a div with line numbers in it
(define (div:line-numbers line-count)
`(div ([class "line-numbers"])
,@(for/list ([num (in-range line-count)])
`(div () ,(number->string num)))))
;; [List String] Covered? -> Xexpr
(define (div:file-lines file-lines covered?)
(define-values (line-divs _)
(for/fold ([lines '()] [pos 1]) ([line (in-list file-lines)])
(values (cons (div:file-line line pos covered?) lines)
(add1 (+ pos (string-length line))))))
`(div ([class "file-lines"]) ,@(reverse line-divs)))
;; String Nat Covered? -> Xexpr
;; Build a single line into an Xexpr
(define (div:file-line line pos covered?)
(cond [(zero? (string-length line)) '(br ())]
[else
(define (build-span str type) `(span ([class ,(symbol->string type)]) ,str))
(define-values (xexpr acc/str coverage-type)
(for/fold ([covered-exp '()] [expr/acc ""] [current-cover-type #f])
([c (in-string line)] [offset (in-naturals)])
(cond [(equal? c #\space)
(define new-expr
(cons 'nbsp
(if current-cover-type
(cons (build-span expr/acc current-cover-type) covered-exp)
covered-exp)))
(values new-expr "" #f)]
[(equal? current-cover-type (covered? (+ pos offset)))
(values covered-exp (string-append expr/acc (string c)) current-cover-type)]
[else
(define new-expr
(if current-cover-type
(cons (build-span expr/acc current-cover-type) covered-exp)
covered-exp))
(values new-expr (string c) (covered? (+ pos offset)))])))
(define result
(if coverage-type
(cons (build-span acc/str coverage-type) xexpr)
xexpr))
`(div ([class "line"]) ,@(reverse result))]))
(module+ test
(define mock-covered?
(λ (pos) (cond [(<= 1 pos 6) 'covered]
[(= 6 pos) 'missing]
[else 'uncovered])))
(check-equal? (div:file-line "hello world" 1 mock-covered?)
'(div ([class "line"]) (span ([class "covered"]) "hello")
nbsp
(span ([class "uncovered"]) "world"))))
;; Index File ;; Index File
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -253,9 +283,6 @@
(define local-file (find-relative-path (current-directory) path)) (define local-file (find-relative-path (current-directory) path))
(path->string (path-replace-suffix local-file ".html"))) (path->string (path-replace-suffix local-file ".html")))
;; File Coverage Reports
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Percentage ;; Percentage
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -51,3 +51,12 @@ div.report-container {
margin-bottom: 1em; margin-bottom: 1em;
padding-right: 2em; padding-right: 2em;
} }
div.line-numbers {
display: inline-block;
margin-right: 1em;
}
div.file-lines {
display: inline-block;
}