branch: elpa/buttercup
commit ef7b730c0c6b0f45716bf473f90a1530aa587ec0
Author: Jorgen Schaefer <[email protected]>
Commit: Jorgen Schaefer <[email protected]>
Various improvements of the batch reporter.
---
buttercup-test.el | 2 +-
buttercup.el | 62 ++++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 44 insertions(+), 20 deletions(-)
diff --git a/buttercup-test.el b/buttercup-test.el
index 9d8bd4d..ec5068e 100644
--- a/buttercup-test.el
+++ b/buttercup-test.el
@@ -565,7 +565,7 @@
(expect 'buttercup--print
:to-have-been-called-with
- "%s%s\n"
+ "%s%s"
" "
"spec"))
diff --git a/buttercup.el b/buttercup.el
index e82950e..ce23743 100644
--- a/buttercup.el
+++ b/buttercup.el
@@ -632,7 +632,8 @@ current directory."
(defun buttercup-run ()
(if buttercup-suites
- (progn
+ (let ((print-escape-newlines t)
+ (print-escape-nonascii t))
(funcall buttercup-reporter 'buttercup-started buttercup-suites)
(mapc #'buttercup--run-suite buttercup-suites)
(funcall buttercup-reporter 'buttercup-done buttercup-suites))
@@ -710,9 +711,16 @@ suite-done -- A suite has finished. The argument is the
spec.
buttercup-done -- All suites have run, the test run is over.")
+(defvar buttercup-reporter-batch--start-time nil
+ "The time the last batch report started.")
+
+(defvar buttercup-reporter-batch--failures nil
+ "List of failed specs of the current batch report.")
+
(defun buttercup-reporter-batch (event arg)
(pcase event
(`buttercup-started
+ (setq buttercup-reporter-batch--start-time (float-time))
(buttercup--print "Running %s specs.\n\n"
(buttercup-suites-total-specs-defined arg)))
@@ -724,38 +732,55 @@ buttercup-done -- All suites have run, the test run is
over.")
(`spec-started
(let ((level (length (buttercup-spec-parents arg))))
- (buttercup--print "%s%s\n"
+ (buttercup--print "%s%s"
(make-string (* 2 level) ?\s)
(buttercup-spec-description arg))))
(`spec-done
(cond
((eq (buttercup-spec-status arg) 'passed)
- t)
+ (buttercup--print "\n"))
((eq (buttercup-spec-status arg) 'failed)
- (let ((description (buttercup-spec-failure-description arg))
- (stack (buttercup-spec-failure-stack arg)))
- (when stack
- (buttercup--print "\nTraceback (most recent call last):\n")
- (dolist (frame stack)
- (buttercup--print " %S\n" (cdr frame))))
- (if (stringp description)
- (buttercup--print "FAILED: %s\n"
- (buttercup-spec-failure-description arg))
- (buttercup--print "%S: %S\n\n" (car err) (cdr err)))
- (buttercup--print "\n")))
+ (buttercup--print " FAILED\n")
+ (setq buttercup-reporter-batch--failures
+ (append buttercup-reporter-batch--failures
+ (list arg))))
(t
- (buttercup--print "??? %S\n" (buttercup-spec-status arg)))))
+ (error "Unknown spec status %s" (buttercup-spec-status arg)))))
(`suite-done
(when (= 0 (length (buttercup-suite-parents arg)))
(buttercup--print "\n")))
(`buttercup-done
- (buttercup--print "Ran %s specs, %s failed.\n"
+ (dolist (failed buttercup-reporter-batch--failures)
+ (let ((description (buttercup-spec-failure-description failed))
+ (stack (buttercup-spec-failure-stack failed)))
+ (buttercup--print "%s\n" (make-string 40 ?=))
+ (buttercup--print "%s\n" (buttercup-spec-full-name failed))
+ (when stack
+ (buttercup--print "\nTraceback (most recent call last):\n")
+ (dolist (frame stack)
+ (let ((line (format " %S" (cdr frame))))
+ (when (> (length line) 79)
+ (setq line (concat (substring line 0 76)
+ "...")))
+ (buttercup--print "%s\n" line))))
+ (cond
+ ((stringp description)
+ (buttercup--print "FAILED: %s\n" description))
+ ((eq (car description) 'error)
+ (buttercup--print "%S: %S\n\n"
+ (car description)
+ (cadr description)))
+ (t
+ (buttercup--print "FAILED: %S\n" description)))
+ (buttercup--print "\n")))
+ (buttercup--print "Ran %s specs, %s failed, in %.1f seconds.\n"
(buttercup-suites-total-specs-defined arg)
(buttercup-suites-total-specs-failed arg)
- )
+ (- (float-time)
+ buttercup-reporter-batch--start-time))
(when (> (buttercup-suites-total-specs-failed arg) 0)
(error "")))
@@ -763,8 +788,7 @@ buttercup-done -- All suites have run, the test run is
over.")
(error "Unknown event %s" event))))
(defun buttercup--print (fmt &rest args)
- (let ((print-escape-newlines t))
- (princ (apply #'format fmt args))))
+ (send-string-to-terminal (apply #'format fmt args)))
;;;;;;;;;;;;;
;;; Utilities