emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/flymake-refactor 593d4303 16/18: Add a new flymake


From: João Távora
Subject: [Emacs-diffs] scratch/flymake-refactor 593d4303 16/18: Add a new flymake test for multiple errors and warnings
Date: Thu, 21 Sep 2017 20:35:26 -0400 (EDT)

branch: scratch/flymake-refactor
commit 593d4303304e6de3a92948d80d55e52d5e6a2ad9
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Add a new flymake test for multiple errors and warnings
    
    * 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.
---
 .../flymake-resources/errors-and-warnings.c        | 10 +++++
 test/lisp/progmodes/flymake-tests.el               | 48 ++++++++++++++--------
 2 files changed, 42 insertions(+), 16 deletions(-)

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
index 0000000..6454dd2
--- /dev/null
+++ b/test/lisp/progmodes/flymake-resources/errors-and-warnings.c
@@ -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;
+}
diff --git a/test/lisp/progmodes/flymake-tests.el 
b/test/lisp/progmodes/flymake-tests.el
index cbef584..7057288 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]