summaryrefslogtreecommitdiff
path: root/test/lisp/erc
diff options
context:
space:
mode:
authorF. Jason Park <jp@neverwas.me>2023-01-13 06:03:15 -0800
committerF. Jason Park <jp@neverwas.me>2023-01-17 06:09:08 -0800
commit183e749270208ad7f63114ea8ab05e7612a645a1 (patch)
tree7f8ae12fe3e2b61ca01b77948255843f2a6e1f7f /test/lisp/erc
parent7b8322f6285702faf5da0824b9b195619da9c698 (diff)
downloademacs-183e749270208ad7f63114ea8ab05e7612a645a1.tar.gz
emacs-183e749270208ad7f63114ea8ab05e7612a645a1.tar.bz2
emacs-183e749270208ad7f63114ea8ab05e7612a645a1.zip
Don't preserve non-module minor modes in erc-open
* lisp/erc/erc-common.el (define-erc-module): Add symbol property `erc-module' to minor modes defined as part of a module. * lisp/erc/erc.el (erc--merge-local-modes): Be more conservative when persisting local minor-mode state across ERC sessions. User and third-party modes that were not defined via `define-erc-modules' should be left alone. (erc-open): Run major-mode hooks and enable minor modes after prompt has been set up. This ensures that module-setup code can access a fully initialized `erc-input-marker'. * test/lisp/erc/erc-tests.el (erc--merge-local-modes): Add mocks for `erc-module' symbol property and a test case covering some foreign ERC mode. (define-erc-module--global, define-erc-module--local): Expect the `erc-module' symbol property to be defined for mode symbols and aliases. (Bug#60784.)
Diffstat (limited to 'test/lisp/erc')
-rw-r--r--test/lisp/erc/erc-tests.el41
1 files changed, 26 insertions, 15 deletions
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index 85506c3d27e..40a2d2de657 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -1251,18 +1251,28 @@
(setq calls nil)))))
(ert-deftest erc--merge-local-modes ()
-
- (ert-info ("No existing modes")
- (let ((old '((a) (b . t)))
- (new '(erc-c-mode erc-d-mode)))
- (should (equal (erc--merge-local-modes new old)
- '((erc-c-mode erc-d-mode))))))
-
- (ert-info ("Active existing added, inactive existing removed, deduped")
- (let ((old '((a) (erc-b-mode) (c . t) (erc-d-mode . t) (erc-e-mode . t)))
- (new '(erc-b-mode erc-d-mode)))
- (should (equal (erc--merge-local-modes new old)
- '((erc-d-mode erc-e-mode) . (erc-b-mode)))))))
+ (cl-letf (((get 'erc-b-mode 'erc-module) 'b)
+ ((get 'erc-c-mode 'erc-module) 'c)
+ ((get 'erc-d-mode 'erc-module) 'd)
+ ((get 'erc-e-mode 'erc-module) 'e))
+
+ (ert-info ("No existing modes")
+ (let ((old '((a) (b . t)))
+ (new '(erc-c-mode erc-d-mode)))
+ (should (equal (erc--merge-local-modes new old)
+ '((erc-c-mode erc-d-mode))))))
+
+ (ert-info ("Active existing added, inactive existing removed, deduped")
+ (let ((old '((a) (erc-b-mode) (c . t) (erc-d-mode . t) (erc-e-mode . t)))
+ (new '(erc-b-mode erc-d-mode)))
+ (should (equal (erc--merge-local-modes new old)
+ '((erc-d-mode erc-e-mode) . (erc-b-mode))))))
+
+ (ert-info ("Non-module erc-prefixed mode ignored")
+ (let ((old '((erc-b-mode) (erc-f-mode . t) (erc-d-mode . t)))
+ (new '(erc-b-mode)))
+ (should (equal (erc--merge-local-modes new old)
+ '((erc-d-mode) . (erc-b-mode))))))))
(ert-deftest define-erc-module--global ()
(let ((global-module '(define-erc-module mname malias
@@ -1300,13 +1310,15 @@ Some docstring"
(ignore c) (ignore d))
(defalias 'erc-malias-mode #'erc-mname-mode)
+ (put 'erc-malias-mode 'erc-module 'mname)
+ (put 'erc-mname-mode 'erc-module 'mname)
(put 'erc-mname-mode 'definition-name 'mname)
(put 'erc-mname-enable 'definition-name 'mname)
(put 'erc-mname-disable 'definition-name 'mname))))))
(ert-deftest define-erc-module--local ()
- (let* ((global-module '(define-erc-module mname malias
+ (let* ((global-module '(define-erc-module mname nil ; no alias
"Some docstring"
((ignore a) (ignore b))
((ignore c) (ignore d))
@@ -1353,8 +1365,7 @@ When called interactively, do so in all buffers for the current connection."
(setq erc-mname-mode nil)
(ignore c) (ignore d))))
- (defalias 'erc-malias-mode #'erc-mname-mode)
-
+ (put 'erc-mname-mode 'erc-module 'mname)
(put 'erc-mname-mode 'definition-name 'mname)
(put 'erc-mname-enable 'definition-name 'mname)
(put 'erc-mname-disable 'definition-name 'mname))))))