;;; ert-my-utils.el --- Changes to ERT tests ;;; Commentary: ;; ;; Hacks to output errors when testing GUI ;; ;;; Code: (require 'cl-lib) (require 'f) (require 'ert) (defun wg-tests-log (&optional ok) "Try to log with status OK." (with-current-buffer "*Messages*" (let ((txt (buffer-substring (point-min) (point-max)))) (if ok (f-write-text txt 'utf-8 "/tmp/wg-tests-ok.log") (f-write-text txt 'utf-8 "/tmp/wg-tests.log"))))) (defun ert--run-test-internal (test-execution-info) "Low-level function to run a test according to TEST-EXECUTION-INFO. My version without `save-window-excursion'." (setf (ert--test-execution-info-next-debugger test-execution-info) debugger (ert--test-execution-info-ert-debug-on-error test-execution-info) ert-debug-on-error) (catch 'ert--pass ;;(with-temp-buffer ;;(save-window-excursion (let ((debugger (lambda (&rest args) (ert--run-test-debugger test-execution-info args))) (debug-on-error t) (debug-on-quit t) (debug-ignored-errors nil) (ert--infos '())) (funcall (ert-test-body (ert--test-execution-info-test test-execution-info)))) ;;)) (ert-pass)) (setf (ert--test-execution-info-result test-execution-info) (make-ert-test-passed)) nil) (defun my-ert-run-tests () "My variant of `ert-run-tests-batch-and-exit'. To hack this: http://stackoverflow.com/questions/25490989/how-should-i-run-emacs-ert-tests-when-i-need-gui-tests" (unwind-protect (let ((stats (ert-run-tests-batch))) (if (zerop (ert-stats-completed-unexpected stats)) (wg-tests-log t) (wg-tests-log)) (kill-emacs (if (zerop (ert-stats-completed-unexpected stats)) 0 0)) ) (unwind-protect (progn (message "Error running tests") (backtrace) ;;(wg-tests-log) ) (kill-emacs 0) ))) (defmacro wg-test-special (mode pkg &rest body) "Test restoring MODE from PKG. Create needed buffer by executing BODY. Then tests will follow to save it and restore." (declare (indent 2)) `(let ((wg-log-level 0) message-log-max) ;; prepare (delete-other-windows) (switch-to-buffer wg-default-buffer) ;; create a buffer (require ,pkg) ,@body (should (eq major-mode ,mode)) (wg-save-session) ;; save and restore (workgroups-mode 0) (switch-to-buffer wg-default-buffer) (workgroups-mode 1) (should (eq major-mode ,mode)) )) (provide 'ert-my-utils) ;;; ert-my-utils.el ends here