From: João Távora Date: Thu, 7 Sep 2017 13:19:33 +0000 (+0100) Subject: Refactor Flymake tests in preparation for more tests X-Git-Tag: emacs-26.0.90~56^2^2~31 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9f8ad133eb66ffb0a1985a35a3c05bc52e6f6361;p=emacs.git Refactor Flymake tests in preparation for more tests Introduce a slightly more generic fixture macro. Also make flymake-tests.el friendlier to interactive runs, by not killing buffers visited by the user. * test/lisp/progmodes/flymake-tests.el (flymake-tests--call-with-fixture): New helper from flymake-tests--current-face. Don't kill file buffers already being visited before the test starts. (flymake-tests--with-flymake): New macro. (flymake-tests--current-face): Delete. (warning-predicate-rx-gcc, warning-predicate-function-gcc) (warning-predicate-rx-perl, warning-predicate-function-perl): Use flymake-test--with-flymake. --- diff --git a/test/lisp/progmodes/flymake-tests.el b/test/lisp/progmodes/flymake-tests.el index 338e8e0f074..c626aec04bd 100644 --- a/test/lisp/progmodes/flymake-tests.el +++ b/test/lisp/progmodes/flymake-tests.el @@ -34,15 +34,23 @@ "Directory containing flymake test data.") -;; Warning predicate -(defun flymake-tests--current-face (file predicate) - (let ((buffer (find-file-noselect - (expand-file-name file flymake-tests-data-directory))) - (process-environment (cons "LC_ALL=C" process-environment)) - (i 0)) +;; +;; +(cl-defun flymake-tests--call-with-fixture (fn file + &key (severity-predicate + nil sev-pred-supplied-p)) + "Call FN after flymake setup in FILE, using `flymake-proc`. +SEVERITY-PREDICATE is used to setup +`flymake-proc-warning-predicate'." + (let* ((file (expand-file-name file flymake-tests-data-directory)) + (visiting (find-buffer-visiting file)) + (buffer (or visiting (find-file-noselect file))) + (process-environment (cons "LC_ALL=C" process-environment)) + (i 0)) (unwind-protect (with-current-buffer buffer - (setq-local flymake-proc-warning-predicate predicate) + (when sev-pred-supplied-p + (setq-local flymake-proc-warning-predicate severity-predicate)) (goto-char (point-min)) (flymake-mode 1) ;; Weirdness here... http://debbugs.gnu.org/17647#25 @@ -57,36 +65,54 @@ (while (and flymake-is-running (< (setq i (1+ i)) 10)) (unless noninteractive (read-event "" nil 0.1)) (sleep-for (+ 0.5 flymake-no-changes-timeout))) - (flymake-goto-next-error) - (face-at-point)) - (and buffer (let (kill-buffer-query-functions) (kill-buffer buffer)))))) + (funcall fn)) + (and buffer + (not visiting) + (let (kill-buffer-query-functions) (kill-buffer buffer)))))) + +(cl-defmacro flymake-tests--with-flymake ((file &rest args) + &body body) + (declare (indent 1) + (debug (sexp &rest form))) + `(flymake-tests--call-with-fixture (lambda () ,@body) ,file ,@args)) (ert-deftest warning-predicate-rx-gcc () "Test GCC warning via regexp predicate." (skip-unless (and (executable-find "gcc") (executable-find "make"))) - (should (eq 'flymake-warning - (flymake-tests--current-face "test.c" "^[Ww]arning")))) + (flymake-tests--with-flymake + ("test.c" :severity-predicate "^[Ww]arning") + (flymake-goto-next-error) + (should (eq 'flymake-warning + (face-at-point))))) (ert-deftest warning-predicate-function-gcc () "Test GCC warning via function predicate." (skip-unless (and (executable-find "gcc") (executable-find "make"))) - (should (eq 'flymake-warning - (flymake-tests--current-face "test.c" - (lambda (msg) (string-match "^[Ww]arning" msg)))))) + (flymake-tests--with-flymake + ("test.c" :severity-predicate + (lambda (msg) (string-match "^[Ww]arning" msg))) + (flymake-goto-next-error) + (should (eq 'flymake-warning + (face-at-point))))) (ert-deftest warning-predicate-rx-perl () "Test perl warning via regular expression predicate." (skip-unless (executable-find "perl")) - (should (eq 'flymake-warning - (flymake-tests--current-face "test.pl" "^Scalar value")))) + (flymake-tests--with-flymake + ("test.pl" :severity-predicate "^Scalar value") + (flymake-goto-next-error) + (should (eq 'flymake-warning + (face-at-point))))) (ert-deftest warning-predicate-function-perl () "Test perl warning via function predicate." (skip-unless (executable-find "perl")) - (should (eq 'flymake-warning - (flymake-tests--current-face - "test.pl" - (lambda (msg) (string-match "^Scalar value" msg)))))) + (flymake-tests--with-flymake + ("test.pl" :severity-predicate + (lambda (msg) (string-match "^Scalar value" msg))) + (flymake-goto-next-error) + (should (eq 'flymake-warning + (face-at-point))))) (provide 'flymake-tests)