(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
"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))))))
(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)
;; 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))
'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
(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