emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/evil-goggles d4b0ea224d 169/225: Add tests covering the de


From: ELPA Syncer
Subject: [nongnu] elpa/evil-goggles d4b0ea224d 169/225: Add tests covering the decision whether to pulse or not
Date: Wed, 12 Jan 2022 08:59:05 -0500 (EST)

branch: elpa/evil-goggles
commit d4b0ea224d637cd3ec24e3f8f24f447a3a5da62e
Author: Evgeni Kolev <evgenysw@gmail.com>
Commit: Evgeni Kolev <evgenysw@gmail.com>

    Add tests covering the decision whether to pulse or not
---
 evil-goggles.el           | 29 ++++++++++++++++++++-----
 test/evil-goggles-test.el | 54 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/evil-goggles.el b/evil-goggles.el
index 5688ff797a..e80e6f695b 100644
--- a/evil-goggles.el
+++ b/evil-goggles.el
@@ -180,22 +180,41 @@ non-nil, else for `evil-goggles-duration' seconds."
   "Show or pulse overlay OV with face FACE.
 
 DUR is used only when pulsing.
-The overlay is pulsed if variable `evil-goggles-pulse' is t."
+The overlay is pulsed if variable `evil-goggles-pulse' is t and the
+FACE is appropriate for pulsing, i.e. it has a background."
+  (pcase (evil-goggles--should-blink-or-pulse face)
+    (`(blink ,blink-face)
+     (overlay-put ov 'face blink-face))
+    (`(pulse ,pulse-bg)
+     (evil-goggles--pulse-overlay ov pulse-bg dur))))
+
+(defun evil-goggles--should-blink-or-pulse (face)
+  "Determine wheter to pulse or blink.
+
+The decision is made based on the value of `evil-goggles-pulse'.
+
+If the FACE has no background, pulsing is not supported, hence the
+decision is to blink.  If the face has no foreground and/or background,
+this function tries to make the most appropriate decision whether to
+pulse or not, and whether to use the given FACE or use the fallback
+face `evil-goggles-default-face'.
+
+This function returns a list - either ('blink face) or ('pulse bg)."
   (let ((fg (face-foreground face nil t))
         (bg (face-background face nil t)))
     (cond
      ;; pulse enabled and the face has a bg - pulse with the given face's bg
      ((and evil-goggles-pulse bg)
-      (evil-goggles--pulse-overlay ov bg dur))
+      `(pulse ,bg))
      ;; pulse enabled and the face has no bg or fg - pulse with the default 
face's bg
      ((and evil-goggles-pulse (null bg) (null fg))
-      (evil-goggles--pulse-overlay ov (face-background 
'evil-goggles-default-face nil t) dur))
+      `(pulse ,(face-background 'evil-goggles-default-face nil t)))
      ;; pulse disabled or face has fg only - show the hint with given face
      ((and (null bg) (null fg))
-      (overlay-put ov 'face 'evil-goggles-default-face))
+      `(blink evil-goggles-default-face))
      ;; else show the hint with the given face
      (t
-      (overlay-put ov 'face face)))))
+      `(blink ,face)))))
 
 (defmacro evil-goggles--if-hint-on (beg end body1 &rest body2)
   "Run one block of code if hint is visible, run the other if not.
diff --git a/test/evil-goggles-test.el b/test/evil-goggles-test.el
index c951da261a..efd65a1597 100644
--- a/test/evil-goggles-test.el
+++ b/test/evil-goggles-test.el
@@ -6,6 +6,8 @@
 
 (evil-goggles-mode)
 
+(defface evil-goggles--test-face '((t (:inherit region))) "Evil-goggles test 
face.")
+
 (ert-deftest evil-goggles-test ()
   :tags '(evil-goggles)
   (ert-info ("delete interactive")
@@ -27,3 +29,55 @@
    "line 1\nAB[C]"
    ("gg\".P")
    "AB[C]line 1\nABC"))
+
+(ert-deftest evil-goggles-test-show-or-pulse ()
+  "Test evil-goggles--should-blink-or-pulse - whether to pulse or blink "
+  (let ((evil-goggles-pulse t))
+    ;; enabled pusling, use fg-only - hints shouldn't pulse, hints should be 
fg only (because pulsing requires a bg)
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:foreground "red")))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               '(blink evil-goggles--test-face))))
+
+    ;; enabled pusling, use bg-only - hints should pulse with the bg color
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:background "red")))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               '(pulse "red"))))
+
+    ;; enabled pulsing, use an invalid face (no fg, no bg) - hints should 
pulse with default face's bg
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:underline nil)))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               `(pulse ,(face-background 'evil-goggles-default-face nil t))))))
+
+  (let ((evil-goggles-pulse nil))
+    ;; disabled pusling, use bg-only - hints shouldn't pulse, only bg
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:background "red")))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               '(blink evil-goggles--test-face))))
+
+    ;; disabled pusling, use fg-only - hints shouldn't pulse, only fg
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:foreground "red")))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               '(blink evil-goggles--test-face))))
+
+    ;; disalbed pulsing, use an invalid face (no fg, no bg) - hints should 
blink with default face
+    (progn
+      (custom-set-faces
+       '(evil-goggles--test-face ((t (:underline nil)))))
+      (should (equal
+               (evil-goggles--should-blink-or-pulse 'evil-goggles--test-face)
+               '(blink evil-goggles-default-face))))))



reply via email to

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