]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't error in Proced tests if %CPU is a NaN
authorLaurence Warne <laurencewarne@gmail.com>
Fri, 15 Nov 2024 15:22:52 +0000 (16:22 +0100)
committerEshel Yaron <me@eshelyaron.com>
Wed, 27 Nov 2024 19:48:18 +0000 (20:48 +0100)
* test/lisp/proced-tests.el (proced--cpu-at-point): New function.
(proced--assert-process-valid-cpu-refinement)
(proced-refine-test, proced-refine-with-update-test): If %CPU for any
process visited is a NaN skip the test.
(proced-update-preserves-pid-at-point-test): Fix typo in comment.
(proced--assert-process-valid-cpu-refinement-explainer): Add process
attributes to the explainer along with tweaking how the process %CPU is
obtained to account for circumstances where it's not numeric (most
notably '-nan').

(cherry picked from commit 926d47ab2ca72054f1a5c774916927160a839dc1)

test/lisp/proced-tests.el

index 5c9dfaca109b8f78f9dfadf8c5aa2846327574a0..cf3ce352ca12b3c9c48081d3896e088a138a4379 100644 (file)
          (message "%s" (buffer-string)))
        (kill-buffer "*Proced*"))))
 
+(defun proced--cpu-at-point ()
+  "Return as an integer the current CPU value at point."
+  (if (string-suffix-p "nan" (thing-at-point 'sexp))
+      (let ((pid (proced-pid-at-point)))
+        (ert-skip
+         (format
+          "Found NaN value for %%CPU at point for process with PID %d" pid)))
+    (thing-at-point 'number)))
+
 (defun proced--assert-emacs-pid-in-buffer ()
   "Fail unless the process ID of the current Emacs process exists in buffer."
   (should (string-match-p
@@ -53,7 +62,7 @@
   "Fail unless the process at point could be present after a refinement using CPU."
   (proced--move-to-column "%CPU")
   (condition-case err
-      (>= (thing-at-point 'number) cpu)
+      (>= (proced--cpu-at-point) cpu)
     (error
      (ert-fail
       (list err (proced--assert-process-valid-cpu-refinement-explainer cpu))))))
@@ -66,11 +75,14 @@ CPU is as in `proced--assert-process-valid-cpu-refinement'."
     (header-line
      ,(substring-no-properties
        (string-replace "%%" "%" (cadr (proced-header-line)))))
-    (process ,(thing-at-point 'line t))
+    (buffer-process-line ,(thing-at-point 'line t))
+    (process-attributes ,(format "%s" (process-attributes (proced-pid-at-point))))
     (refined-value ,cpu)
     (process-value
      ,(save-excursion
-        (proced--move-to-column "%CPU") (thing-at-point 'number)))))
+        (proced--move-to-column "%CPU")
+        (or (thing-at-point 'number)
+            (substring-no-properties (thing-at-point 'sexp)))))))
 
 (put #'proced--assert-process-valid-cpu-refinement 'ert-explainer
      #'proced--assert-process-valid-cpu-refinement-explainer)
@@ -110,7 +122,7 @@ CPU is as in `proced--assert-process-valid-cpu-refinement'."
    ;; When refining on %CPU for process A, a process is kept if and only
    ;; if its %CPU is greater than or equal to that of process A.
    (proced--move-to-column "%CPU")
-   (let ((cpu (thing-at-point 'number)))
+   (let ((cpu (proced--cpu-at-point)))
      (proced-refine)
      (while (not (eobp))
        (should (proced--assert-process-valid-cpu-refinement cpu))
@@ -121,7 +133,7 @@ CPU is as in `proced--assert-process-valid-cpu-refinement'."
    'verbose
    'user
    (proced--move-to-column "%CPU")
-   (let ((cpu (thing-at-point 'number)))
+   (let ((cpu (proced--cpu-at-point)))
      (proced-refine)
      ;; Don't use (proced-update t) since this will reset `proced-process-alist'
      ;; and it's possible the process refined on would have exited by that
@@ -134,7 +146,7 @@ CPU is as in `proced--assert-process-valid-cpu-refinement'."
 
 (ert-deftest proced-update-preserves-pid-at-point-test ()
   ;; FIXME: Occasionally the cursor inexplicably changes to the first line which
-  ;; causes the test to file when the line isn't the Emacs process.
+  ;; causes the test to fail when the line isn't the Emacs process.
   :tags '(:unstable)
   (proced--within-buffer
    'medium