aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorF. Jason Park2021-07-09 20:03:51 -0700
committerF. Jason Park2023-04-08 14:23:51 -0700
commit22104de5daa12e82bb6a246f05f4cd2927eb37a3 (patch)
tree6741dfc2814abf9b9893011d94ea323a774c07af /test
parent9aa2806fdc3a440a9f108779f2f4a6972c203aff (diff)
downloademacs-22104de5daa12e82bb6a246f05f4cd2927eb37a3.tar.gz
emacs-22104de5daa12e82bb6a246f05f4cd2927eb37a3.zip
Add missing colors to erc-irccontrols-mode
* lisp/erc/erc-goodies.el (erc-spoiler-face): Add new face. (erc--controls-additional-colors): Add remaining 16-99 colors. (erc-get-bg-color-face, erc-get-fg-color-face): Look up extended colors in table. (erc-controls-remove-regexp, erc-controls-highlight-regexp): Convert to `rx' forms and move above first use to eliminate intra-file forward declarations. (erc-controls-propertize): Support spoilers. * test/lisp/erc/erc-goodies-tests.el: New file. (Bug#60954.)
Diffstat (limited to 'test')
-rw-r--r--test/lisp/erc/erc-goodies-tests.el253
1 files changed, 253 insertions, 0 deletions
diff --git a/test/lisp/erc/erc-goodies-tests.el b/test/lisp/erc/erc-goodies-tests.el
new file mode 100644
index 00000000000..46fcf82401b
--- /dev/null
+++ b/test/lisp/erc/erc-goodies-tests.el
@@ -0,0 +1,253 @@
1;;; erc-goodies-tests.el --- Tests for erc-goodies -*- lexical-binding:t -*-
2
3;; Copyright (C) 2023 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6;;
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published
9;; by the Free Software Foundation, either version 3 of the License,
10;; or (at your option) any later version.
11;;
12;; GNU Emacs is distributed in the hope that it will be useful, but
13;; WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15;; General Public License for more details.
16;;
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
19
20;;; Commentary:
21;;; Code:
22(require 'ert-x)
23(require 'erc-goodies)
24(declare-function erc--initialize-markers "erc" (old-point continued) t)
25
26(defun erc-goodies-tests--assert-face (beg end-str present &optional absent)
27 (setq beg (+ beg (point-min)))
28 (let ((end (+ beg (1- (length end-str)))))
29 (while (and beg (< beg end))
30 (let* ((val (get-text-property beg 'font-lock-face))
31 (ft (flatten-tree (ensure-list val))))
32 (dolist (p (ensure-list present))
33 (if (consp p)
34 (should (member p val))
35 (should (memq p ft))))
36 (dolist (a (ensure-list absent))
37 (if (consp a)
38 (should-not (member a val))
39 (should-not (memq a ft))))
40 (setq beg (text-property-not-all beg (point-max)
41 'font-lock-face val))))))
42
43;; These are from the "Examples" section of
44;; https://modern.ircdocs.horse/formatting.html
45
46(ert-deftest erc-controls-highlight--examples ()
47 ;; FIXME remove after adding
48 (unless (fboundp 'erc--initialize-markers)
49 (ert-skip "Missing required function"))
50 (should (eq t erc-interpret-controls-p))
51 (let ((erc-insert-modify-hook '(erc-controls-highlight))
52 erc-kill-channel-hook erc-kill-server-hook erc-kill-buffer-hook)
53 (with-current-buffer (get-buffer-create "#chan")
54 (erc-mode)
55 (setq-local erc-interpret-mirc-color t)
56 (erc--initialize-markers (point) nil)
57
58 (let* ((m "I love \C-c3IRC!\C-c It is the \C-c7best protocol ever!")
59 (msg (erc-format-privmessage "bob" m nil t)))
60 (erc-display-message nil nil (current-buffer) msg))
61 (forward-line -1)
62 (should (search-forward "<bob> " nil t))
63 (save-restriction
64 (narrow-to-region (point) (pos-eol))
65 (erc-goodies-tests--assert-face
66 0 "I love" 'erc-default-face 'fg:erc-color-face3)
67 (erc-goodies-tests--assert-face
68 7 " IRC!" 'fg:erc-color-face3)
69 (erc-goodies-tests--assert-face
70 11 " It is the " 'erc-default-face 'fg:erc-color-face7)
71 (erc-goodies-tests--assert-face
72 22 "best protocol ever!" 'fg:erc-color-face7))
73
74 (let* ((m "This is a \C-]\C-c13,9cool \C-cmessage")
75 (msg (erc-format-privmessage "alice" m nil t)))
76 (erc-display-message nil nil (current-buffer) msg))
77 (should (search-forward "<alice> " nil t))
78 (save-restriction
79 (narrow-to-region (point) (pos-eol))
80 (erc-goodies-tests--assert-face
81 0 "this is a " 'erc-default-face 'erc-italic-face)
82 (erc-goodies-tests--assert-face
83 10 "cool " '(erc-italic-face fg:erc-color-face13 bg:erc-color-face9))
84 (erc-goodies-tests--assert-face
85 15 "message" 'erc-italic-face
86 '(fg:erc-color-face13 bg:erc-color-face9)))
87
88 (let* ((m "IRC \C-bis \C-c4,12so \C-cgreat\C-o!")
89 (msg (erc-format-privmessage "bob" m nil t)))
90 (erc-display-message nil nil (current-buffer) msg))
91 (should (search-forward "<bob> " nil t))
92 (save-restriction
93 (narrow-to-region (point) (pos-eol))
94 (erc-goodies-tests--assert-face
95 0 "IRC " 'erc-default-face 'erc-bold-face)
96 (erc-goodies-tests--assert-face
97 4 "is " 'erc-bold-face '(fg:erc-color-face4 bg:erc-color-face12))
98 (erc-goodies-tests--assert-face
99 7 "so " '(erc-bold-face fg:erc-color-face4 bg:erc-color-face12))
100 (erc-goodies-tests--assert-face
101 10 "great" 'erc-bold-face '(fg:erc-color-face4 bg:erc-color-face12))
102 (erc-goodies-tests--assert-face
103 15 "!" 'erc-default-face 'erc-bold-face))
104
105 (let* ((m (concat "Rules: Don't spam 5\C-c13,8,6\C-c,7,8, "
106 "and especially not \C-b9\C-b\C-]!"))
107 (msg (erc-format-privmessage "alice" m nil t)))
108 (erc-display-message nil nil (current-buffer) msg))
109 (should (search-forward "<alice> " nil t))
110 (save-restriction
111 (narrow-to-region (point) (pos-eol))
112 (erc-goodies-tests--assert-face
113 0 "Rules: Don't spam 5" 'erc-default-face
114 '(fg:erc-color-face13 bg:erc-color-face8))
115 (erc-goodies-tests--assert-face
116 19 ",6" '(fg:erc-color-face13 bg:erc-color-face8))
117 (erc-goodies-tests--assert-face
118 21 ",7,8, and especially not " 'erc-default-face
119 '(fg:erc-color-face13 bg:erc-color-face8 erc-bold-face))
120 (erc-goodies-tests--assert-face
121 44 "9" 'erc-bold-face 'erc-italic-face)
122 (erc-goodies-tests--assert-face
123 45 "!" 'erc-italic-face 'erc-bold-face))
124
125 (when noninteractive
126 (kill-buffer)))))
127
128;; Like the test above, this is most intuitive when run interactively.
129;; Hovering over the redacted area should reveal its underlying text
130;; in a high-contrast face.
131
132(ert-deftest erc-controls-highlight--inverse ()
133 ;; FIXME remove after adding
134 (unless (fboundp 'erc--initialize-markers)
135 (ert-skip "Missing required function"))
136 (should (eq t erc-interpret-controls-p))
137 (let ((erc-insert-modify-hook '(erc-controls-highlight))
138 erc-kill-channel-hook erc-kill-server-hook erc-kill-buffer-hook)
139 (with-current-buffer (get-buffer-create "#chan")
140 (erc-mode)
141 (setq-local erc-interpret-mirc-color t)
142 (erc--initialize-markers (point) nil)
143
144 (let* ((m "Spoiler: \C-c0,0Hello\C-c1,1World!")
145 (msg (erc-format-privmessage "bob" m nil t)))
146 (erc-display-message nil nil (current-buffer) msg))
147 (forward-line -1)
148 (should (search-forward "<bob> " nil t))
149 (save-restriction
150 (narrow-to-region (point) (pos-eol))
151 (should (eq (get-text-property (+ 9 (point)) 'mouse-face)
152 'erc-inverse-face))
153 (should (eq (get-text-property (1- (pos-eol)) 'mouse-face)
154 'erc-inverse-face))
155 (erc-goodies-tests--assert-face
156 0 "Spoiler: " 'erc-default-face
157 '(fg:erc-color-face0 bg:erc-color-face0))
158 (erc-goodies-tests--assert-face
159 9 "Hello" '(erc-spoiler-face)
160 '( fg:erc-color-face0 bg:erc-color-face0
161 fg:erc-color-face1 bg:erc-color-face1))
162 (erc-goodies-tests--assert-face
163 18 " World" '(erc-spoiler-face)
164 '( fg:erc-color-face0 bg:erc-color-face0
165 fg:erc-color-face1 bg:erc-color-face1 )))
166 (when noninteractive
167 (kill-buffer)))))
168
169(defvar erc-goodies-tests--motd
170 ;; This is from ergo's MOTD
171 '((":- - this is \2bold text\17.")
172 (":- - this is \35italics text\17.")
173 (":- - this is \0034red\3 and \0032blue\3 text.")
174 (":- - this is \0034,12red text with a light blue background\3.")
175 (":- - this is a normal escaped dollarsign: $")
176 (":- ")
177 (":- "
178 "\0031,0 00 \0030,1 01 \0030,2 02 \0030,3 03 "
179 "\0031,4 04 \0030,5 05 \0030,6 06 \0031,7 07 ")
180 (":- "
181 "\0031,8 08 \0031,9 09 \0030,10 10 \0031,11 11 "
182 "\0030,12 12 \0031,13 13 \0031,14 14 \0031,15 15 ")
183 (":- ")
184 (":- "
185 "\0030,16 16 \0030,17 17 \0030,18 18 \0030,19 19 "
186 "\0030,20 20 \0030,21 21 \0030,22 22 \0030,23 23 "
187 "\0030,24 24 \0030,25 25 \0030,26 26 \0030,27 27 ")
188 (":- "
189 "\0030,28 28 \0030,29 29 \0030,30 30 \0030,31 31 "
190 "\0030,32 32 \0030,33 33 \0030,34 34 \0030,35 35 "
191 "\0030,36 36 \0030,37 37 \0030,38 38 \0030,39 39 ")
192 (":- "
193 "\0030,40 40 \0030,41 41 \0030,42 42 \0030,43 43 "
194 "\0030,44 44 \0030,45 45 \0030,46 46 \0030,47 47 "
195 "\0030,48 48 \0030,49 49 \0030,50 50 \0030,51 51 ")
196 (":- "
197 "\0030,52 52 \0030,53 53 \0031,54 54 \0031,55 55 "
198 "\0031,56 56 \0031,57 57 \0031,58 58 \0030,59 59 "
199 "\0030,60 60 \0030,61 61 \0030,62 62 \0030,63 63 ")
200 (":- "
201 "\0030,64 64 \0031,65 65 \0031,66 66 \0031,67 67 "
202 "\0031,68 68 \0031,69 69 \0031,70 70 \0031,71 71 "
203 "\0030,72 72 \0030,73 73 \0030,74 74 \0030,75 75 ")
204 (":- "
205 "\0031,76 76 \0031,77 77 \0031,78 78 \0031,79 79 "
206 "\0031,80 80 \0031,81 81 \0031,82 82 \0031,83 83 "
207 "\0031,84 84 \0031,85 85 \0031,86 86 \0031,87 87 ")
208 (":- "
209 "\0030,88 88 \0030,89 89 \0030,90 90 \0030,91 91 "
210 "\0030,92 92 \0030,93 93 \0030,94 94 \0030,95 95 "
211 "\0031,96 96 \0031,97 97 \0031,98 98 \399,99 99 ")
212 (":- ")))
213
214(ert-deftest erc-controls-highlight--motd ()
215 ;; FIXME remove after adding
216 (unless (fboundp 'erc--initialize-markers)
217 (ert-skip "Missing required function"))
218 (should (eq t erc-interpret-controls-p))
219 (let ((erc-insert-modify-hook '(erc-controls-highlight))
220 erc-kill-channel-hook erc-kill-server-hook erc-kill-buffer-hook)
221 (with-current-buffer (get-buffer-create "#chan")
222 (erc-mode)
223 (setq-local erc-interpret-mirc-color t)
224 (erc--initialize-markers (point) nil)
225
226 (dolist (parts erc-goodies-tests--motd)
227 (erc-display-message nil 'notice (current-buffer) (string-join parts)))
228
229 ;; Spot check
230 (goto-char (point-min))
231 (should (search-forward " 16 " nil t))
232 (save-restriction
233 (narrow-to-region (point) (pos-eol))
234 (erc-goodies-tests--assert-face
235 0 " 17 " '(fg:erc-color-face0 (:background "#472100")))
236 (erc-goodies-tests--assert-face
237 4 " 18 " '(fg:erc-color-face0 (:background "#474700"))
238 '((:background "#472100"))))
239
240 (should (search-forward " 71 " nil t))
241 (save-restriction
242 (narrow-to-region (point) (pos-eol))
243 (erc-goodies-tests--assert-face
244 0 " 72 " '(fg:erc-color-face0 (:background "#5959ff")))
245 (erc-goodies-tests--assert-face
246 4 " 73 " '(fg:erc-color-face0 (:background "#c459ff"))
247 '((:background "#5959ff"))))
248
249 (goto-char (point-min))
250 (when noninteractive
251 (kill-buffer)))))
252
253;;; erc-goodies-tests.el ends here