aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Távora2017-09-07 14:19:33 +0100
committerJoão Távora2017-10-03 13:51:45 +0100
commit9f8ad133eb66ffb0a1985a35a3c05bc52e6f6361 (patch)
tree2cd528b74546f6c162b4a908ce424cb88844ff59
parentbbcb079522e12d8b9d416a8472a2966cc6d83a5a (diff)
downloademacs-9f8ad133eb66ffb0a1985a35a3c05bc52e6f6361.tar.gz
emacs-9f8ad133eb66ffb0a1985a35a3c05bc52e6f6361.zip
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.
-rw-r--r--test/lisp/progmodes/flymake-tests.el68
1 files changed, 47 insertions, 21 deletions
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 @@
34 "Directory containing flymake test data.") 34 "Directory containing flymake test data.")
35 35
36 36
37;; Warning predicate 37;;
38(defun flymake-tests--current-face (file predicate) 38;;
39 (let ((buffer (find-file-noselect 39(cl-defun flymake-tests--call-with-fixture (fn file
40 (expand-file-name file flymake-tests-data-directory))) 40 &key (severity-predicate
41 (process-environment (cons "LC_ALL=C" process-environment)) 41 nil sev-pred-supplied-p))
42 (i 0)) 42 "Call FN after flymake setup in FILE, using `flymake-proc`.
43SEVERITY-PREDICATE is used to setup
44`flymake-proc-warning-predicate'."
45 (let* ((file (expand-file-name file flymake-tests-data-directory))
46 (visiting (find-buffer-visiting file))
47 (buffer (or visiting (find-file-noselect file)))
48 (process-environment (cons "LC_ALL=C" process-environment))
49 (i 0))
43 (unwind-protect 50 (unwind-protect
44 (with-current-buffer buffer 51 (with-current-buffer buffer
45 (setq-local flymake-proc-warning-predicate predicate) 52 (when sev-pred-supplied-p
53 (setq-local flymake-proc-warning-predicate severity-predicate))
46 (goto-char (point-min)) 54 (goto-char (point-min))
47 (flymake-mode 1) 55 (flymake-mode 1)
48 ;; Weirdness here... http://debbugs.gnu.org/17647#25 56 ;; Weirdness here... http://debbugs.gnu.org/17647#25
@@ -57,36 +65,54 @@
57 (while (and flymake-is-running (< (setq i (1+ i)) 10)) 65 (while (and flymake-is-running (< (setq i (1+ i)) 10))
58 (unless noninteractive (read-event "" nil 0.1)) 66 (unless noninteractive (read-event "" nil 0.1))
59 (sleep-for (+ 0.5 flymake-no-changes-timeout))) 67 (sleep-for (+ 0.5 flymake-no-changes-timeout)))
60 (flymake-goto-next-error) 68 (funcall fn))
61 (face-at-point)) 69 (and buffer
62 (and buffer (let (kill-buffer-query-functions) (kill-buffer buffer)))))) 70 (not visiting)
71 (let (kill-buffer-query-functions) (kill-buffer buffer))))))
72
73(cl-defmacro flymake-tests--with-flymake ((file &rest args)
74 &body body)
75 (declare (indent 1)
76 (debug (sexp &rest form)))
77 `(flymake-tests--call-with-fixture (lambda () ,@body) ,file ,@args))
63 78
64(ert-deftest warning-predicate-rx-gcc () 79(ert-deftest warning-predicate-rx-gcc ()
65 "Test GCC warning via regexp predicate." 80 "Test GCC warning via regexp predicate."
66 (skip-unless (and (executable-find "gcc") (executable-find "make"))) 81 (skip-unless (and (executable-find "gcc") (executable-find "make")))
67 (should (eq 'flymake-warning 82 (flymake-tests--with-flymake
68 (flymake-tests--current-face "test.c" "^[Ww]arning")))) 83 ("test.c" :severity-predicate "^[Ww]arning")
84 (flymake-goto-next-error)
85 (should (eq 'flymake-warning
86 (face-at-point)))))
69 87
70(ert-deftest warning-predicate-function-gcc () 88(ert-deftest warning-predicate-function-gcc ()
71 "Test GCC warning via function predicate." 89 "Test GCC warning via function predicate."
72 (skip-unless (and (executable-find "gcc") (executable-find "make"))) 90 (skip-unless (and (executable-find "gcc") (executable-find "make")))
73 (should (eq 'flymake-warning 91 (flymake-tests--with-flymake
74 (flymake-tests--current-face "test.c" 92 ("test.c" :severity-predicate
75 (lambda (msg) (string-match "^[Ww]arning" msg)))))) 93 (lambda (msg) (string-match "^[Ww]arning" msg)))
94 (flymake-goto-next-error)
95 (should (eq 'flymake-warning
96 (face-at-point)))))
76 97
77(ert-deftest warning-predicate-rx-perl () 98(ert-deftest warning-predicate-rx-perl ()
78 "Test perl warning via regular expression predicate." 99 "Test perl warning via regular expression predicate."
79 (skip-unless (executable-find "perl")) 100 (skip-unless (executable-find "perl"))
80 (should (eq 'flymake-warning 101 (flymake-tests--with-flymake
81 (flymake-tests--current-face "test.pl" "^Scalar value")))) 102 ("test.pl" :severity-predicate "^Scalar value")
103 (flymake-goto-next-error)
104 (should (eq 'flymake-warning
105 (face-at-point)))))
82 106
83(ert-deftest warning-predicate-function-perl () 107(ert-deftest warning-predicate-function-perl ()
84 "Test perl warning via function predicate." 108 "Test perl warning via function predicate."
85 (skip-unless (executable-find "perl")) 109 (skip-unless (executable-find "perl"))
86 (should (eq 'flymake-warning 110 (flymake-tests--with-flymake
87 (flymake-tests--current-face 111 ("test.pl" :severity-predicate
88 "test.pl" 112 (lambda (msg) (string-match "^Scalar value" msg)))
89 (lambda (msg) (string-match "^Scalar value" msg)))))) 113 (flymake-goto-next-error)
114 (should (eq 'flymake-warning
115 (face-at-point)))))
90 116
91(provide 'flymake-tests) 117(provide 'flymake-tests)
92 118