]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new Flymake test for multiple errors and warnings
authorJoão Távora <joaotavora@gmail.com>
Thu, 21 Sep 2017 13:57:20 +0000 (14:57 +0100)
committerJoão Távora <joaotavora@gmail.com>
Tue, 3 Oct 2017 12:52:24 +0000 (13:52 +0100)
* test/lisp/progmodes/flymake-tests.el
(flymake-tests--call-with-fixture): Save excursion.
(errors-and-warnings): New test.

* test/lisp/progmodes/flymake-resources/errors-and-warnings.c:
New test fixture.

test/lisp/progmodes/flymake-resources/errors-and-warnings.c [new file with mode: 0644]
test/lisp/progmodes/flymake-tests.el

diff --git a/test/lisp/progmodes/flymake-resources/errors-and-warnings.c b/test/lisp/progmodes/flymake-resources/errors-and-warnings.c
new file mode 100644 (file)
index 0000000..6454dd2
--- /dev/null
@@ -0,0 +1,10 @@
+ int main()
+{
+  char c = 1000;
+  int bla;
+  /* The following line should have one warning and one error. The
+     warning spans the full line because gcc (at least 6.3.0) points
+     places the error at the =, which isn't a sexp.*/
+  char c; if (bla == (void*)3);
+  return c;
+}
index c626aec04bd8061530d070794704e4aac277e94a..5e76f3136ea04d0db66d1cea8df228aef966c47f 100644 (file)
@@ -49,23 +49,24 @@ SEVERITY-PREDICATE is used to setup
          (i 0))
     (unwind-protect
         (with-current-buffer buffer
-          (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
-          ;; ... meaning `sleep-for', and even
-          ;; `accept-process-output', won't suffice as ways to get
-          ;; process filters and sentinels to run, though they do work
-          ;; fine in a non-interactive batch session. The only thing
-          ;; that will indeed unblock pending process output is
-          ;; reading an input event, so, as a workaround, use a dummy
-          ;; `read-event' with a very short timeout.
-          (unless noninteractive (read-event "" nil 0.1))
-          (while (and flymake-is-running (< (setq i (1+ i)) 10))
+          (save-excursion
+            (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
+            ;; ... meaning `sleep-for', and even
+            ;; `accept-process-output', won't suffice as ways to get
+            ;; process filters and sentinels to run, though they do work
+            ;; fine in a non-interactive batch session. The only thing
+            ;; that will indeed unblock pending process output is
+            ;; reading an input event, so, as a workaround, use a dummy
+            ;; `read-event' with a very short timeout.
             (unless noninteractive (read-event "" nil 0.1))
-            (sleep-for (+ 0.5 flymake-no-changes-timeout)))
-          (funcall fn))
+            (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)))
+            (funcall fn)))
       (and buffer
            (not visiting)
            (let (kill-buffer-query-functions) (kill-buffer buffer))))))
@@ -114,6 +115,21 @@ SEVERITY-PREDICATE is used to setup
     (should (eq 'flymake-warning
                 (face-at-point)))))
 
+(ert-deftest errors-and-warnings ()
+  "Test GCC warning via function predicate."
+  (skip-unless (and (executable-find "gcc") (executable-find "make")))
+  (flymake-tests--with-flymake
+      ("errors-and-warnings.c")
+    (flymake-goto-next-error)
+    (should (eq 'flymake-error (face-at-point)))
+    (flymake-goto-next-error)
+    (should (eq 'flymake-warning (face-at-point)))
+    (flymake-goto-next-error)
+    (should (eq 'flymake-warning (face-at-point)))
+    (flymake-goto-next-error)
+    (should (eq 'flymake-error (face-at-point)))
+    (should-error (flymake-goto-next-error nil t)) ))
+
 (provide 'flymake-tests)
 
 ;;; flymake.el ends here