emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/buttercup ef7b730 063/340: Various improvements of the bat


From: ELPA Syncer
Subject: [nongnu] elpa/buttercup ef7b730 063/340: Various improvements of the batch reporter.
Date: Thu, 16 Dec 2021 14:59:05 -0500 (EST)

branch: elpa/buttercup
commit ef7b730c0c6b0f45716bf473f90a1530aa587ec0
Author: Jorgen Schaefer <contact@jorgenschaefer.de>
Commit: Jorgen Schaefer <contact@jorgenschaefer.de>

    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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]