]> git.eshelyaron.com Git - emacs.git/commitdiff
Make auth-source erc-services tests more readable
authorF. Jason Park <jp@neverwas.me>
Fri, 25 Nov 2022 05:03:03 +0000 (21:03 -0800)
committerF. Jason Park <jp@neverwas.me>
Sat, 8 Apr 2023 21:23:51 +0000 (14:23 -0700)
* lisp/erc/erc-common.el: (erc-with-server-buffer): Modify slightly to
use `buffer-local-value' when possible.
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--auth-source-plstore-standard-entries,
erc-services-tests--auth-source-plstore-standard-secrets): Remove
unused variables.
(erc-services-tests--auth-source-plstore-standard-announced): Add new
var to hold common plstore document.
(erc--auth-source-search--plstore-standard,
erc--auth-source-search--plstore-announced,
erc--auth-source-search--plstore-overrides): Use string literals for
text-document content.
(erc-services-tests--auth-source-json-standard-entries): Remove unused
variable.
(erc-services-tests--auth-source-json-standard-announced): Add new
variable.
(erc--auth-source-search--json-standard,
erc--auth-source-search--json-announced,
erc--auth-source-search--json-overrides): Use string literals for
text-document content.
(erc-services-tests--secrets-search-items): Add new helper function.
(erc--auth-source-search--secrets-standard,
erc--auth-source-search--secrets-announced,
erc--auth-source-search--secrets-overrides): Use helper to mock
`secrets-search-items' instead of misleading lambda.
* lisp/erc/erc-tests.el (erc-with-server-buffer): Add test.

lisp/erc/erc-common.el
test/lisp/erc/erc-services-tests.el
test/lisp/erc/erc-tests.el

index 8b23904cb99c67311fe757694049d3143fbfe213..6c015c71ff9e3ec3f183f52ce00bed8973961874 100644 (file)
@@ -367,11 +367,16 @@ See also `with-current-buffer'.
   "Execute BODY in the current ERC server buffer.
 If no server buffer exists, return nil."
   (declare (indent 0) (debug (body)))
-  (let ((buffer (make-symbol "buffer")))
+  (let ((varp (and (symbolp (car body))
+                   (not (cdr body))
+                   (special-variable-p (car body))))
+        (buffer (make-symbol "buffer")))
     `(let ((,buffer (erc-server-buffer)))
        (when (buffer-live-p ,buffer)
-         (with-current-buffer ,buffer
-           ,@body)))))
+         ,(if varp
+              `(buffer-local-value ',(car body) ,buffer)
+            `(with-current-buffer ,buffer
+               ,@body))))))
 
 (defmacro erc-with-all-buffers-of-server (process pred &rest forms)
   "Execute FORMS in all buffers which have same process as this server.
index 9181a47ee3bf470f1b316e455ebcabc3b4cd4611..6cbba02a37eec8eb3404c46b71210c6c17892796 100644 (file)
     (advice-remove 'epg-decrypt-string 'erc--auth-source-plstore)
     (advice-remove 'epg-find-configuration 'erc--auth-source-plstore)))
 
-(defvar erc-services-tests--auth-source-plstore-standard-entries
-  '(("ba950d38118a76d71f9f0591bb373d6cb366a512"
-     :secret-secret t
-     :host "irc.gnu.org"
-     :user "#chan"
-     :port "irc")
-    ("7f17ca445d11158065e911a6d0f4cbf52ca250e3"
-     :secret-secret t
-     :host "my.gnu.org"
-     :user "#chan"
-     :port "irc")
-    ("fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377"
-     :secret-secret t
-     :host "GNU.chat"
-     :user "#chan"
-     :port "irc")))
-
-(defvar erc-services-tests--auth-source-plstore-standard-secrets
-  '(("ba950d38118a76d71f9f0591bb373d6cb366a512" :secret "bar")
   ("7f17ca445d11158065e911a6d0f4cbf52ca250e3" :secret "baz")
   ("fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377" :secret "foo")))
+(defvar erc-services-tests--auth-source-plstore-standard-announced "\
+;;; public entries -*- mode: plstore -*-
+((\"ba950d38118a76d71f9f0591bb373d6cb366a512\"
+  :secret-secret t
+  :host \"irc.gnu.org\"
+  :user \"#chan\"
+  :port \"irc\")
+ (\"7f17ca445d11158065e911a6d0f4cbf52ca250e3\"
+  :secret-secret t
+  :host \"my.gnu.org\"
+  :user \"#chan\"
+  :port \"irc\")
+ (\"fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377\"
+  :secret-secret t
+  :host \"GNU.chat\"
+  :user \"#chan\"
+  :port \"irc\"))
+;;; secret entries
+((\"ba950d38118a76d71f9f0591bb373d6cb366a512\" :secret \"bar\")
(\"7f17ca445d11158065e911a6d0f4cbf52ca250e3\" :secret \"baz\")
(\"fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377\" :secret \"foo\"))")
 
 (ert-deftest erc--auth-source-search--plstore-standard ()
   (ert-with-temp-file plstore-file
     :suffix ".plist"
-    :text (concat ";;; public entries -*- mode: plstore -*- \n"
-                  (prin1-to-string
-                   erc-services-tests--auth-source-plstore-standard-entries)
-                  "\n;;; secret entries\n"
-                  (prin1-to-string
-                   erc-services-tests--auth-source-plstore-standard-secrets)
-                  "\n")
-
+    :text erc-services-tests--auth-source-plstore-standard-announced
     (let ((auth-sources (list plstore-file))
           (auth-source-do-cache nil))
       (erc-services-tests--auth-source-standard
 (ert-deftest erc--auth-source-search--plstore-announced ()
   (ert-with-temp-file plstore-file
     :suffix ".plist"
-    :text (concat ";;; public entries -*- mode: plstore -*- \n"
-                  (prin1-to-string
-                   erc-services-tests--auth-source-plstore-standard-entries)
-                  "\n;;; secret entries\n"
-                  (prin1-to-string
-                   erc-services-tests--auth-source-plstore-standard-secrets)
-                  "\n")
-
+    :text erc-services-tests--auth-source-plstore-standard-announced
     (let ((auth-sources (list plstore-file))
           (auth-source-do-cache nil))
       (erc-services-tests--auth-source-announced
 (ert-deftest erc--auth-source-search--plstore-overrides ()
   (ert-with-temp-file plstore-file
     :suffix ".plist"
-    :text (concat
-           ";;; public entries -*- mode: plstore -*- \n"
-           (prin1-to-string
-            `(,@erc-services-tests--auth-source-plstore-standard-entries
-              ("1b3fab249a8dff77a4d8fe7eb4b0171b25cc711a"
-               :secret-secret t :host "GNU.chat" :user "#chan" :port "6697")
-              ("6cbcdc39476b8cfcca6f3e9a7876f41ec3f708cc"
-               :secret-secret t :host "my.gnu.org" :user "#fsf" :port "irc")
-              ("a33e2b3bd2d6f33995a4b88710a594a100c5e41d"
-               :secret-secret t :host "irc.gnu.org" :port "6667")
-              ("ab2fd349b2b7d6a9215bb35a92d054261b0b1537"
-               :secret-secret t :host "MyHost" :port "irc")
-              ("61a6bd552059494f479ff720e8de33e22574650a"
-               :secret-secret t :host "MyHost" :port "6667")))
-           "\n;;; secret entries\n"
-           (prin1-to-string
-            `(,@erc-services-tests--auth-source-plstore-standard-secrets
-              ("1b3fab249a8dff77a4d8fe7eb4b0171b25cc711a" :secret "spam")
-              ("6cbcdc39476b8cfcca6f3e9a7876f41ec3f708cc" :secret "42")
-              ("a33e2b3bd2d6f33995a4b88710a594a100c5e41d" :secret "sesame")
-              ("ab2fd349b2b7d6a9215bb35a92d054261b0b1537" :secret "456")
-              ("61a6bd552059494f479ff720e8de33e22574650a" :secret "123")))
-           "\n")
+    :text "\
+;;; public entries -*- mode: plstore -*-
+((\"ba950d38118a76d71f9f0591bb373d6cb366a512\"
+  :secret-secret t :host \"irc.gnu.org\" :user \"#chan\" :port \"irc\")
+ (\"7f17ca445d11158065e911a6d0f4cbf52ca250e3\"
+  :secret-secret t :host \"my.gnu.org\" :user \"#chan\" :port \"irc\")
+ (\"fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377\"
+  :secret-secret t :host \"GNU.chat\" :user \"#chan\" :port \"irc\")
+ (\"1b3fab249a8dff77a4d8fe7eb4b0171b25cc711a\"
+  :secret-secret t :host \"GNU.chat\" :user \"#chan\" :port \"6697\")
+ (\"6cbcdc39476b8cfcca6f3e9a7876f41ec3f708cc\"
+  :secret-secret t :host \"my.gnu.org\" :user \"#fsf\" :port \"irc\")
+ (\"a33e2b3bd2d6f33995a4b88710a594a100c5e41d\"
+  :secret-secret t :host \"irc.gnu.org\" :port \"6667\")
+ (\"ab2fd349b2b7d6a9215bb35a92d054261b0b1537\"
+  :secret-secret t :host \"MyHost\" :port \"irc\")
+ (\"61a6bd552059494f479ff720e8de33e22574650a\"
+  :secret-secret t :host \"MyHost\" :port \"6667\"))
+;;; secret entries
+((\"ba950d38118a76d71f9f0591bb373d6cb366a512\" :secret \"bar\")
+ (\"7f17ca445d11158065e911a6d0f4cbf52ca250e3\" :secret \"baz\")
+ (\"fcd3c8bd6daf4509de0ad6ee98e744ce0fca9377\" :secret \"foo\")
+ (\"1b3fab249a8dff77a4d8fe7eb4b0171b25cc711a\" :secret \"spam\")
+ (\"6cbcdc39476b8cfcca6f3e9a7876f41ec3f708cc\" :secret \"42\")
+ (\"a33e2b3bd2d6f33995a4b88710a594a100c5e41d\" :secret \"sesame\")
+ (\"ab2fd349b2b7d6a9215bb35a92d054261b0b1537\" :secret \"456\")
+ (\"61a6bd552059494f479ff720e8de33e22574650a\" :secret \"123\"))"
 
     (let ((auth-sources (list plstore-file))
           (auth-source-do-cache nil))
 
 ;; auth-source JSON backend
 
-(defvar erc-services-tests--auth-source-json-standard-entries
-  [(:host "irc.gnu.org" :port "irc" :user "#chan" :secret "bar")
-   (:host "my.gnu.org" :port "irc" :user "#chan" :secret "baz")
-   (:host "GNU.chat" :port "irc" :user "#chan" :secret "foo")])
+(defvar erc-services-tests--auth-source-json-standard-announced "\
+[{\"host\": \"irc.gnu.org\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"bar\"},
+ {\"host\": \"my.gnu.org\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"baz\"},
+ {\"host\": \"GNU.chat\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"foo\"}]")
 
 (ert-deftest erc--auth-source-search--json-standard ()
   (ert-with-temp-file json-store
+    :text erc-services-tests--auth-source-json-standard-announced
     :suffix ".json"
-    :text (let ((json-object-type 'plist))
-            (json-encode
-             erc-services-tests--auth-source-json-standard-entries))
     (let ((auth-sources (list json-store))
           (auth-source-do-cache nil))
       (erc-services-tests--auth-source-standard #'erc-auth-source-search))))
 (ert-deftest erc--auth-source-search--json-announced ()
   (ert-with-temp-file plstore-file
     :suffix ".json"
-    :text (let ((json-object-type 'plist))
-            (json-encode
-             erc-services-tests--auth-source-json-standard-entries))
-
+    :text erc-services-tests--auth-source-json-standard-announced
     (let ((auth-sources (list plstore-file))
           (auth-source-do-cache nil))
       (erc-services-tests--auth-source-announced #'erc-auth-source-search))))
 (ert-deftest erc--auth-source-search--json-overrides ()
   (ert-with-temp-file json-file
     :suffix ".json"
-    :text (let ((json-object-type 'plist))
-            (json-encode
-             (vconcat
-              erc-services-tests--auth-source-json-standard-entries
-              [(:secret "spam" :host "GNU.chat" :user "#chan" :port "6697")
-               (:secret "42" :host "my.gnu.org" :user "#fsf" :port "irc")
-               (:secret "sesame" :host "irc.gnu.org" :port "6667")
-               (:secret "456" :host "MyHost" :port "irc")
-               (:secret "123" :host "MyHost" :port "6667")])))
-
+    :text "\
+[{\"host\": \"irc.gnu.org\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"bar\"},
+ {\"host\": \"my.gnu.org\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"baz\"},
+ {\"host\": \"GNU.chat\",
+  \"port\": \"irc\",
+  \"user\": \"#chan\",
+  \"secret\": \"foo\"},
+ {\"host\": \"GNU.chat\",
+  \"user\": \"#chan\",
+  \"port\": \"6697\",
+  \"secret\": \"spam\"},
+ {\"host\": \"my.gnu.org\",
+  \"user\": \"#fsf\",
+  \"port\": \"irc\",
+  \"secret\": \"42\"},
+ {\"host\": \"irc.gnu.org\",
+  \"port\": \"6667\",
+  \"secret\": \"sesame\"},
+ {\"host\": \"MyHost\",
+  \"port\": \"irc\",
+  \"secret\": \"456\"},
+ {\"host\": \"MyHost\",
+  \"port\": \"6667\",
+  \"secret\": \"123\"}]"
     (let ((auth-sources (list json-file))
           (auth-source-do-cache nil))
       (erc-services-tests--auth-source-overrides #'erc-auth-source-search))))
     ("#chan@my.gnu.org:irc" . "baz")
     ("#chan@GNU.chat:irc" . "foo")))
 
+(defun erc-services-tests--secrets-search-items (entries _ &rest r)
+  (mapcan (lambda (s)
+            (and (seq-every-p (pcase-lambda (`(,k . ,v))
+                                (equal v (alist-get k (cdr s))))
+                              (map-pairs r))
+                 (list (car s))))
+          entries))
+
 (ert-deftest erc--auth-source-search--secrets-standard ()
   (skip-unless (bound-and-true-p secrets-enabled))
   (let ((auth-sources '("secrets:Test"))
         (secrets erc-services-tests--auth-source-secrets-standard-secrets))
 
     (cl-letf (((symbol-function 'secrets-search-items)
-               (lambda (col &rest r)
-                 (should (equal col "Test"))
-                 (should (plist-get r :user))
-                 (map-keys entries)))
+               (apply-partially #'erc-services-tests--secrets-search-items
+                                entries))
               ((symbol-function 'secrets-get-secret)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label secrets)))
+               (lambda (_ label) (assoc-default label secrets)))
               ((symbol-function 'secrets-get-attributes)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label entries))))
+               (lambda (_ label) (assoc-default label entries))))
 
       (erc-services-tests--auth-source-standard #'erc-auth-source-search))))
 
         (secrets erc-services-tests--auth-source-secrets-standard-secrets))
 
     (cl-letf (((symbol-function 'secrets-search-items)
-               (lambda (col &rest r)
-                 (should (equal col "Test"))
-                 (should (plist-get r :user))
-                 (map-keys entries)))
+               (apply-partially #'erc-services-tests--secrets-search-items
+                                entries))
               ((symbol-function 'secrets-get-secret)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label secrets)))
+               (lambda (_ label) (assoc-default label secrets)))
               ((symbol-function 'secrets-get-attributes)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label entries))))
+               (lambda (_ label) (assoc-default label entries))))
 
       (erc-services-tests--auth-source-announced #'erc-auth-source-search))))
 
                    ("MyHost:6667" . "123"))))
 
     (cl-letf (((symbol-function 'secrets-search-items)
-               (lambda (col &rest _)
-                 (should (equal col "Test"))
-                 (map-keys entries)))
+               (apply-partially #'erc-services-tests--secrets-search-items
+                                entries))
               ((symbol-function 'secrets-get-secret)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label secrets)))
+               (lambda (_ label) (assoc-default label secrets)))
               ((symbol-function 'secrets-get-attributes)
-               (lambda (col label)
-                 (should (equal col "Test"))
-                 (assoc-default label entries))))
+               (lambda (_ label) (assoc-default label entries))))
 
       (erc-services-tests--auth-source-overrides #'erc-auth-source-search))))
 
index b155f85ab8a1f6a598c1560b1fbb8376a4e12323..43a5b54dcc7155c82e1e663ae050cdbf3834e688 100644 (file)
     (should (get-buffer "#spam"))
     (kill-buffer "#spam")))
 
+(ert-deftest erc-with-server-buffer ()
+  (setq erc-away 1)
+  (erc-tests--set-fake-server-process "sleep" "1")
+
+  (let (calls)
+    (advice-add 'buffer-local-value :after (lambda (&rest r) (push r calls))
+                '((name . erc-with-server-buffer)))
+
+    (should (= 1 (erc-with-server-buffer erc-away)))
+    (should (equal (pop calls) (list 'erc-away (current-buffer))))
+
+    (should (= 1 (erc-with-server-buffer (ignore 'me) erc-away)))
+    (should-not calls)
+
+    (advice-remove 'buffer-local-value 'erc-with-server-buffer)))
+
 (defun erc-tests--send-prep ()
   ;; Caller should probably shadow `erc-insert-modify-hook' or
   ;; populate user tables for erc-button.