branch: elpa/buttercup
commit c61a69ab62d10d6673893917162a0f2b44f1f82b
Author: Jorgen Schaefer <[email protected]>
Commit: Jorgen Schaefer <[email protected]>
A rudimentary interactive reporter.
---
buttercup.el | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/buttercup.el b/buttercup.el
index ce23743..4bfc769 100644
--- a/buttercup.el
+++ b/buttercup.el
@@ -686,7 +686,7 @@ Do not change the global value.")
;;;;;;;;;;;;;
;;; Reporters
-(defvar buttercup-reporter #'buttercup-reporter-batch
+(defvar buttercup-reporter #'buttercup-reporter-adaptive
"The reporter function for buttercup test runs.
During a run of buttercup, the value of this variable is called
@@ -711,6 +711,15 @@ suite-done -- A suite has finished. The argument is the
spec.
buttercup-done -- All suites have run, the test run is over.")
+(defun buttercup-reporter-adaptive (event arg)
+ "A reporter that handles both interactive and noninteractive sessions.
+
+Calls either `buttercup-reporter-batch' or
+`buttercup-reporter-interactive', depending."
+ (if noninteractive
+ (buttercup-reporter-batch event arg)
+ (buttercup-reporter-interactive event arg)))
+
(defvar buttercup-reporter-batch--start-time nil
"The time the last batch report started.")
@@ -790,6 +799,25 @@ buttercup-done -- All suites have run, the test run is
over.")
(defun buttercup--print (fmt &rest args)
(send-string-to-terminal (apply #'format fmt args)))
+(defun buttercup-reporter-interactive (event arg)
+ "Reporter for interactive uses."
+ ;; This is a bit rudimentary ...
+ (with-current-buffer (get-buffer-create "*Buttercup*")
+ (when (eq event 'buttercup-started)
+ (erase-buffer)
+ (view-mode 1)
+ (display-buffer (current-buffer)))
+ (let ((old-print (symbol-function 'buttercup--print))
+ (buf (current-buffer)))
+ (fset 'buttercup--print (lambda (fmt &rest args)
+ (with-current-buffer buf
+ (let ((inhibit-read-only t))
+ (goto-char (point-max))
+ (insert (apply 'format fmt args))))))
+ (unwind-protect
+ (buttercup-reporter-batch event arg)
+ (fset 'buttercup--print old-print)))))
+
;;;;;;;;;;;;;
;;; Utilities