]> git.eshelyaron.com Git - emacs.git/commitdiff
Extend ert to print duration of single tests
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 14 Mar 2018 15:21:06 +0000 (16:21 +0100)
committerAndrew G Cohen <cohen@andy.bu.edu>
Tue, 11 Dec 2018 06:17:30 +0000 (14:17 +0800)
* lisp/emacs-lisp/ert.el (ert-test-result): New slot ´duration'.
(ert-run-or-rerun-test): Set it.
(ert-batch-print-duration): New defvar.
(ert-run-tests-batch): Print duration if needed.

* test/Makefile.in (TEST_PRINT_TEST_DURATION): New variable.

* test/README: Explain TEST_PRINT_TEST_DURATION.

lisp/emacs-lisp/ert.el
test/Makefile.in
test/README

index a47108545d1a639a37dd582e53a633db9008d794..7d8d0a50e489f168f8b86f551c137abeff3b9805 100644 (file)
@@ -676,6 +676,7 @@ and is displayed in front of the value of MESSAGE-FORM."
 (cl-defstruct ert-test-result
   (messages nil)
   (should-forms nil)
+  (duration 0)
   )
 (cl-defstruct (ert-test-passed (:include ert-test-result)))
 (cl-defstruct (ert-test-result-with-condition (:include ert-test-result))
@@ -1230,6 +1231,11 @@ SELECTOR is the selector that was used to select TESTS."
         (ert-run-test test)
       (setf (aref (ert--stats-test-end-times stats) pos) (current-time))
       (let ((result (ert-test-most-recent-result test)))
+        (setf (ert-test-result-duration result)
+              (float-time
+               (time-subtract
+                (aref (ert--stats-test-end-times stats) pos)
+                (aref (ert--stats-test-start-times stats) pos))))
         (ert--stats-set-test-and-result stats pos test result)
         (funcall listener 'test-ended stats test result))
       (setf (ert--stats-current-test stats) nil))))
@@ -1336,6 +1342,9 @@ RESULT must be an `ert-test-result-with-condition'."
 (defvar ert-quiet nil
   "Non-nil makes ERT only print important information in batch mode.")
 
+(defvar ert-batch-print-duration nil
+  "Non-nil makes ERT print duration time of single tests in batch mode.")
+
 ;;;###autoload
 (defun ert-run-tests-batch (&optional selector)
   "Run the tests specified by SELECTOR, printing results to the terminal.
@@ -1446,13 +1455,17 @@ Returns the stats object."
             (let* ((max (prin1-to-string (length (ert--stats-tests stats))))
                    (format-string (concat "%9s  %"
                                           (prin1-to-string (length max))
-                                          "s/" max "  %S")))
+                                          "s/" max "  %S"
+                                          (if ert-batch-print-duration
+                                              " (%f sec)"))))
               (message format-string
                        (ert-string-for-test-result result
                                                    (ert-test-result-expected-p
                                                     test result))
                        (1+ (ert--stats-test-pos stats test))
-                       (ert-test-name test))))))))
+                       (ert-test-name test)
+                       (if ert-batch-print-duration
+                           (ert-test-result-duration result)))))))))
    nil))
 
 ;;;###autoload
index 42d9880e66aa5657d61e3f0cbe2ecd6611befcfa..0b6f8c2eecfe79fbb1aa882f28572e9f185caddb 100644 (file)
@@ -99,14 +99,20 @@ TEST_LOCALE = C
 # If you just want a pass/fail, setting this to no is much faster.
 TEST_LOAD_EL ?= yes
 
+# Additional settings for ert.
+ert_opts =
+
 # Maximum length of lines in ert backtraces; nil for no limit.
 # (if empty, use the default ert-batch-backtrace-right-margin).
 TEST_BACKTRACE_LINE_LENGTH =
 
-ifeq (${TEST_BACKTRACE_LINE_LENGTH},)
-ert_opts =
-else
-ert_opts = --eval '(setq ert-batch-backtrace-right-margin ${TEST_BACKTRACE_LINE_LENGTH})'
+ifneq (${TEST_BACKTRACE_LINE_LENGTH},)
+ert_opts += --eval '(setq ert-batch-backtrace-right-margin ${TEST_BACKTRACE_LINE_LENGTH})'
+endif
+
+# Whether the tests shall also report their duration.
+ifdef TEST_PRINT_TEST_DURATION
+ert_opts += --eval '(setq ert-batch-print-duration t)'
 endif
 
 ifeq (@HAVE_MODULES@, yes)
index 1cd9db3bb888b08288861b402cbc0d6f28f68246..11a25fb524b95be5ef960e484ea6ef76ac0a6bcc 100644 (file)
@@ -50,6 +50,11 @@ nicer backtraces.  To run the compiled version of a test use
 
     make TEST_LOAD_EL=no ...
 
+Sometimes, it is ncessary to trace the duration time for single tests.
+This is controlled by the environment variable TEST_PRINT_TEST_DURATION
+
+    make TEST_PRINT_TEST_DURATION=1 ...
+
 \f
 (Also, see etc/compilation.txt for compilation mode font lock tests.)