diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/lisp/erc/erc-networks-tests.el | 1707 | ||||
| -rw-r--r-- | test/lisp/erc/erc-tests.el | 3 |
2 files changed, 1709 insertions, 1 deletions
diff --git a/test/lisp/erc/erc-networks-tests.el b/test/lisp/erc/erc-networks-tests.el new file mode 100644 index 00000000000..dcda04692ec --- /dev/null +++ b/test/lisp/erc/erc-networks-tests.el | |||
| @@ -0,0 +1,1707 @@ | |||
| 1 | ;;; erc-networks-tests.el --- Tests for erc-networks. -*- lexical-binding:t -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2020-2022 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 | ;;; Code: | ||
| 21 | |||
| 22 | (require 'ert-x) ; cl-lib | ||
| 23 | (require 'erc-networks) | ||
| 24 | |||
| 25 | (defun erc-networks-tests--create-dead-proc (&optional buf) | ||
| 26 | (let ((p (start-process "true" (or buf (current-buffer)) "true"))) | ||
| 27 | (while (process-live-p p) (sit-for 0.1)) | ||
| 28 | p)) | ||
| 29 | |||
| 30 | (defun erc-networks-tests--create-live-proc (&optional buf) | ||
| 31 | (let ((proc (start-process "sleep" (or buf (current-buffer)) "sleep" "1"))) | ||
| 32 | (set-process-query-on-exit-flag proc nil) | ||
| 33 | proc)) | ||
| 34 | |||
| 35 | ;; When we drop 27, call `get-buffer-create with INHIBIT-BUFFER-HOOKS. | ||
| 36 | (defun erc-networks-tests--clean-bufs () | ||
| 37 | (let (erc-kill-channel-hook | ||
| 38 | erc-kill-server-hook | ||
| 39 | erc-kill-buffer-hook) | ||
| 40 | (dolist (buf (erc-buffer-list)) | ||
| 41 | (kill-buffer buf)))) | ||
| 42 | |||
| 43 | (defun erc-networks-tests--bufnames (prefix) | ||
| 44 | (let* ((case-fold-search) | ||
| 45 | (pred (lambda (b) (string-prefix-p prefix (buffer-name b)))) | ||
| 46 | (prefixed (seq-filter pred (buffer-list)))) | ||
| 47 | (sort (mapcar #'buffer-name prefixed) #'string<))) | ||
| 48 | |||
| 49 | (ert-deftest erc-networks--id () | ||
| 50 | (cl-letf (((symbol-function 'float-time) | ||
| 51 | (lambda () 0.0))) | ||
| 52 | |||
| 53 | ;; Fixed | ||
| 54 | (should (equal (erc-networks--id-fixed-create 'foo) | ||
| 55 | (make-erc-networks--id-fixed :ts (float-time) | ||
| 56 | :symbol 'foo))) | ||
| 57 | |||
| 58 | ;; Eliding | ||
| 59 | (let* ((erc-network 'FooNet) | ||
| 60 | (erc-server-current-nick "Joe") | ||
| 61 | (identity (erc-networks--id-create nil))) | ||
| 62 | |||
| 63 | (should (equal identity #s(erc-networks--id-qualifying | ||
| 64 | 0.0 FooNet [FooNet "joe"] 1))) | ||
| 65 | (should (equal (erc-networks--id-qualifying-grow-id identity) | ||
| 66 | 'FooNet/joe)) | ||
| 67 | (should (equal identity #s(erc-networks--id-qualifying | ||
| 68 | 0.0 FooNet/joe [FooNet "joe"] 2))) | ||
| 69 | (should-not (erc-networks--id-qualifying-grow-id identity)) | ||
| 70 | (should (equal identity #s(erc-networks--id-qualifying | ||
| 71 | 0.0 FooNet/joe [FooNet "joe"] 2)))) | ||
| 72 | |||
| 73 | ;; Compat | ||
| 74 | (with-current-buffer (get-buffer-create "fake.chat") | ||
| 75 | (with-suppressed-warnings ((obsolete erc-rename-buffers)) | ||
| 76 | (let (erc-rename-buffers) | ||
| 77 | (should (equal (erc-networks--id-create nil) | ||
| 78 | (make-erc-networks--id-fixed :ts (float-time) | ||
| 79 | :symbol 'fake.chat))))) | ||
| 80 | (kill-buffer)))) | ||
| 81 | |||
| 82 | (ert-deftest erc-networks--id-create () | ||
| 83 | (cl-letf (((symbol-function 'float-time) | ||
| 84 | (lambda () 0.0))) | ||
| 85 | |||
| 86 | (should (equal (erc-networks--id-create 'foo) | ||
| 87 | (make-erc-networks--id-fixed :ts (float-time) | ||
| 88 | :symbol 'foo))) | ||
| 89 | (should (equal (erc-networks--id-create "foo") | ||
| 90 | (make-erc-networks--id-fixed :ts (float-time) | ||
| 91 | :symbol 'foo))) | ||
| 92 | (should (equal (erc-networks--id-create [h i]) | ||
| 93 | (make-erc-networks--id-fixed :ts (float-time) | ||
| 94 | :symbol (quote \[h\ \i\])))) | ||
| 95 | |||
| 96 | (with-current-buffer (get-buffer-create "foo") | ||
| 97 | (let ((expected (make-erc-networks--id-fixed :ts (float-time) | ||
| 98 | :symbol 'foo))) | ||
| 99 | (with-suppressed-warnings ((obsolete erc-rename-buffers)) | ||
| 100 | (let (erc-rename-buffers) | ||
| 101 | (should (equal (erc-networks--id-create nil) expected)))) | ||
| 102 | (with-suppressed-warnings ((obsolete erc-reuse-buffers)) | ||
| 103 | (let (erc-reuse-buffers) | ||
| 104 | (should (equal (erc-networks--id-create nil) expected)) | ||
| 105 | (should (equal (erc-networks--id-create 'bar) expected))))) | ||
| 106 | (kill-buffer)))) | ||
| 107 | |||
| 108 | (ert-deftest erc-networks--id-qualifying-prefix-length () | ||
| 109 | (should-not (erc-networks--id-qualifying-prefix-length | ||
| 110 | (make-erc-networks--id-qualifying) | ||
| 111 | (make-erc-networks--id-qualifying))) | ||
| 112 | |||
| 113 | (should-not (erc-networks--id-qualifying-prefix-length | ||
| 114 | (make-erc-networks--id-qualifying :parts [1 2]) | ||
| 115 | (make-erc-networks--id-qualifying :parts [2 3]))) | ||
| 116 | |||
| 117 | (should (= 1 (erc-networks--id-qualifying-prefix-length | ||
| 118 | (make-erc-networks--id-qualifying :parts [1]) | ||
| 119 | (make-erc-networks--id-qualifying :parts [1 2])))) | ||
| 120 | |||
| 121 | (should (= 1 (erc-networks--id-qualifying-prefix-length | ||
| 122 | (make-erc-networks--id-qualifying :parts [1 2]) | ||
| 123 | (make-erc-networks--id-qualifying :parts [1 3])))) | ||
| 124 | |||
| 125 | (should (= 2 (erc-networks--id-qualifying-prefix-length | ||
| 126 | (make-erc-networks--id-qualifying :parts [1 2]) | ||
| 127 | (make-erc-networks--id-qualifying :parts [1 2])))) | ||
| 128 | |||
| 129 | (should (= 1 (erc-networks--id-qualifying-prefix-length | ||
| 130 | (make-erc-networks--id-qualifying :parts ["1"]) | ||
| 131 | (make-erc-networks--id-qualifying :parts ["1"]))))) | ||
| 132 | |||
| 133 | (ert-deftest erc-networks--id-sort-buffers () | ||
| 134 | (let (oldest middle newest) | ||
| 135 | |||
| 136 | (with-temp-buffer | ||
| 137 | (setq erc-networks--id (erc-networks--id-fixed-create 'oldest) | ||
| 138 | oldest (current-buffer)) | ||
| 139 | |||
| 140 | (with-temp-buffer | ||
| 141 | (setq erc-networks--id (erc-networks--id-fixed-create 'middle) | ||
| 142 | middle (current-buffer)) | ||
| 143 | |||
| 144 | (with-temp-buffer | ||
| 145 | (setq erc-networks--id (erc-networks--id-fixed-create 'newest) | ||
| 146 | newest (current-buffer)) | ||
| 147 | |||
| 148 | (should (equal (erc-networks--id-sort-buffers | ||
| 149 | (list oldest newest middle)) | ||
| 150 | (list newest middle oldest)))))))) | ||
| 151 | |||
| 152 | (ert-deftest erc-networks-rename-surviving-target-buffer--channel () | ||
| 153 | (should (memq #'erc-networks-rename-surviving-target-buffer | ||
| 154 | erc-kill-channel-hook)) | ||
| 155 | |||
| 156 | (let ((chan-foonet-buffer (get-buffer-create "#chan@foonet"))) | ||
| 157 | |||
| 158 | (with-current-buffer chan-foonet-buffer | ||
| 159 | (erc-mode) | ||
| 160 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 161 | :parts [foonet "bob"] :len 1) | ||
| 162 | erc--target (erc--target-from-string "#chan"))) | ||
| 163 | |||
| 164 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 165 | (erc-mode) | ||
| 166 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 167 | :parts [barnet "bob"] :len 1) | ||
| 168 | erc--target (erc--target-from-string "#chan"))) | ||
| 169 | |||
| 170 | (kill-buffer "#chan@barnet") | ||
| 171 | (should (equal (erc-networks-tests--bufnames "#chan") '("#chan"))) | ||
| 172 | (should (eq chan-foonet-buffer (get-buffer "#chan")))) | ||
| 173 | |||
| 174 | (erc-networks-tests--clean-bufs)) | ||
| 175 | |||
| 176 | (ert-deftest erc-networks-rename-surviving-target-buffer--query () | ||
| 177 | (should (memq #'erc-networks-rename-surviving-target-buffer | ||
| 178 | erc-kill-buffer-hook)) | ||
| 179 | |||
| 180 | (let ((bob-foonet (get-buffer-create "bob@foonet"))) | ||
| 181 | |||
| 182 | (with-current-buffer bob-foonet | ||
| 183 | (erc-mode) | ||
| 184 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 185 | :parts [foonet "bob"] :len 1) | ||
| 186 | erc--target (erc--target-from-string "bob"))) | ||
| 187 | |||
| 188 | (with-current-buffer (get-buffer-create "bob@barnet") | ||
| 189 | (erc-mode) | ||
| 190 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 191 | :parts [barnet "bob"] :len 1) | ||
| 192 | erc--target (erc--target-from-string "bob"))) | ||
| 193 | |||
| 194 | (kill-buffer "bob@barnet") | ||
| 195 | (should (equal (erc-networks-tests--bufnames "bob") '("bob"))) | ||
| 196 | (should (eq bob-foonet (get-buffer "bob")))) | ||
| 197 | |||
| 198 | (erc-networks-tests--clean-bufs)) | ||
| 199 | |||
| 200 | (ert-deftest erc-networks-rename-surviving-target-buffer--multi () | ||
| 201 | |||
| 202 | (ert-info ("Multiple leftover channels untouched") | ||
| 203 | (with-current-buffer (get-buffer-create "#chan@foonet") | ||
| 204 | (erc-mode) | ||
| 205 | (setq erc--target (erc--target-from-string "#chan"))) | ||
| 206 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 207 | (erc-mode) | ||
| 208 | (setq erc--target (erc--target-from-string "#chan"))) | ||
| 209 | (with-current-buffer (get-buffer-create "#chan@baznet") | ||
| 210 | (erc-mode) | ||
| 211 | (setq erc--target (erc--target-from-string "#chan"))) | ||
| 212 | (kill-buffer "#chan@baznet") | ||
| 213 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 214 | '("#chan@barnet" "#chan@foonet"))) | ||
| 215 | (erc-networks-tests--clean-bufs)) | ||
| 216 | |||
| 217 | (ert-info ("Multiple leftover queries untouched") | ||
| 218 | (with-current-buffer (get-buffer-create "bob@foonet") | ||
| 219 | (erc-mode) | ||
| 220 | (setq erc--target (erc--target-from-string "bob"))) | ||
| 221 | (with-current-buffer (get-buffer-create "bob@barnet") | ||
| 222 | (erc-mode) | ||
| 223 | (setq erc--target (erc--target-from-string "bob"))) | ||
| 224 | (with-current-buffer (get-buffer-create "bob@baznet") | ||
| 225 | (erc-mode) | ||
| 226 | (setq erc--target (erc--target-from-string "bob"))) | ||
| 227 | (kill-buffer "bob@baznet") | ||
| 228 | (should (equal (erc-networks-tests--bufnames "bob") | ||
| 229 | '("bob@barnet" "bob@foonet"))) | ||
| 230 | (erc-networks-tests--clean-bufs))) | ||
| 231 | |||
| 232 | ;; As of May 2022, this "shrink" stuff runs whenever an ERC buffer is | ||
| 233 | ;; killed because `erc-networks-shrink-ids-and-buffer-names' is a | ||
| 234 | ;; default member of all three erc-kill-* functions. | ||
| 235 | |||
| 236 | ;; Note: this overlaps a fair bit with the "hook" variants, i.e., | ||
| 237 | ;; `erc-networks--shrink-ids-and-buffer-names--hook-outstanding-*' If | ||
| 238 | ;; this ever fails, just delete this and fix those. But please copy | ||
| 239 | ;; over and adapt the comments first. | ||
| 240 | |||
| 241 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--perform-outstanding () | ||
| 242 | ;; While some buffer #a@barnet/dummy is being killed, its display ID | ||
| 243 | ;; is not collapsed because collisions still exist. | ||
| 244 | ;; | ||
| 245 | ;; Note that we don't have to set `erc-server-connected' because | ||
| 246 | ;; this function is intentionally connectivity agnostic. | ||
| 247 | (with-current-buffer (get-buffer-create "foonet/tester") | ||
| 248 | (erc-mode) | ||
| 249 | (setq erc-server-current-nick "tester" ; Always set (`erc-open') | ||
| 250 | ;; Set when transport connected | ||
| 251 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 252 | ;; Both set just before IRC (logically) connected (post MOTD) | ||
| 253 | erc-network 'foonet | ||
| 254 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 255 | :symbol 'foonet/tester | ||
| 256 | :parts [foonet "tester"] | ||
| 257 | :len 2))) ; is/was a plain foonet collision | ||
| 258 | |||
| 259 | ;; Presumably, some server buffer named foonet/dummy was just | ||
| 260 | ;; killed, hence the length 2 display ID. | ||
| 261 | |||
| 262 | ;; A target buffer for chan #a exists for foonet/tester. The | ||
| 263 | ;; precise form of its name should not affect shrinking. | ||
| 264 | (with-current-buffer (get-buffer-create | ||
| 265 | (elt ["#a" "#a@foonet" "#a@foonet/tester"] (random 3))) | ||
| 266 | (erc-mode) | ||
| 267 | (setq erc-server-process (buffer-local-value 'erc-server-process | ||
| 268 | (get-buffer "foonet/tester")) | ||
| 269 | erc-network 'foonet | ||
| 270 | erc-server-current-nick "tester" | ||
| 271 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 272 | (get-buffer "foonet/tester")) | ||
| 273 | erc--target (erc--target-from-string "#a"))) | ||
| 274 | |||
| 275 | ;; Another network context exists (so we have buffers to iterate | ||
| 276 | ;; over), and it's also part of a collision group. | ||
| 277 | (with-current-buffer (get-buffer-create "barnet/tester") | ||
| 278 | (erc-mode) | ||
| 279 | (setq erc-network 'barnet | ||
| 280 | erc-server-current-nick "tester" | ||
| 281 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 282 | :symbol 'barnet/tester | ||
| 283 | :parts [barnet "tester"] | ||
| 284 | :len 2) | ||
| 285 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 286 | |||
| 287 | (with-current-buffer (get-buffer-create "barnet/dummy") | ||
| 288 | (erc-mode) | ||
| 289 | (setq erc-network 'barnet | ||
| 290 | erc-server-current-nick "dummy" | ||
| 291 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 292 | :symbol 'barnet/dummy | ||
| 293 | :parts [barnet "dummy"] | ||
| 294 | :len 2) | ||
| 295 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 296 | |||
| 297 | ;; The buffer being killed is not part of the foonet collision | ||
| 298 | ;; group, which contains one display ID eligible for shrinkage. | ||
| 299 | (with-current-buffer (get-buffer-create | ||
| 300 | (elt ["#a@barnet" "#a@barnet/tester"] (random 2))) | ||
| 301 | (erc-mode) | ||
| 302 | (setq erc-network 'barnet | ||
| 303 | erc-server-current-nick "tester" | ||
| 304 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 305 | (get-buffer "barnet/tester")) | ||
| 306 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 307 | (get-buffer "barnet/tester")) | ||
| 308 | erc--target (erc--target-from-string "#a"))) | ||
| 309 | |||
| 310 | (with-temp-buffer ; doesn't matter what the current buffer is | ||
| 311 | (setq erc-networks--id (make-erc-networks--id-qualifying)) ; mock | ||
| 312 | (erc-networks--shrink-ids-and-buffer-names)) | ||
| 313 | |||
| 314 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 315 | '("foonet" ; shrunk | ||
| 316 | "#a@foonet" ; shrunk | ||
| 317 | "barnet/tester" | ||
| 318 | "barnet/dummy" | ||
| 319 | "#a@barnet/tester"))) | ||
| 320 | |||
| 321 | (erc-networks-tests--clean-bufs)) | ||
| 322 | |||
| 323 | ;; This likewise overlaps with the "hook" variants below. If this | ||
| 324 | ;; should ever fail, just delete it and optionally fix those. | ||
| 325 | |||
| 326 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--perform-collapse () | ||
| 327 | ;; This is similar to the "outstanding" variant above, but both | ||
| 328 | ;; groups are eligible for renaming, which is abnormal but possible | ||
| 329 | ;; when recovering from some mishap. | ||
| 330 | (with-current-buffer (get-buffer-create "foonet/tester") | ||
| 331 | (erc-mode) | ||
| 332 | (setq erc-network 'foonet | ||
| 333 | erc-server-current-nick "tester" | ||
| 334 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 335 | :symbol 'foonet/tester | ||
| 336 | :parts [foonet "tester"] | ||
| 337 | :len 2) | ||
| 338 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 339 | |||
| 340 | (with-current-buffer | ||
| 341 | (get-buffer-create (elt ["#a" "#a@foonet/tester"] (random 2))) | ||
| 342 | (erc-mode) | ||
| 343 | (setq erc-server-process (buffer-local-value 'erc-server-process | ||
| 344 | (get-buffer "foonet/tester")) | ||
| 345 | erc-network 'foonet | ||
| 346 | erc-server-current-nick "tester" | ||
| 347 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 348 | (get-buffer "foonet/tester")) | ||
| 349 | erc--target (erc--target-from-string "#a"))) | ||
| 350 | |||
| 351 | (with-current-buffer (get-buffer-create "barnet/tester") | ||
| 352 | (erc-mode) | ||
| 353 | (setq erc-network 'barnet | ||
| 354 | erc-server-current-nick "tester" | ||
| 355 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 356 | :symbol 'barnet/tester | ||
| 357 | :parts [barnet "tester"] | ||
| 358 | :len 2) | ||
| 359 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 360 | |||
| 361 | (with-current-buffer | ||
| 362 | (get-buffer-create (elt ["#b" "#b@foonet/tester"] (random 2))) | ||
| 363 | (erc-mode) | ||
| 364 | (setq erc-network 'barnet | ||
| 365 | erc-server-current-nick "tester" | ||
| 366 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 367 | (get-buffer "barnet/tester")) | ||
| 368 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 369 | (get-buffer "barnet/tester")) | ||
| 370 | erc--target (erc--target-from-string "#b"))) | ||
| 371 | |||
| 372 | (with-temp-buffer | ||
| 373 | (setq erc-networks--id (make-erc-networks--id-qualifying)) | ||
| 374 | (erc-networks--shrink-ids-and-buffer-names)) | ||
| 375 | |||
| 376 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 377 | '("foonet" "#a" "barnet" "#b"))) | ||
| 378 | |||
| 379 | (erc-networks-tests--clean-bufs)) | ||
| 380 | |||
| 381 | (defun erc-networks--shrink-ids-and-buffer-names--hook-outstanding-common () | ||
| 382 | |||
| 383 | (with-current-buffer (get-buffer-create "foonet/tester") | ||
| 384 | (erc-mode) | ||
| 385 | (setq erc-network 'foonet | ||
| 386 | erc-server-current-nick "tester" | ||
| 387 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 388 | :symbol 'foonet/tester | ||
| 389 | :parts [foonet "tester"] | ||
| 390 | :len 2) | ||
| 391 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 392 | |||
| 393 | (with-current-buffer (get-buffer-create "#a@foonet/tester") | ||
| 394 | (erc-mode) | ||
| 395 | (setq erc-server-process (buffer-local-value 'erc-server-process | ||
| 396 | (get-buffer "foonet/tester")) | ||
| 397 | erc-network 'foonet | ||
| 398 | erc-server-current-nick "tester" | ||
| 399 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 400 | (get-buffer "foonet/tester")) | ||
| 401 | erc--target (erc--target-from-string "#a"))) | ||
| 402 | |||
| 403 | (with-current-buffer (get-buffer-create "barnet/tester") | ||
| 404 | (erc-mode) | ||
| 405 | (setq erc-network 'barnet | ||
| 406 | erc-server-current-nick "tester" | ||
| 407 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 408 | :symbol 'barnet/tester | ||
| 409 | :parts [barnet "tester"] | ||
| 410 | :len 2) | ||
| 411 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 412 | |||
| 413 | (with-current-buffer (get-buffer-create "barnet/dummy") | ||
| 414 | (erc-mode) | ||
| 415 | (setq erc-network 'barnet | ||
| 416 | erc-server-current-nick "dummy" | ||
| 417 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 418 | :symbol 'barnet/dummy | ||
| 419 | :parts [barnet "dummy"] | ||
| 420 | :len 2) | ||
| 421 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 422 | |||
| 423 | (with-current-buffer (get-buffer-create "#a@barnet/tester") | ||
| 424 | (erc-mode) | ||
| 425 | (setq erc-network 'barnet | ||
| 426 | erc-server-current-nick "tester" | ||
| 427 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 428 | (get-buffer "barnet/tester")) | ||
| 429 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 430 | (get-buffer "barnet/tester")) | ||
| 431 | erc--target (erc--target-from-string "#a")))) | ||
| 432 | |||
| 433 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--hook-outstanding-srv () | ||
| 434 | (erc-networks--shrink-ids-and-buffer-names--hook-outstanding-common) | ||
| 435 | (with-current-buffer (get-buffer-create "foonet/dummy") | ||
| 436 | (erc-mode) | ||
| 437 | (setq erc-network 'foonet | ||
| 438 | erc-server-current-nick "dummy" | ||
| 439 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 440 | :symbol 'foonet/dummy | ||
| 441 | :parts [foonet "dummy"] | ||
| 442 | :len 2) | ||
| 443 | erc-server-process (erc-networks-tests--create-live-proc)) | ||
| 444 | (kill-buffer)) | ||
| 445 | |||
| 446 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 447 | '("foonet" | ||
| 448 | "#a@foonet" | ||
| 449 | "barnet/tester" | ||
| 450 | "barnet/dummy" | ||
| 451 | "#a@barnet/tester"))) | ||
| 452 | (erc-networks-tests--clean-bufs)) | ||
| 453 | |||
| 454 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--hook-outstanding-tgt () | ||
| 455 | (erc-networks--shrink-ids-and-buffer-names--hook-outstanding-common) | ||
| 456 | (with-current-buffer (get-buffer-create "#a@foonet/dummy") | ||
| 457 | (erc-mode) | ||
| 458 | (setq erc-network 'foonet | ||
| 459 | erc-server-current-nick "dummy" | ||
| 460 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 461 | :symbol 'foonet/dummy | ||
| 462 | :parts [foonet "dummy"] | ||
| 463 | :len 2) | ||
| 464 | erc--target (erc--target-from-string "#a") | ||
| 465 | erc-server-process (with-temp-buffer | ||
| 466 | (erc-networks-tests--create-dead-proc)))) | ||
| 467 | |||
| 468 | (with-current-buffer "#a@foonet/dummy" (kill-buffer)) | ||
| 469 | |||
| 470 | ;; Identical to *-server variant above | ||
| 471 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 472 | '("foonet" | ||
| 473 | "#a@foonet" | ||
| 474 | "barnet/tester" | ||
| 475 | "barnet/dummy" | ||
| 476 | "#a@barnet/tester"))) | ||
| 477 | (erc-networks-tests--clean-bufs)) | ||
| 478 | |||
| 479 | (ert-deftest erc-networks-rename-surviving-target-buffer--shrink () | ||
| 480 | (erc-networks--shrink-ids-and-buffer-names--hook-outstanding-common) | ||
| 481 | |||
| 482 | ;; This buffer isn't "#a@foonet" (yet) because the shrink-ids hook | ||
| 483 | ;; hasn't run. However, when it's the rename hook runs, its network | ||
| 484 | ;; id *is* "foonet", not "foonet/tester". | ||
| 485 | (with-current-buffer "#a@foonet/tester" (kill-buffer)) | ||
| 486 | |||
| 487 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 488 | '("foonet" | ||
| 489 | "barnet/tester" | ||
| 490 | "barnet/dummy" | ||
| 491 | "#a"))) | ||
| 492 | |||
| 493 | (erc-networks-tests--clean-bufs)) | ||
| 494 | |||
| 495 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--server () | ||
| 496 | |||
| 497 | (with-current-buffer (get-buffer-create "foonet/tester") | ||
| 498 | (erc-mode) | ||
| 499 | (setq erc-network 'foonet | ||
| 500 | erc-server-current-nick "tester" | ||
| 501 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 502 | :symbol 'foonet/tester | ||
| 503 | :parts [foonet "tester"] | ||
| 504 | :len 2) | ||
| 505 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 506 | |||
| 507 | (with-current-buffer (get-buffer-create "foonet/dummy") | ||
| 508 | (erc-mode) | ||
| 509 | (setq erc-network 'foonet | ||
| 510 | erc-server-current-nick "dummy" | ||
| 511 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 512 | :symbol 'foonet/dummy | ||
| 513 | :parts [foonet "dummy"] | ||
| 514 | :len 2) | ||
| 515 | erc-server-process (erc-networks-tests--create-dead-proc)) | ||
| 516 | (kill-buffer)) | ||
| 517 | |||
| 518 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) '("foonet"))) | ||
| 519 | |||
| 520 | (erc-networks-tests--clean-bufs)) | ||
| 521 | |||
| 522 | (defun erc-networks--shrink-ids-and-buffer-names--hook-collapse (check) | ||
| 523 | |||
| 524 | (with-current-buffer (get-buffer-create "foonet/tester") | ||
| 525 | (erc-mode) | ||
| 526 | (setq erc-network 'foonet | ||
| 527 | erc-server-current-nick "tester" | ||
| 528 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 529 | :symbol 'foonet/tester | ||
| 530 | :parts [foonet "tester"] | ||
| 531 | :len 2) | ||
| 532 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 533 | |||
| 534 | (with-current-buffer (get-buffer-create "#a@foonet/tester") | ||
| 535 | (erc-mode) | ||
| 536 | (setq erc-server-process (buffer-local-value 'erc-server-process | ||
| 537 | (get-buffer "foonet/tester")) | ||
| 538 | erc-network 'foonet | ||
| 539 | erc-server-current-nick "tester" | ||
| 540 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 541 | (get-buffer "foonet/tester")) | ||
| 542 | erc--target (erc--target-from-string "#a"))) | ||
| 543 | |||
| 544 | (with-current-buffer (get-buffer-create "barnet/tester") | ||
| 545 | (erc-mode) | ||
| 546 | (setq erc-network 'barnet | ||
| 547 | erc-server-current-nick "tester" | ||
| 548 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 549 | :symbol 'barnet/tester | ||
| 550 | :parts [barnet "tester"] | ||
| 551 | :len 2) | ||
| 552 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 553 | |||
| 554 | (with-current-buffer (get-buffer-create "#b@foonet/tester") | ||
| 555 | (erc-mode) | ||
| 556 | (setq erc-network 'barnet | ||
| 557 | erc-server-current-nick "tester" | ||
| 558 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 559 | (get-buffer "barnet/tester")) | ||
| 560 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 561 | (get-buffer "barnet/tester")) | ||
| 562 | erc--target (erc--target-from-string "#b"))) | ||
| 563 | |||
| 564 | (funcall check) | ||
| 565 | |||
| 566 | (should (equal (mapcar #'buffer-name (erc-buffer-list)) | ||
| 567 | '("foonet" "#a" "barnet" "#b"))) | ||
| 568 | |||
| 569 | (erc-networks-tests--clean-bufs)) | ||
| 570 | |||
| 571 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--hook-collapse-server () | ||
| 572 | (erc-networks--shrink-ids-and-buffer-names--hook-collapse | ||
| 573 | (lambda () | ||
| 574 | (with-current-buffer (get-buffer-create "foonet/dummy") | ||
| 575 | (erc-mode) | ||
| 576 | (setq erc-network 'foonet | ||
| 577 | erc-server-current-nick "dummy" | ||
| 578 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 579 | :symbol 'foonet/dummy | ||
| 580 | :parts [foonet "dummy"] | ||
| 581 | :len 2) | ||
| 582 | erc-server-process (erc-networks-tests--create-live-proc)) | ||
| 583 | (kill-buffer))))) | ||
| 584 | |||
| 585 | (ert-deftest erc-networks--shrink-ids-and-buffer-names--hook-collapse-target () | ||
| 586 | (erc-networks--shrink-ids-and-buffer-names--hook-collapse | ||
| 587 | (lambda () | ||
| 588 | (with-current-buffer (get-buffer-create "#a@foonet/dummy") | ||
| 589 | (erc-mode) | ||
| 590 | (setq erc-network 'foonet | ||
| 591 | erc-server-current-nick "dummy" | ||
| 592 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 593 | :symbol 'foonet/dummy | ||
| 594 | :parts [foonet "dummy"] | ||
| 595 | :len 2) | ||
| 596 | ;; `erc-kill-buffer-function' uses legacy target detection | ||
| 597 | ;; but falls back on buffer name, so no need for: | ||
| 598 | ;; | ||
| 599 | ;; erc-default-recipients '("#a") | ||
| 600 | ;; | ||
| 601 | erc--target (erc--target-from-string "#a") | ||
| 602 | erc-server-process (with-temp-buffer | ||
| 603 | (erc-networks-tests--create-dead-proc))) | ||
| 604 | (kill-buffer))))) | ||
| 605 | |||
| 606 | ;; FIXME this test is old and may describe impossible states: | ||
| 607 | ;; leftover identities being qual-equal but not eq (implies | ||
| 608 | ;; `erc-networks--reclaim-orphaned-target-buffers' is somehow broken). | ||
| 609 | ;; | ||
| 610 | ;; Otherwise, the point of this test is to show that server process | ||
| 611 | ;; identity does not impact the hunt for duplicates. | ||
| 612 | |||
| 613 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--duplicates (start) | ||
| 614 | |||
| 615 | (with-current-buffer (get-buffer-create "foonet") | ||
| 616 | (erc-mode) | ||
| 617 | (setq erc-network 'foonet | ||
| 618 | erc-server-current-nick "tester" | ||
| 619 | erc-networks--id (erc-networks--id-create nil) | ||
| 620 | erc-server-process (funcall start))) | ||
| 621 | |||
| 622 | (with-current-buffer (get-buffer-create "#chan") ; prior session | ||
| 623 | (erc-mode) | ||
| 624 | (setq erc-server-process (buffer-local-value 'erc-server-process | ||
| 625 | (get-buffer "foonet")) | ||
| 626 | erc--target (erc--target-from-string "#chan") | ||
| 627 | erc-networks--id (erc-networks--id-create nil))) | ||
| 628 | |||
| 629 | (ert-info ("Conflicts not recognized as ERC buffers and not renamed") | ||
| 630 | (get-buffer-create "#chan@foonet") | ||
| 631 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 632 | '("#chan" "#chan@foonet")))) | ||
| 633 | |||
| 634 | ;; These are dupes (not "collisions") | ||
| 635 | |||
| 636 | (with-current-buffer "#chan@foonet" ; same proc | ||
| 637 | (erc-mode) | ||
| 638 | (setq erc--target (erc--target-from-string "#chan") | ||
| 639 | erc-network 'foonet | ||
| 640 | erc-server-current-nick "tester" | ||
| 641 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 642 | (get-buffer "foonet")) | ||
| 643 | erc-networks--id (erc-networks--id-create nil))) | ||
| 644 | |||
| 645 | (with-current-buffer (get-buffer-create "#chan@foonet<dead>") | ||
| 646 | (erc-mode) | ||
| 647 | (setq erc--target (erc--target-from-string "#chan") | ||
| 648 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 649 | erc-network 'foonet | ||
| 650 | erc-server-current-nick "tester" | ||
| 651 | erc-networks--id (erc-networks--id-create nil))) | ||
| 652 | |||
| 653 | (with-current-buffer (get-buffer-create "#chan@foonet<live>") | ||
| 654 | (erc-mode) | ||
| 655 | (setq erc--target (erc--target-from-string "#chan") | ||
| 656 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 657 | erc-network 'foonet | ||
| 658 | erc-server-current-nick "tester" | ||
| 659 | erc-networks--id (erc-networks--id-create nil))) | ||
| 660 | |||
| 661 | (let ((created (list (get-buffer "#chan@foonet<live>") | ||
| 662 | (get-buffer "#chan@foonet<dead>") | ||
| 663 | (get-buffer "#chan@foonet")))) | ||
| 664 | |||
| 665 | (with-current-buffer "foonet" | ||
| 666 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 667 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 668 | "#chan"))) | ||
| 669 | |||
| 670 | (ert-info ("All buffers considered dupes renamed") | ||
| 671 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 672 | '("#chan" "#chan<2>" "#chan<3>" "#chan<4>")))) | ||
| 673 | |||
| 674 | (ert-info ("All buffers renamed from newest to oldest") | ||
| 675 | (should (equal created (list (get-buffer "#chan<2>") | ||
| 676 | (get-buffer "#chan<3>") | ||
| 677 | (get-buffer "#chan<4>")))))) | ||
| 678 | |||
| 679 | (erc-networks-tests--clean-bufs)) | ||
| 680 | |||
| 681 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--dupes-given (go) | ||
| 682 | |||
| 683 | ;; The connection's network is discovered before target buffers are | ||
| 684 | ;; created. This shows that the network doesn't matter when only | ||
| 685 | ;; "given" IDs are present. | ||
| 686 | (with-current-buffer (get-buffer-create "oofnet") | ||
| 687 | (erc-mode) | ||
| 688 | (setq erc-networks--id (erc-networks--id-create 'oofnet) | ||
| 689 | erc-network 'foonet | ||
| 690 | erc-server-current-nick "tester" | ||
| 691 | erc-server-process (funcall go))) | ||
| 692 | |||
| 693 | (with-current-buffer (get-buffer-create "#chan") ; prior session | ||
| 694 | (erc-mode) | ||
| 695 | (setq erc-networks--id (erc-networks--id-create 'oofnet) | ||
| 696 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 697 | (get-buffer "oofnet")) | ||
| 698 | erc--target (erc--target-from-string "#chan"))) | ||
| 699 | |||
| 700 | (with-current-buffer (get-buffer-create "#chan@oofnet") ;dupe/not collision | ||
| 701 | (erc-mode) | ||
| 702 | (setq erc-networks--id (erc-networks--id-create 'oofnet) | ||
| 703 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 704 | (get-buffer "oofnet")) | ||
| 705 | erc--target (erc--target-from-string "#chan"))) | ||
| 706 | |||
| 707 | (with-current-buffer "oofnet" | ||
| 708 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 709 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 710 | "#chan"))) | ||
| 711 | |||
| 712 | (ert-info ("All buffers matching target and network renamed") | ||
| 713 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 714 | '("#chan" "#chan<2>")))) | ||
| 715 | |||
| 716 | (erc-networks-tests--clean-bufs)) | ||
| 717 | |||
| 718 | (ert-deftest erc-networks--reconcile-buffer-names--duplicates () | ||
| 719 | (ert-info ("Process live, no error") | ||
| 720 | (erc-tests--prep-erc-networks--reconcile-buffer-names--duplicates | ||
| 721 | #'erc-networks-tests--create-live-proc)) | ||
| 722 | |||
| 723 | (ert-info ("Process live, no error, given ID") | ||
| 724 | (erc-tests--prep-erc-networks--reconcile-buffer-names--dupes-given | ||
| 725 | #'erc-networks-tests--create-live-proc)) | ||
| 726 | |||
| 727 | (ert-info ("Process dead") | ||
| 728 | (erc-tests--prep-erc-networks--reconcile-buffer-names--duplicates | ||
| 729 | #'erc-networks-tests--create-dead-proc)) | ||
| 730 | |||
| 731 | (ert-info ("Process dead, given ID") | ||
| 732 | (erc-tests--prep-erc-networks--reconcile-buffer-names--dupes-given | ||
| 733 | #'erc-networks-tests--create-dead-proc))) | ||
| 734 | |||
| 735 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf (check) | ||
| 736 | (let ((foonet-proc (with-temp-buffer | ||
| 737 | (erc-networks-tests--create-dead-proc)))) | ||
| 738 | (with-current-buffer (get-buffer-create "barnet") | ||
| 739 | (erc-mode) | ||
| 740 | (setq erc-network 'barnet | ||
| 741 | erc-server-current-nick "tester" | ||
| 742 | erc-networks--id (erc-networks--id-create nil) | ||
| 743 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 744 | |||
| 745 | ;; Different proc and not "qual-equal" (different elts) | ||
| 746 | (with-current-buffer (get-buffer-create "#chan") | ||
| 747 | (erc-mode) | ||
| 748 | (setq erc-network 'foonet | ||
| 749 | erc-server-current-nick "tester" | ||
| 750 | erc-networks--id (erc-networks--id-create nil) | ||
| 751 | erc--target (erc--target-from-string "#chan") | ||
| 752 | erc-server-process foonet-proc)) | ||
| 753 | (funcall check) | ||
| 754 | (erc-networks-tests--clean-bufs))) | ||
| 755 | |||
| 756 | (ert-deftest erc-networks--reconcile-buffer-names--no-server-buf () | ||
| 757 | (ert-info ("Existing #chan buffer respected") | ||
| 758 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf | ||
| 759 | (lambda () | ||
| 760 | (with-current-buffer "barnet" | ||
| 761 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 762 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 763 | "#chan@barnet"))) | ||
| 764 | (ert-info ("Existing #chan buffer found and renamed") | ||
| 765 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 766 | '("#chan@foonet"))))))) | ||
| 767 | |||
| 768 | (ert-info ("Existing #chan buffer") | ||
| 769 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf | ||
| 770 | (lambda () | ||
| 771 | (with-current-buffer (get-buffer-create "foonet") | ||
| 772 | (erc-mode) | ||
| 773 | (setq erc-network 'foonet | ||
| 774 | erc-server-current-nick "tester" | ||
| 775 | erc-networks--id (erc-networks--id-create nil) | ||
| 776 | erc-server-process (erc-networks-tests--create-dead-proc)) | ||
| 777 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 778 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 779 | "#chan"))) | ||
| 780 | (ert-info ("Nothing renamed") | ||
| 781 | (should (equal (erc-networks-tests--bufnames "#chan") '("#chan"))))))) | ||
| 782 | |||
| 783 | (ert-info ("Existing #chan@foonet and #chan@barnet buffers") | ||
| 784 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf | ||
| 785 | (lambda () | ||
| 786 | (with-current-buffer "#chan" | ||
| 787 | (rename-buffer "#chan@foonet")) | ||
| 788 | (should-not (get-buffer "#chan@barnet")) | ||
| 789 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 790 | (erc-mode) | ||
| 791 | (setq erc--target (erc--target-from-string "#chan") | ||
| 792 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 793 | (get-buffer "barnet")) | ||
| 794 | erc-networks--id (erc-networks--id-create nil))) | ||
| 795 | (with-current-buffer (get-buffer-create "foonet") | ||
| 796 | (erc-mode) | ||
| 797 | (setq erc-network 'foonet | ||
| 798 | erc-server-current-nick "tester" | ||
| 799 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 800 | erc-networks--id (erc-networks--id-create nil)) | ||
| 801 | (set-process-query-on-exit-flag erc-server-process nil) | ||
| 802 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 803 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 804 | "#chan@foonet"))) | ||
| 805 | (ert-info ("Nothing renamed") | ||
| 806 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 807 | '("#chan@barnet" "#chan@foonet")))))))) | ||
| 808 | |||
| 809 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf-given | ||
| 810 | (check) | ||
| 811 | (let ((oofnet-proc (with-temp-buffer | ||
| 812 | (erc-networks-tests--create-dead-proc)))) | ||
| 813 | |||
| 814 | (with-current-buffer (get-buffer-create "rabnet") | ||
| 815 | (erc-mode) | ||
| 816 | ;; Again, given name preempts network lookup (unrealistic but | ||
| 817 | ;; highlights priorities) | ||
| 818 | (setq erc-networks--id (erc-networks--id-create 'rabnet) | ||
| 819 | erc-network 'barnet | ||
| 820 | erc-server-current-nick "tester" | ||
| 821 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 822 | |||
| 823 | ;; Identity is not "qual-equal" to above | ||
| 824 | (with-current-buffer (get-buffer-create "#chan") | ||
| 825 | (erc-mode) | ||
| 826 | (setq erc-networks--id (erc-networks--id-create 'oofnet) | ||
| 827 | erc-network 'foonet | ||
| 828 | erc--target (erc--target-from-string "#chan") | ||
| 829 | erc-server-process oofnet-proc)) | ||
| 830 | (funcall check) | ||
| 831 | (erc-networks-tests--clean-bufs))) | ||
| 832 | |||
| 833 | (ert-deftest erc-networks--reconcile-buffer-names--no-server-buf-given () | ||
| 834 | |||
| 835 | (ert-info ("Existing #chan buffer respected") | ||
| 836 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf-given | ||
| 837 | (lambda () | ||
| 838 | (with-current-buffer "rabnet" | ||
| 839 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 840 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 841 | "#chan@rabnet"))) | ||
| 842 | |||
| 843 | (ert-info ("Existing #chan buffer found and renamed") | ||
| 844 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 845 | '("#chan@oofnet"))))))) | ||
| 846 | |||
| 847 | (ert-info ("Existing #chan@oofnet and #chan@rabnet buffers") | ||
| 848 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf-given | ||
| 849 | (lambda () | ||
| 850 | ;; #chan has already been uniquified (but not grown) | ||
| 851 | (with-current-buffer "#chan" (rename-buffer "#chan@oofnet")) | ||
| 852 | (should-not (get-buffer "#chan@rabnet")) | ||
| 853 | |||
| 854 | (with-current-buffer (get-buffer-create "#chan@rabnet") | ||
| 855 | (erc-mode) | ||
| 856 | (setq erc--target (erc--target-from-string "#chan") | ||
| 857 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 858 | (get-buffer "rabnet")) | ||
| 859 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 860 | (get-buffer "rabnet")))) | ||
| 861 | |||
| 862 | (with-current-buffer (get-buffer-create "oofnet") | ||
| 863 | (erc-mode) | ||
| 864 | (setq erc-network 'oofnet | ||
| 865 | erc-server-current-nick "tester" | ||
| 866 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 867 | erc-networks--id (erc-networks--id-create 'oofnet)) ; given | ||
| 868 | (set-process-query-on-exit-flag erc-server-process nil) | ||
| 869 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 870 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 871 | "#chan@oofnet"))) | ||
| 872 | |||
| 873 | (ert-info ("Nothing renamed") | ||
| 874 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 875 | '("#chan@oofnet" "#chan@rabnet")))))))) | ||
| 876 | |||
| 877 | ;; This shows a corner case where a user explicitly assigns a "given" | ||
| 878 | ;; ID via `erc-tls' but later connects again without one. It would | ||
| 879 | ;; actually probably be better if the given identity were to win and | ||
| 880 | ;; the derived one got an <n>-suffix. | ||
| 881 | ;; | ||
| 882 | ;; If we just compared net identities, the two would match, but they | ||
| 883 | ;; don't here because one has a given name and the other a | ||
| 884 | ;; discovered/assembled one; so they are *not* qual-equal. | ||
| 885 | (ert-deftest erc-networks--reconcile-buffer-names--no-srv-buf-given-mismatch () | ||
| 886 | ;; Existing #chan buffer *not* respected | ||
| 887 | (erc-tests--prep-erc-networks--reconcile-buffer-names--no-srv-buf-given | ||
| 888 | (lambda () | ||
| 889 | (with-current-buffer (get-buffer-create "oofnet") | ||
| 890 | (erc-mode) | ||
| 891 | (setq erc-network 'oofnet | ||
| 892 | erc-server-current-nick "tester" | ||
| 893 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 894 | erc-networks--id (erc-networks--id-create nil)) ; derived | ||
| 895 | (should (string= (erc-networks--reconcile-buffer-names | ||
| 896 | (erc--target-from-string "#chan") erc-networks--id) | ||
| 897 | "#chan@oofnet"))) | ||
| 898 | |||
| 899 | (ert-info ("Collision renamed but not grown (because it's a given)") | ||
| 900 | ;; Original chan uniquified and moved out of the way | ||
| 901 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 902 | '("#chan@oofnet<2>"))))))) | ||
| 903 | |||
| 904 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net (check) | ||
| 905 | |||
| 906 | (with-current-buffer (get-buffer-create "foonet") | ||
| 907 | (erc-mode) | ||
| 908 | (setq erc-network 'foonet | ||
| 909 | erc-server-current-nick "tester" | ||
| 910 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 911 | erc-networks--id (erc-networks--id-create nil))) ; derived | ||
| 912 | |||
| 913 | (with-current-buffer (get-buffer-create "barnet") | ||
| 914 | (erc-mode) | ||
| 915 | (setq erc-network 'barnet | ||
| 916 | erc-server-current-nick "tester" | ||
| 917 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 918 | erc-networks--id (erc-networks--id-create nil))) ; derived | ||
| 919 | |||
| 920 | (with-current-buffer | ||
| 921 | (get-buffer-create (elt ["#chan" "#chan@foonet"] (random 2))) | ||
| 922 | (erc-mode) | ||
| 923 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 924 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 925 | (with-current-buffer "foonet" | ||
| 926 | (list erc-server-process erc-networks--id)))) | ||
| 927 | |||
| 928 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 929 | (erc-mode) | ||
| 930 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 931 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 932 | (with-current-buffer "barnet" | ||
| 933 | (list erc-server-process erc-networks--id)))) | ||
| 934 | |||
| 935 | (funcall check) | ||
| 936 | (erc-networks-tests--clean-bufs)) | ||
| 937 | |||
| 938 | (ert-deftest erc-networks--reconcile-buffer-names--multi-net () | ||
| 939 | (ert-info ("Same network rename") | ||
| 940 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net | ||
| 941 | (lambda () | ||
| 942 | (with-current-buffer "foonet" | ||
| 943 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 944 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 945 | (should (string= result "#chan@foonet")))) | ||
| 946 | |||
| 947 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 948 | '("#chan@barnet" "#chan@foonet")))))) | ||
| 949 | |||
| 950 | (ert-info ("Same network keep name") | ||
| 951 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net | ||
| 952 | (lambda () | ||
| 953 | (with-current-buffer "barnet" | ||
| 954 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 955 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 956 | (should (string= result "#chan@barnet")))) | ||
| 957 | |||
| 958 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 959 | '("#chan@barnet" "#chan@foonet"))))))) | ||
| 960 | |||
| 961 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-given | ||
| 962 | (check) | ||
| 963 | |||
| 964 | (with-current-buffer (get-buffer-create "oofnet") | ||
| 965 | (erc-mode) | ||
| 966 | (setq erc-network 'foonet | ||
| 967 | erc-server-current-nick "tester" | ||
| 968 | erc-networks--id (erc-networks--id-create 'oofnet) ; one given | ||
| 969 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 970 | |||
| 971 | (with-current-buffer (get-buffer-create "rabnet") | ||
| 972 | (erc-mode) | ||
| 973 | (setq erc-network 'barnet | ||
| 974 | erc-server-current-nick "tester" | ||
| 975 | erc-networks--id (erc-networks--id-create 'rabnet) ; another given | ||
| 976 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 977 | |||
| 978 | (with-current-buffer (get-buffer-create (elt ["chan" "#chan@oofnet"] | ||
| 979 | (random 2))) | ||
| 980 | (erc-mode) | ||
| 981 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 982 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 983 | (with-current-buffer "oofnet" | ||
| 984 | (list erc-server-process erc-networks--id)))) | ||
| 985 | |||
| 986 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 987 | (erc-mode) | ||
| 988 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 989 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 990 | (with-current-buffer "rabnet" | ||
| 991 | (list erc-server-process erc-networks--id)))) | ||
| 992 | |||
| 993 | (funcall check) | ||
| 994 | (erc-networks-tests--clean-bufs)) | ||
| 995 | |||
| 996 | (ert-deftest erc-networks--reconcile-buffer-names--multi-net-given () | ||
| 997 | (ert-info ("Same network rename") | ||
| 998 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-given | ||
| 999 | (lambda () | ||
| 1000 | (with-current-buffer "oofnet" | ||
| 1001 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1002 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 1003 | (should (string= result "#chan@oofnet")))) | ||
| 1004 | |||
| 1005 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 1006 | '("#chan@oofnet" "#chan@rabnet")))))) | ||
| 1007 | |||
| 1008 | (ert-info ("Same network keep name") | ||
| 1009 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-given | ||
| 1010 | (lambda () | ||
| 1011 | (with-current-buffer "rabnet" | ||
| 1012 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1013 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 1014 | (should (string= result "#chan@rabnet")))) | ||
| 1015 | |||
| 1016 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 1017 | '("#chan@oofnet" "#chan@rabnet"))))))) | ||
| 1018 | |||
| 1019 | (defun erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-mixed | ||
| 1020 | (check) | ||
| 1021 | |||
| 1022 | (with-current-buffer (get-buffer-create "foonet") | ||
| 1023 | (erc-mode) | ||
| 1024 | (setq erc-network 'foonet | ||
| 1025 | erc-server-current-nick "tester" | ||
| 1026 | erc-networks--id (erc-networks--id-create nil) ; one derived | ||
| 1027 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 1028 | |||
| 1029 | (with-current-buffer (get-buffer-create "my-conn") | ||
| 1030 | (erc-mode) | ||
| 1031 | (setq erc-network 'barnet | ||
| 1032 | erc-server-current-nick "tester" | ||
| 1033 | erc-networks--id (erc-networks--id-create 'my-conn) ; one given | ||
| 1034 | erc-server-process (erc-networks-tests--create-dead-proc))) | ||
| 1035 | |||
| 1036 | (with-current-buffer (get-buffer-create (elt ["#chan" "#chan@foonet"] | ||
| 1037 | (random 2))) | ||
| 1038 | (erc-mode) | ||
| 1039 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 1040 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 1041 | (with-current-buffer "foonet" | ||
| 1042 | (list erc-server-process erc-networks--id)))) | ||
| 1043 | |||
| 1044 | (with-current-buffer (get-buffer-create "#chan@my-conn") | ||
| 1045 | (erc-mode) | ||
| 1046 | (setq erc--target (erc--target-from-string "#chan")) | ||
| 1047 | (cl-multiple-value-setq (erc-server-process erc-networks--id) | ||
| 1048 | (with-current-buffer "my-conn" | ||
| 1049 | (list erc-server-process erc-networks--id)))) | ||
| 1050 | |||
| 1051 | (funcall check) | ||
| 1052 | (erc-networks-tests--clean-bufs)) | ||
| 1053 | |||
| 1054 | (ert-deftest erc-networks--reconcile-buffer-names--multi-net-existing () | ||
| 1055 | |||
| 1056 | (ert-info ("Buf name derived from network") | ||
| 1057 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-mixed | ||
| 1058 | (lambda () | ||
| 1059 | (with-current-buffer "foonet" | ||
| 1060 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1061 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 1062 | (should (string= result "#chan@foonet")))) | ||
| 1063 | |||
| 1064 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 1065 | '("#chan@foonet" "#chan@my-conn")))))) | ||
| 1066 | |||
| 1067 | (ert-info ("Buf name given") | ||
| 1068 | (erc-tests--prep-erc-networks--reconcile-buffer-names--multi-net-mixed | ||
| 1069 | (lambda () | ||
| 1070 | (with-current-buffer "my-conn" | ||
| 1071 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1072 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 1073 | (should (string= result "#chan@my-conn")))) | ||
| 1074 | |||
| 1075 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 1076 | '("#chan@foonet" "#chan@my-conn"))))))) | ||
| 1077 | |||
| 1078 | (ert-deftest erc-networks--reconcile-buffer-names--multi-net-suffixed () | ||
| 1079 | ;; Two networks, same channel. One network has two connections. | ||
| 1080 | ;; When the same channel is joined on the latter under a different | ||
| 1081 | ;; nick, all buffer names involving that network are suffixed with | ||
| 1082 | ;; the network identity. | ||
| 1083 | |||
| 1084 | (with-current-buffer (get-buffer-create "foonet/bob") | ||
| 1085 | (erc-mode) | ||
| 1086 | (setq erc-network 'foonet | ||
| 1087 | erc-server-current-nick "bob" | ||
| 1088 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 1089 | :symbol 'foonet/bob | ||
| 1090 | :parts [foonet "bob"] | ||
| 1091 | :len 2) | ||
| 1092 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 1093 | |||
| 1094 | (with-current-buffer (get-buffer-create | ||
| 1095 | (elt ["#chan@foonet" "#chan@foonet/bob"] (random 2))) | ||
| 1096 | (erc-mode) | ||
| 1097 | (setq erc--target (erc--target-from-string "#chan") | ||
| 1098 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 1099 | (get-buffer "foonet/bob")) | ||
| 1100 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 1101 | (get-buffer "foonet/bob")))) | ||
| 1102 | |||
| 1103 | (with-current-buffer (get-buffer-create "barnet") | ||
| 1104 | (erc-mode) | ||
| 1105 | (setq erc-network 'barnet | ||
| 1106 | erc-server-current-nick (elt ["alice" "bob"] (random 2)) | ||
| 1107 | erc-networks--id (erc-networks--id-create 'barnet) | ||
| 1108 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 1109 | |||
| 1110 | (with-current-buffer (get-buffer-create "#chan@barnet") | ||
| 1111 | (erc-mode) | ||
| 1112 | (setq erc--target (erc--target-from-string "#chan") | ||
| 1113 | erc-server-process (buffer-local-value 'erc-server-process | ||
| 1114 | (get-buffer "barnet")) | ||
| 1115 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 1116 | (get-buffer "barnet")))) | ||
| 1117 | |||
| 1118 | (with-current-buffer (get-buffer-create "foonet/alice") | ||
| 1119 | (erc-mode) | ||
| 1120 | (setq erc-network 'foonet | ||
| 1121 | erc-server-current-nick "alice" | ||
| 1122 | erc-networks--id (make-erc-networks--id-qualifying | ||
| 1123 | :symbol 'foonet/alice | ||
| 1124 | :parts [foonet "alice"] | ||
| 1125 | :len 2) | ||
| 1126 | erc-server-process (erc-networks-tests--create-live-proc))) | ||
| 1127 | |||
| 1128 | (with-current-buffer "foonet/alice" | ||
| 1129 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1130 | (erc--target-from-string "#chan") erc-networks--id))) | ||
| 1131 | (should (string= result "#chan@foonet/alice")))) | ||
| 1132 | |||
| 1133 | (should (equal (erc-networks-tests--bufnames "#chan") | ||
| 1134 | '("#chan@barnet" "#chan@foonet/bob"))) | ||
| 1135 | |||
| 1136 | (erc-networks-tests--clean-bufs)) | ||
| 1137 | |||
| 1138 | (ert-deftest erc-networks--reconcile-buffer-names--local () | ||
| 1139 | (with-current-buffer (get-buffer-create "DALnet") | ||
| 1140 | (erc-mode) | ||
| 1141 | (setq erc-network 'DALnet | ||
| 1142 | erc-server-announced-name "elysium.ga.us.dal.net" | ||
| 1143 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 1144 | erc--isupport-params (make-hash-table) | ||
| 1145 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1146 | (puthash 'CHANTYPES '("&#") erc--isupport-params)) | ||
| 1147 | |||
| 1148 | (ert-info ("Local chan buffer from older, disconnected identity") | ||
| 1149 | (with-current-buffer (get-buffer-create "&chan") | ||
| 1150 | (erc-mode) | ||
| 1151 | ;; Cheat here because localp is determined on identity init | ||
| 1152 | (setq erc--target (with-current-buffer "DALnet" | ||
| 1153 | (erc--target-from-string "&chan")) | ||
| 1154 | erc-network 'DALnet | ||
| 1155 | erc-server-announced-name "twisted.ma.us.dal.net" | ||
| 1156 | erc-server-process (erc-networks-tests--create-dead-proc) | ||
| 1157 | erc-networks--id (erc-networks--id-create nil)))) | ||
| 1158 | |||
| 1159 | (ert-info ("Local channels renamed using network server names") | ||
| 1160 | (with-current-buffer "DALnet" | ||
| 1161 | (let ((result (erc-networks--reconcile-buffer-names | ||
| 1162 | (erc--target-from-string "&chan") erc-networks--id))) | ||
| 1163 | (should (string= result "&chan@elysium.ga.us.dal.net"))))) | ||
| 1164 | |||
| 1165 | (should (get-buffer "&chan@twisted.ma.us.dal.net")) | ||
| 1166 | (should-not (get-buffer "&chan")) | ||
| 1167 | (erc-networks-tests--clean-bufs)) | ||
| 1168 | |||
| 1169 | (ert-deftest erc-networks--set-name () | ||
| 1170 | (with-current-buffer (get-buffer-create "localhost:6667") | ||
| 1171 | (let (erc-server-announced-name | ||
| 1172 | (erc--isupport-params (make-hash-table)) | ||
| 1173 | erc-network | ||
| 1174 | calls) | ||
| 1175 | (erc-mode) | ||
| 1176 | |||
| 1177 | (cl-letf (((symbol-function 'erc-display-line) | ||
| 1178 | (lambda (&rest r) (push r calls)))) | ||
| 1179 | |||
| 1180 | (ert-info ("Signals when `erc-server-announced-name' unset") | ||
| 1181 | (should-error (erc-networks--set-name nil (make-erc-response))) | ||
| 1182 | (should-not calls)) | ||
| 1183 | |||
| 1184 | (ert-info ("Signals when table empty and NETWORK param unset") | ||
| 1185 | (setq erc-server-announced-name "irc.fake.gnu.org") | ||
| 1186 | (let ((err (should-error (erc-networks--set-name | ||
| 1187 | nil (make-erc-response))))) | ||
| 1188 | (should (string-match-p "failed" (cadr err))) | ||
| 1189 | (should (eq (car err) 'error))) | ||
| 1190 | (should (string-match-p "*** Failed" (car (pop calls))))))) | ||
| 1191 | |||
| 1192 | (erc-networks-tests--clean-bufs))) | ||
| 1193 | |||
| 1194 | (ert-deftest erc-networks--ensure-announced () | ||
| 1195 | (with-current-buffer (get-buffer-create "localhost:6667") | ||
| 1196 | (should (local-variable-if-set-p 'erc-server-announced-name)) | ||
| 1197 | (let (erc-insert-modify-hook | ||
| 1198 | (erc-server-process (erc-networks-tests--create-live-proc)) | ||
| 1199 | (parsed (make-erc-response | ||
| 1200 | :unparsed ":irc.barnet.org 422 tester :MOTD File is missing" | ||
| 1201 | :sender "irc.barnet.org" | ||
| 1202 | :command "422" | ||
| 1203 | :command-args '("tester" "MOTD File is missing") | ||
| 1204 | :contents "MOTD File is missing"))) | ||
| 1205 | |||
| 1206 | (erc-mode) ; boilerplate displayable start (needs `erc-server-process') | ||
| 1207 | (insert "\n\n") | ||
| 1208 | (setq erc-input-marker (make-marker) erc-insert-marker (make-marker)) | ||
| 1209 | (set-marker erc-insert-marker (point-max)) | ||
| 1210 | (erc-display-prompt) ; boilerplate displayable end | ||
| 1211 | |||
| 1212 | (erc-networks--ensure-announced erc-server-process parsed) | ||
| 1213 | (goto-char (point-min)) | ||
| 1214 | (search-forward "Failed") | ||
| 1215 | (should (string= erc-server-announced-name "irc.barnet.org"))) | ||
| 1216 | (when noninteractive (kill-buffer)))) | ||
| 1217 | |||
| 1218 | (ert-deftest erc-networks--rename-server-buffer--no-existing--orphan () | ||
| 1219 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1220 | (erc-mode) | ||
| 1221 | (setq erc-network 'FooNet | ||
| 1222 | erc-server-current-nick "tester" | ||
| 1223 | erc--target (erc--target-from-string "#chan") | ||
| 1224 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1225 | |||
| 1226 | (with-current-buffer (get-buffer-create "irc.foonet.org") | ||
| 1227 | (erc-mode) | ||
| 1228 | (setq erc-network 'FooNet | ||
| 1229 | erc-server-current-nick "tester" | ||
| 1230 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1231 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1232 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1233 | (should (string= (buffer-name) "FooNet"))) | ||
| 1234 | |||
| 1235 | (ert-info ("Channel buffer reassociated") | ||
| 1236 | (erc-server-process-alive "#chan") | ||
| 1237 | (with-current-buffer "#chan" | ||
| 1238 | (should erc-server-connected) | ||
| 1239 | (erc-with-server-buffer | ||
| 1240 | (should (string= (buffer-name) "FooNet"))))) | ||
| 1241 | |||
| 1242 | (erc-networks-tests--clean-bufs)) | ||
| 1243 | |||
| 1244 | (ert-deftest erc-networks--rename-server-buffer--existing--reuse () | ||
| 1245 | (let* ((old-buf (get-buffer-create "FooNet")) | ||
| 1246 | (old-proc (erc-networks-tests--create-dead-proc old-buf))) | ||
| 1247 | |||
| 1248 | (with-current-buffer old-buf | ||
| 1249 | (erc-mode) | ||
| 1250 | (insert "*** Old buf") | ||
| 1251 | (setq erc-network 'FooNet | ||
| 1252 | erc-server-current-nick "tester" | ||
| 1253 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1254 | erc-server-process old-proc | ||
| 1255 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1256 | |||
| 1257 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1258 | (erc-mode) | ||
| 1259 | (setq erc-network 'FooNet | ||
| 1260 | erc-server-process old-proc | ||
| 1261 | erc-networks--id (erc-networks--id-create nil) | ||
| 1262 | erc--target (erc--target-from-string "#chan"))) | ||
| 1263 | |||
| 1264 | (ert-info ("New buffer steals name, content") | ||
| 1265 | (with-current-buffer (get-buffer-create "irc.foonet.org") | ||
| 1266 | (erc-mode) | ||
| 1267 | (setq erc-network 'FooNet | ||
| 1268 | erc-server-current-nick "tester" | ||
| 1269 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1270 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1271 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1272 | (should (string= (buffer-name) "FooNet")) | ||
| 1273 | (goto-char (point-min)) | ||
| 1274 | (should (search-forward "Old buf")))) | ||
| 1275 | |||
| 1276 | (ert-info ("Channel buffer reassociated") | ||
| 1277 | (erc-server-process-alive "#chan") | ||
| 1278 | (with-current-buffer "#chan" | ||
| 1279 | (should erc-server-connected) | ||
| 1280 | (should-not (eq erc-server-process old-proc)) | ||
| 1281 | (erc-with-server-buffer | ||
| 1282 | (should (string= (buffer-name) "FooNet"))))) | ||
| 1283 | |||
| 1284 | (ert-info ("Original buffer killed off") | ||
| 1285 | (should-not (buffer-live-p old-buf)))) | ||
| 1286 | |||
| 1287 | (erc-networks-tests--clean-bufs)) | ||
| 1288 | |||
| 1289 | ;; This is for compatibility with pre-28.1 behavior. Basically, we're | ||
| 1290 | ;; trying to match the behavior bug for bug. All buffers were always | ||
| 1291 | ;; suffixed and never reassociated. 28.1 introduced a regression that | ||
| 1292 | ;; reversed the latter, but we've reverted that. | ||
| 1293 | |||
| 1294 | (ert-deftest erc-networks--rename-server-buffer--existing--noreuse () | ||
| 1295 | (with-suppressed-warnings ((obsolete erc-reuse-buffers)) | ||
| 1296 | (should erc-reuse-buffers) ; default | ||
| 1297 | (let* ((old-buf (get-buffer-create "irc.foonet.org:6697/irc.foonet.org")) | ||
| 1298 | (old-proc (erc-networks-tests--create-dead-proc old-buf)) | ||
| 1299 | erc-reuse-buffers) | ||
| 1300 | (with-current-buffer old-buf | ||
| 1301 | (erc-mode) | ||
| 1302 | (insert "*** Old buf") | ||
| 1303 | (setq erc-network 'FooNet | ||
| 1304 | erc-server-current-nick "tester" | ||
| 1305 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1306 | erc-server-process old-proc | ||
| 1307 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1308 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1309 | (erc-mode) | ||
| 1310 | (setq erc-network 'FooNet | ||
| 1311 | erc-server-process old-proc | ||
| 1312 | erc-networks--id (buffer-local-value 'erc-networks--id old-buf) | ||
| 1313 | erc--target (erc--target-from-string "#chan")) | ||
| 1314 | (rename-buffer (erc-networks--construct-target-buffer-name erc--target))) | ||
| 1315 | |||
| 1316 | (ert-info ("Server buffer uniquely renamed") | ||
| 1317 | (with-current-buffer | ||
| 1318 | (get-buffer-create "irc.foonet.org:6697/irc.foonet.org<2>") | ||
| 1319 | (erc-mode) | ||
| 1320 | (setq erc-network 'FooNet | ||
| 1321 | erc-server-current-nick "tester" | ||
| 1322 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1323 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1324 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1325 | (should (string= (buffer-name) | ||
| 1326 | "irc.foonet.org:6697/irc.foonet.org<2>")) | ||
| 1327 | (goto-char (point-min)) | ||
| 1328 | (should-not (search-forward "Old buf" nil t)))) | ||
| 1329 | |||
| 1330 | (ert-info ("Channel buffer not reassociated") | ||
| 1331 | (should-not | ||
| 1332 | (erc-server-process-alive | ||
| 1333 | (should (get-buffer "#chan/irc.foonet.org")))) | ||
| 1334 | (with-current-buffer (get-buffer "#chan/irc.foonet.org") | ||
| 1335 | (should-not erc-server-connected) | ||
| 1336 | (should (eq erc-server-process old-proc)) | ||
| 1337 | (erc-with-server-buffer | ||
| 1338 | (should (string= (buffer-name) | ||
| 1339 | "irc.foonet.org:6697/irc.foonet.org"))))) | ||
| 1340 | |||
| 1341 | (ert-info ("Old buffer still around") | ||
| 1342 | (should (buffer-live-p old-buf))))) | ||
| 1343 | (erc-networks-tests--clean-bufs)) | ||
| 1344 | |||
| 1345 | (ert-deftest erc-networks--rename-server-buffer--reconnecting () | ||
| 1346 | (let* ((old-buf (get-buffer-create "FooNet")) | ||
| 1347 | (old-proc (erc-networks-tests--create-dead-proc old-buf))) | ||
| 1348 | |||
| 1349 | (with-current-buffer old-buf | ||
| 1350 | (erc-mode) | ||
| 1351 | (insert "*** Old buf") | ||
| 1352 | (setq erc-network 'FooNet | ||
| 1353 | erc-server-current-nick "tester" | ||
| 1354 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1355 | erc-server-process old-proc | ||
| 1356 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1357 | |||
| 1358 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1359 | (erc-mode) | ||
| 1360 | (setq erc-network 'FooNet | ||
| 1361 | erc-server-process old-proc | ||
| 1362 | erc--target (erc--target-from-string "#chan") | ||
| 1363 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1364 | |||
| 1365 | (ert-info ("No new buffer") | ||
| 1366 | (with-current-buffer old-buf | ||
| 1367 | (setq erc-server-process (erc-networks-tests--create-live-proc)) | ||
| 1368 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1369 | (should (string= (buffer-name) "FooNet")) | ||
| 1370 | (goto-char (point-min)) | ||
| 1371 | (should (search-forward "Old buf")))) | ||
| 1372 | |||
| 1373 | (ert-info ("Channel buffer updated with live proc") | ||
| 1374 | (erc-server-process-alive "#chan") | ||
| 1375 | (with-current-buffer "#chan" | ||
| 1376 | (should erc-server-connected) | ||
| 1377 | (should-not (eq erc-server-process old-proc)) | ||
| 1378 | (erc-with-server-buffer | ||
| 1379 | (should (string= (buffer-name) "FooNet")))))) | ||
| 1380 | |||
| 1381 | (erc-networks-tests--clean-bufs)) | ||
| 1382 | |||
| 1383 | (ert-deftest erc-networks--rename-server-buffer--id () | ||
| 1384 | (let* ((old-buf (get-buffer-create "MySession")) | ||
| 1385 | (old-proc (erc-networks-tests--create-dead-proc old-buf))) | ||
| 1386 | |||
| 1387 | (with-current-buffer old-buf | ||
| 1388 | (erc-mode) | ||
| 1389 | (insert "*** Old buf") | ||
| 1390 | (setq erc-network 'FooNet | ||
| 1391 | erc-networks--id (erc-networks--id-create 'MySession) | ||
| 1392 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1393 | erc-server-process old-proc)) | ||
| 1394 | |||
| 1395 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1396 | (erc-mode) | ||
| 1397 | (setq erc-network 'FooNet | ||
| 1398 | erc-networks--id (erc-networks--id-create 'MySession) | ||
| 1399 | erc-server-process old-proc | ||
| 1400 | erc--target (erc--target-from-string "#chan"))) | ||
| 1401 | |||
| 1402 | (ert-info ("No new buffer") | ||
| 1403 | (with-current-buffer old-buf | ||
| 1404 | (setq erc-server-process (erc-networks-tests--create-live-proc)) | ||
| 1405 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1406 | (should (string= (buffer-name) "MySession")) | ||
| 1407 | (goto-char (point-min)) | ||
| 1408 | (should (search-forward "Old buf")))) | ||
| 1409 | |||
| 1410 | (ert-info ("Channel buffer updated with live proc") | ||
| 1411 | (erc-server-process-alive "#chan") | ||
| 1412 | (with-current-buffer "#chan" | ||
| 1413 | (should erc-server-connected) | ||
| 1414 | (should-not (eq erc-server-process old-proc)) | ||
| 1415 | (erc-with-server-buffer | ||
| 1416 | (should (string= (buffer-name) "MySession")))))) | ||
| 1417 | |||
| 1418 | (erc-networks-tests--clean-bufs)) | ||
| 1419 | |||
| 1420 | (ert-deftest erc-networks--rename-server-buffer--existing--live () | ||
| 1421 | (let* (erc-kill-server-hook | ||
| 1422 | erc-insert-modify-hook | ||
| 1423 | (old-buf (get-buffer-create "FooNet")) | ||
| 1424 | (old-proc (erc-networks-tests--create-live-proc old-buf))) ; live | ||
| 1425 | |||
| 1426 | (with-current-buffer old-buf | ||
| 1427 | (erc-mode) | ||
| 1428 | (insert "*** Old buf") | ||
| 1429 | (setq erc-network 'FooNet | ||
| 1430 | erc-server-current-nick "tester" | ||
| 1431 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1432 | erc-server-process old-proc | ||
| 1433 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1434 | (should (erc-server-process-alive))) | ||
| 1435 | |||
| 1436 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1437 | (erc-mode) | ||
| 1438 | (setq erc-network 'FooNet | ||
| 1439 | erc-server-process old-proc | ||
| 1440 | erc-networks--id (erc-networks--id-create nil) | ||
| 1441 | erc-server-connected t | ||
| 1442 | erc--target (erc--target-from-string "#chan"))) | ||
| 1443 | |||
| 1444 | (ert-info ("New buffer rejected, abandoned, not killed") | ||
| 1445 | (with-current-buffer (get-buffer-create "irc.foonet.org") | ||
| 1446 | (erc-mode) | ||
| 1447 | (setq erc-network 'FooNet | ||
| 1448 | erc-server-current-nick "tester" | ||
| 1449 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1450 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1451 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1452 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1453 | (should (eq erc-active-buffer old-buf)) | ||
| 1454 | (should-not (erc-server-process-alive)) | ||
| 1455 | (should (string= (buffer-name) "irc.foonet.org")) | ||
| 1456 | (goto-char (point-min)) | ||
| 1457 | (search-forward "still connected"))) | ||
| 1458 | |||
| 1459 | (ert-info ("Channel buffer updated with live proc") | ||
| 1460 | (should (erc-server-process-alive "#chan")) | ||
| 1461 | (with-current-buffer "#chan" | ||
| 1462 | (should erc-server-connected) | ||
| 1463 | (should (erc-server-buffer-live-p)) | ||
| 1464 | (should (eq erc-server-process old-proc)) | ||
| 1465 | (should (buffer-live-p (process-buffer erc-server-process))) | ||
| 1466 | (with-current-buffer (process-buffer erc-server-process) | ||
| 1467 | (should (eq (current-buffer) (get-buffer "FooNet"))) | ||
| 1468 | (should (eq (current-buffer) old-buf)))))) | ||
| 1469 | |||
| 1470 | (should (get-buffer "FooNet")) | ||
| 1471 | (should (get-buffer "irc.foonet.org")) | ||
| 1472 | |||
| 1473 | (erc-networks-tests--clean-bufs)) | ||
| 1474 | |||
| 1475 | (ert-deftest erc-networks--rename-server-buffer--local-match () | ||
| 1476 | (let* ((old-buf (get-buffer-create "FooNet")) | ||
| 1477 | (old-proc (erc-networks-tests--create-dead-proc old-buf))) | ||
| 1478 | |||
| 1479 | (with-current-buffer old-buf | ||
| 1480 | (erc-mode) | ||
| 1481 | (insert "*** Old buf") | ||
| 1482 | (setq erc-network 'FooNet | ||
| 1483 | erc-server-current-nick "tester" | ||
| 1484 | erc-server-announced-name "us-east.foonet.org" | ||
| 1485 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1486 | erc-server-process old-proc | ||
| 1487 | erc--isupport-params (make-hash-table) | ||
| 1488 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1489 | (puthash 'CHANTYPES '("&#") erc--isupport-params)) | ||
| 1490 | |||
| 1491 | (with-current-buffer (get-buffer-create "&chan") | ||
| 1492 | (erc-mode) | ||
| 1493 | (setq erc-network 'FooNet | ||
| 1494 | erc-server-process old-proc | ||
| 1495 | erc-server-announced-name "us-east.foonet.org" | ||
| 1496 | erc--target (erc--target-from-string "&chan") | ||
| 1497 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1498 | |||
| 1499 | (ert-info ("New server buffer steals name, content") | ||
| 1500 | (with-current-buffer (get-buffer-create "irc.foonet.org") | ||
| 1501 | (erc-mode) | ||
| 1502 | (setq erc-network 'FooNet | ||
| 1503 | erc-server-current-nick "tester" | ||
| 1504 | erc-server-announced-name "us-east.foonet.org" | ||
| 1505 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1506 | erc--isupport-params (make-hash-table) | ||
| 1507 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1508 | (puthash 'CHANTYPES '("&#") erc--isupport-params) | ||
| 1509 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1510 | (should (string= (buffer-name) "FooNet")) | ||
| 1511 | (goto-char (point-min)) | ||
| 1512 | (should (search-forward "Old buf")))) | ||
| 1513 | |||
| 1514 | (ert-info ("Channel buffer reassociated when &local server matches") | ||
| 1515 | (should (erc-server-process-alive "&chan")) | ||
| 1516 | (with-current-buffer "&chan" | ||
| 1517 | (should erc-server-connected) | ||
| 1518 | (should-not (eq erc-server-process old-proc)) | ||
| 1519 | (erc-with-server-buffer | ||
| 1520 | (should (string= (buffer-name) "FooNet"))))) | ||
| 1521 | |||
| 1522 | (ert-info ("Original buffer killed off") | ||
| 1523 | (should-not (buffer-live-p old-buf))) | ||
| 1524 | |||
| 1525 | (erc-networks-tests--clean-bufs))) | ||
| 1526 | |||
| 1527 | (ert-deftest erc-networks--rename-server-buffer--local-nomatch () | ||
| 1528 | (let* ((old-buf (get-buffer-create "FooNet")) | ||
| 1529 | (old-proc (erc-networks-tests--create-dead-proc old-buf))) | ||
| 1530 | |||
| 1531 | (with-current-buffer old-buf | ||
| 1532 | (erc-mode) | ||
| 1533 | (insert "*** Old buf") | ||
| 1534 | (setq erc-network 'FooNet | ||
| 1535 | erc-server-current-nick "tester" | ||
| 1536 | erc-server-announced-name "us-west.foonet.org" | ||
| 1537 | erc-insert-marker (set-marker (make-marker) (point-max)) | ||
| 1538 | erc-server-process old-proc | ||
| 1539 | erc--isupport-params (make-hash-table) | ||
| 1540 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1541 | (puthash 'CHANTYPES '("&#") erc--isupport-params)) | ||
| 1542 | |||
| 1543 | (with-current-buffer (get-buffer-create "&chan") | ||
| 1544 | (erc-mode) | ||
| 1545 | (setq erc-network 'FooNet | ||
| 1546 | erc-server-process old-proc | ||
| 1547 | erc-server-announced-name "us-west.foonet.org" ; west | ||
| 1548 | erc--target (erc--target-from-string "&chan") | ||
| 1549 | erc-networks--id (erc-networks--id-create nil))) | ||
| 1550 | |||
| 1551 | (ert-info ("New server buffer steals name, content") | ||
| 1552 | (with-current-buffer (get-buffer-create "irc.foonet.org") | ||
| 1553 | (erc-mode) | ||
| 1554 | (setq erc-network 'FooNet | ||
| 1555 | erc-server-current-nick "tester" | ||
| 1556 | erc-server-announced-name "us-east.foonet.org" ; east | ||
| 1557 | erc-server-process (erc-networks-tests--create-live-proc) | ||
| 1558 | erc--isupport-params (make-hash-table) | ||
| 1559 | erc-networks--id (erc-networks--id-create nil)) | ||
| 1560 | |||
| 1561 | (puthash 'CHANTYPES '("&#") erc--isupport-params) | ||
| 1562 | (should-not (erc-networks--rename-server-buffer erc-server-process)) | ||
| 1563 | (should (string= (buffer-name) "FooNet")) | ||
| 1564 | (goto-char (point-min)) | ||
| 1565 | (should (search-forward "Old buf")))) | ||
| 1566 | |||
| 1567 | (ert-info ("Channel buffer now orphaned even though network matches") | ||
| 1568 | (should-not (erc-server-process-alive "&chan")) | ||
| 1569 | (with-current-buffer "&chan" | ||
| 1570 | (should-not erc-server-connected) | ||
| 1571 | (should (eq erc-server-process old-proc)) | ||
| 1572 | (erc-with-server-buffer | ||
| 1573 | (should (string= (buffer-name) "FooNet"))))) | ||
| 1574 | |||
| 1575 | (ert-info ("Original buffer killed off") | ||
| 1576 | (should-not (buffer-live-p old-buf))) | ||
| 1577 | |||
| 1578 | (erc-networks-tests--clean-bufs))) | ||
| 1579 | |||
| 1580 | (ert-deftest erc-networks--update-server-identity--double-existing () | ||
| 1581 | (with-temp-buffer | ||
| 1582 | (erc-mode) | ||
| 1583 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 1584 | :parts [foonet "bob"] :len 1)) | ||
| 1585 | |||
| 1586 | (with-current-buffer (get-buffer-create "#chan@foonet/bob") | ||
| 1587 | (erc-mode) | ||
| 1588 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 1589 | :parts [foonet "bob"] :len 2))) | ||
| 1590 | (with-current-buffer (get-buffer-create "foonet/alice") | ||
| 1591 | (erc-mode) | ||
| 1592 | (setq erc-networks--id | ||
| 1593 | (make-erc-networks--id-qualifying :parts [foonet "alice"] :len 2))) | ||
| 1594 | |||
| 1595 | (ert-info ("Adopt equivalent identity") | ||
| 1596 | (should (eq (erc-networks--update-server-identity) | ||
| 1597 | (buffer-local-value 'erc-networks--id | ||
| 1598 | (get-buffer "#chan@foonet/bob"))))) | ||
| 1599 | |||
| 1600 | (ert-info ("Ignore non-matches") | ||
| 1601 | (should-not (erc-networks--update-server-identity)) | ||
| 1602 | (should (eq erc-networks--id | ||
| 1603 | (buffer-local-value 'erc-networks--id | ||
| 1604 | (get-buffer "#chan@foonet/bob")))))) | ||
| 1605 | |||
| 1606 | (erc-networks-tests--clean-bufs)) | ||
| 1607 | |||
| 1608 | (ert-deftest erc-networks--update-server-identity--double-new () | ||
| 1609 | (with-temp-buffer | ||
| 1610 | (erc-mode) | ||
| 1611 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 1612 | :parts [foonet "bob"] :len 1)) | ||
| 1613 | |||
| 1614 | (with-current-buffer (get-buffer-create "foonet/alice") | ||
| 1615 | (erc-mode) | ||
| 1616 | (setq erc-networks--id | ||
| 1617 | (make-erc-networks--id-qualifying :parts [foonet "alice"] :len 2))) | ||
| 1618 | (with-current-buffer (get-buffer-create "#chan@foonet/alice") | ||
| 1619 | (erc-mode) | ||
| 1620 | (setq erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 1621 | (get-buffer "foonet/alice")))) | ||
| 1622 | |||
| 1623 | (ert-info ("Evolve identity to prevent ambiguity") | ||
| 1624 | (should-not (erc-networks--update-server-identity)) | ||
| 1625 | (should (= (erc-networks--id-qualifying-len erc-networks--id) 2)) | ||
| 1626 | (should (eq (erc-networks--id-symbol erc-networks--id) 'foonet/bob)))) | ||
| 1627 | |||
| 1628 | (erc-networks-tests--clean-bufs)) | ||
| 1629 | |||
| 1630 | (ert-deftest erc-networks--update-server-identity--double-bounded () | ||
| 1631 | (with-temp-buffer | ||
| 1632 | (erc-mode) | ||
| 1633 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 1634 | :parts [foonet "bob"] :len 1)) | ||
| 1635 | |||
| 1636 | (with-current-buffer (get-buffer-create "foonet/alice/home") | ||
| 1637 | (erc-mode) | ||
| 1638 | (setq erc-networks--id (make-erc-networks--id-qualifying | ||
| 1639 | :parts [foonet "alice" home] :len 3))) | ||
| 1640 | (with-current-buffer (get-buffer-create "#chan@foonet/alice/home") | ||
| 1641 | (erc-mode) | ||
| 1642 | (setq erc-networks--id | ||
| 1643 | (buffer-local-value 'erc-networks--id | ||
| 1644 | (get-buffer "foonet/alice/home")))) | ||
| 1645 | |||
| 1646 | (ert-info ("Evolve identity to prevent ambiguity") | ||
| 1647 | (should-not (erc-networks--update-server-identity)) | ||
| 1648 | (should (= (erc-networks--id-qualifying-len erc-networks--id) 2)) | ||
| 1649 | (should (eq (erc-networks--id-symbol erc-networks--id) 'foonet/bob)))) | ||
| 1650 | |||
| 1651 | (erc-networks-tests--clean-bufs)) | ||
| 1652 | |||
| 1653 | (ert-deftest erc-networks--update-server-identity--double-even () | ||
| 1654 | (with-temp-buffer | ||
| 1655 | (erc-mode) | ||
| 1656 | (setq erc-networks--id | ||
| 1657 | (make-erc-networks--id-qualifying :parts [foonet "bob"] :len 1)) | ||
| 1658 | |||
| 1659 | (with-current-buffer (get-buffer-create "foonet") | ||
| 1660 | (erc-mode) | ||
| 1661 | (setq erc-networks--id | ||
| 1662 | (make-erc-networks--id-qualifying :parts [foonet "alice"] :len 1))) | ||
| 1663 | (with-current-buffer (get-buffer-create "#chan") | ||
| 1664 | (erc-mode) | ||
| 1665 | (setq erc--target (erc--target-from-string "#chan") | ||
| 1666 | erc-networks--id (buffer-local-value 'erc-networks--id | ||
| 1667 | (get-buffer "foonet")))) | ||
| 1668 | |||
| 1669 | (ert-info ("Evolve identity to prevent ambiguity") | ||
| 1670 | (should-not (erc-networks--update-server-identity)) | ||
| 1671 | (should (= (erc-networks--id-qualifying-len erc-networks--id) 2)) | ||
| 1672 | (should (eq (erc-networks--id-symbol erc-networks--id) 'foonet/bob))) | ||
| 1673 | |||
| 1674 | (ert-info ("Collision renamed") | ||
| 1675 | (with-current-buffer "foonet/alice" | ||
| 1676 | (should (eq (erc-networks--id-symbol erc-networks--id) 'foonet/alice))) | ||
| 1677 | |||
| 1678 | (with-current-buffer "#chan@foonet/alice" | ||
| 1679 | (should (eq (erc-networks--id-symbol erc-networks--id) | ||
| 1680 | 'foonet/alice))))) | ||
| 1681 | |||
| 1682 | (erc-networks-tests--clean-bufs)) | ||
| 1683 | |||
| 1684 | (ert-deftest erc-networks--update-server-identity--triple-new () | ||
| 1685 | (with-temp-buffer | ||
| 1686 | (erc-mode) | ||
| 1687 | (setq erc-networks--id | ||
| 1688 | (make-erc-networks--id-qualifying :parts [foonet "bob" home] :len 1)) | ||
| 1689 | |||
| 1690 | (with-current-buffer (get-buffer-create "foonet/bob/office") | ||
| 1691 | (erc-mode) | ||
| 1692 | (setq erc-networks--id | ||
| 1693 | (make-erc-networks--id-qualifying :parts [foonet "bob" office] | ||
| 1694 | :len 3))) | ||
| 1695 | (with-current-buffer (get-buffer-create "#chan@foonet/bob/office") | ||
| 1696 | (erc-mode) | ||
| 1697 | (setq erc-networks--id | ||
| 1698 | (buffer-local-value 'erc-networks--id | ||
| 1699 | (get-buffer "foonet/bob/office")))) | ||
| 1700 | |||
| 1701 | (ert-info ("Extend our identity's canonical ID so that it's unique") | ||
| 1702 | (should-not (erc-networks--update-server-identity)) | ||
| 1703 | (should (= (erc-networks--id-qualifying-len erc-networks--id) 3)))) | ||
| 1704 | |||
| 1705 | (erc-networks-tests--clean-bufs)) | ||
| 1706 | |||
| 1707 | ;;; erc-networks-tests.el ends here | ||
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el index 5b04bff617b..618d7eeea02 100644 --- a/test/lisp/erc/erc-tests.el +++ b/test/lisp/erc/erc-tests.el | |||
| @@ -566,8 +566,9 @@ | |||
| 566 | (erc-log-irc-protocol ":irc.gnu.org 001 tester :Welcome") | 566 | (erc-log-irc-protocol ":irc.gnu.org 001 tester :Welcome") |
| 567 | (erc-log-irc-protocol ":irc.gnu.org 002 tester :Your host is irc.gnu.org") | 567 | (erc-log-irc-protocol ":irc.gnu.org 002 tester :Your host is irc.gnu.org") |
| 568 | (setq erc-network 'FooNet) | 568 | (setq erc-network 'FooNet) |
| 569 | (setq erc-networks--id (erc-networks--id-create nil)) | ||
| 569 | (erc-log-irc-protocol ":irc.gnu.org 422 tester :MOTD missing") | 570 | (erc-log-irc-protocol ":irc.gnu.org 422 tester :MOTD missing") |
| 570 | (setq erc-network 'BarNet) | 571 | (setq erc-networks--id (erc-networks--id-create 'BarNet)) |
| 571 | (erc-log-irc-protocol ":irc.gnu.org 221 tester +i") | 572 | (erc-log-irc-protocol ":irc.gnu.org 221 tester +i") |
| 572 | (set-process-query-on-exit-flag erc-server-process nil))) | 573 | (set-process-query-on-exit-flag erc-server-process nil))) |
| 573 | (with-current-buffer "*erc-protocol*" | 574 | (with-current-buffer "*erc-protocol*" |