diff options
| author | João Távora | 2017-09-07 14:19:33 +0100 |
|---|---|---|
| committer | João Távora | 2017-10-03 13:51:45 +0100 |
| commit | 9f8ad133eb66ffb0a1985a35a3c05bc52e6f6361 (patch) | |
| tree | 2cd528b74546f6c162b4a908ce424cb88844ff59 | |
| parent | bbcb079522e12d8b9d416a8472a2966cc6d83a5a (diff) | |
| download | emacs-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.el | 68 |
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`. |
| 43 | SEVERITY-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 | ||