branch: elpa/buttercup commit 24a7bb9389416ce3e9a09f98aafa7ba51b56fd0c Author: Ola Nilsson <ola.nils...@gmail.com> Commit: Ola Nilsson <ola.nils...@gmail.com>
Extract buttercup-reporter-batch--print-spec-done-line ... from the batch reporters. --- buttercup.el | 89 +++++++++++++++++++++++++++++-------------------- tests/test-buttercup.el | 14 +++++--- 2 files changed, 63 insertions(+), 40 deletions(-) diff --git a/buttercup.el b/buttercup.el index 3deceed..6ba18d7 100644 --- a/buttercup.el +++ b/buttercup.el @@ -1622,18 +1622,11 @@ EVENT and ARG are described in `buttercup-reporter'." (string-match-p "[\n\v\f]" (buttercup-spec-description arg))) (buttercup--print "%s" (buttercup--indented-description arg)))) (`spec-done - (pcase (buttercup-spec-status arg) - (`passed) ; do nothing - (`failed - (buttercup--print " FAILED") - (setq buttercup-reporter-batch--failures - (append buttercup-reporter-batch--failures - (list arg)))) - (`pending - (buttercup--print " %s" (buttercup-spec-failure-description arg))) - (_ - (error "Unknown spec status %s" (buttercup-spec-status arg)))) - (buttercup--print " (%s)\n" (buttercup-elapsed-time-string arg))) + (when (eq (buttercup-spec-status arg) 'failed) + (setq buttercup-reporter-batch--failures + (append buttercup-reporter-batch--failures + (list arg)))) + (buttercup-reporter-batch--print-spec-done-line arg buttercup-color)) (`suite-done (when (= 0 (length (buttercup-suite-or-spec-parents arg))) @@ -1647,6 +1640,52 @@ EVENT and ARG are described in `buttercup-reporter'." (_ (error "Unknown event %s" event))))) +(defun buttercup-reporter-batch--print-spec-done-line (spec color) + "Print the remainder of the SPEC report line for `spec-done'. + +If COLOR is non-nil, erace the text so far on the current line +using '\r' and replace it with the same text colored according to +the SPEC status. Do not erase and replace if the text would have +been reprinted with the default color. + +Then print the SPEC failure description except if the status is +`passed'. If COLOR is non-nil, print it in the aproprate color +for the spec status. + +Finally print the elapsed time for SPEC." + (let* ((status (buttercup-spec-status spec)) + (failure (buttercup-spec-failure-description spec))) + ;; Failed specs do typically not have string filure-descriptions. + ;; In this typical case, use the string "FAILED" for the output. + (and (eq status 'failed) + (not (stringp failure)) + (setq failure "FAILED")) + (unless (memq status '(passed pending failed)) + (error "Unknown spec status %s" status)) + ;; Special status in this function; + ;; skipped - a pending spec with failure description "SKIPPED". + (and (eq status 'pending) + (equal failure "SKIPPED") + (setq status 'skipped)) + ;; Use color both as a boolean for erase-and-reprint and the color + ;; to use. nil means the default color. + (setq color (and color (pcase status + (`passed 'green) + (`pending 'yellow) + (`failed 'red) + (`skipped nil)))) + (when color + ;; Carriage returns (\r) should not be colorized. It would mess + ;; up color handling in Emacs compilation buffers using + ;; `ansi-color-apply-on-region' in `compilation-filter-hook'. + (buttercup--print "\r%s" + (buttercup-colorize + (buttercup--indented-description spec) color))) + (unless (eq 'passed status) + (buttercup--print "%s" + (buttercup-colorize (concat " " failure) color))) + (buttercup--print " (%s)\n" (buttercup-elapsed-time-string spec)))) + (defun buttercup-reporter-batch--print-failed-spec-report (failed-spec color) "Print a failure report for FAILED-SPEC. @@ -1706,33 +1745,11 @@ colors. EVENT and ARG are described in `buttercup-reporter'." (pcase event (`spec-done - ;; Carriage returns (\r) should not be colorized. It would mess - ;; up color handling in Emacs compilation buffers using - ;; `ansi-color-apply-on-region' in `compilation-filter-hook'. - (pcase (buttercup-spec-status arg) - (`passed - (buttercup--print - "\r%s" (buttercup-colorize (buttercup--indented-description arg) 'green))) - (`failed - (buttercup--print - "\r%s" (buttercup-colorize - (concat (buttercup--indented-description arg) " FAILED") - 'red)) + (when (eq (buttercup-spec-status arg) 'failed) (setq buttercup-reporter-batch--failures (append buttercup-reporter-batch--failures (list arg)))) - (`pending - (if (equal (buttercup-spec-failure-description arg) "SKIPPED") - (buttercup--print " %s" (buttercup-spec-failure-description arg)) - (buttercup--print - "\r%s" (buttercup-colorize - (concat (buttercup--indented-description arg) " " - (buttercup-spec-failure-description arg)) - 'yellow)))) - (_ - (error "Unknown spec status %s" (buttercup-spec-status arg)))) - (buttercup--print " (%s)\n" (buttercup-elapsed-time-string arg))) - + (buttercup-reporter-batch--print-spec-done-line arg buttercup-color)) (_ ;; Fall through to buttercup-reporter-batch implementation. (buttercup-reporter-batch event arg))) diff --git a/tests/test-buttercup.el b/tests/test-buttercup.el index a6774f3..9f7b9fe 100644 --- a/tests/test-buttercup.el +++ b/tests/test-buttercup.el @@ -1242,10 +1242,16 @@ text properties using `ansi-color-apply'." (format "\e[33m spec DESCRIPTION\e[0m (%s)\n" (buttercup-elapsed-time-string spec)))))) - (it "should throw an error for an unknown spec status" - (setf (buttercup-spec-status spec) 'unknown) - (expect (buttercup-reporter-batch 'spec-done spec) - :to-throw))) + (describe "should throw an error for an unknown spec status" + (before-each (setf (buttercup-spec-status spec) 'unknown)) + (it "for plain output" + (with-local-buttercup :color nil + (expect (buttercup-reporter-batch 'spec-done spec) + :to-throw))) + (it "for colored output" + (with-local-buttercup :color t + (expect (buttercup-reporter-batch 'spec-done spec) + :to-throw))))) (describe "on the suite-done event" (it "should emit a newline at the end of a top-level suite"