From: F. Jason Park Date: Fri, 25 Nov 2022 05:03:03 +0000 (-0800) Subject: Make auth-source erc-services tests more readable X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c104e90888a03b4879cd91bf5d130288ac880d66;p=emacs.git Make auth-source erc-services tests more readable * 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. --- diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el index 8b23904cb99..6c015c71ff9 100644 --- a/lisp/erc/erc-common.el +++ b/lisp/erc/erc-common.el @@ -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. diff --git a/test/lisp/erc/erc-services-tests.el b/test/lisp/erc/erc-services-tests.el index 9181a47ee3b..6cbba02a37e 100644 --- a/test/lisp/erc/erc-services-tests.el +++ b/test/lisp/erc/erc-services-tests.el @@ -212,39 +212,32 @@ (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 @@ -254,14 +247,7 @@ (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 @@ -271,29 +257,33 @@ (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)) @@ -303,17 +293,24 @@ ;; 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)))) @@ -321,10 +318,7 @@ (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)))) @@ -332,16 +326,36 @@ (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)))) @@ -370,6 +384,14 @@ ("#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")) @@ -378,18 +400,12 @@ (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)))) @@ -401,18 +417,12 @@ (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)))) @@ -444,17 +454,12 @@ ("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)))) diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el index b155f85ab8a..43a5b54dcc7 100644 --- a/test/lisp/erc/erc-tests.el +++ b/test/lisp/erc/erc-tests.el @@ -113,6 +113,22 @@ (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.