aboutsummaryrefslogtreecommitdiff
path: root/tests/test-undead-buffers--save-some-buffers-override-no-conflict.el
blob: c0dca6e0a77ba8744d223031be5b024fbf5f4d84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
;;; test-undead-buffers--save-some-buffers-override-no-conflict.el --- Regression: save override vs undead -*- lexical-binding: t; -*-

;;; Commentary:
;; Regression guard for a launch crash.  custom-buffer-file.el installs a
;; legible `save-some-buffers' override named `cj/save-some-buffers' (arity
;; arg + pred).  undead-buffers.el used to define its own 1-arg
;; `cj/save-some-buffers' that called `save-some-buffers' internally.  In prod
;; load order (custom-buffer-file before undead-buffers) the 1-arg version won
;; the symbol, so the override re-entered it with two args and signalled
;; wrong-number-of-arguments — crashing the kill-all-other-buffers startup path.
;;
;; The requires below reproduce that prod order on purpose.

;;; Code:

(require 'ert)
;; Prod order: override installed first, undead-buffers loaded second.
(require 'custom-buffer-file)
(require 'undead-buffers)

(ert-deftest test-undead-buffers-save-override-accepts-predicate ()
  "Normal: calling `save-some-buffers' with the undead predicate (the
kill-all-other-buffers path) goes through the legible override without a
wrong-number-of-arguments crash.  No modified file buffers exist in batch, so
the override returns a count rather than prompting."
  (should (numberp (save-some-buffers nil #'cj/undead-buffer-p))))

(ert-deftest test-undead-buffers-save-some-buffers-not-arity-shadowed ()
  "Boundary: `cj/save-some-buffers' must accept the PRED argument the override
forwards (max arity >= 2), so undead-buffers can't reintroduce a 1-arg shadow."
  (should (>= (cdr (func-arity #'cj/save-some-buffers)) 2)))

(provide 'test-undead-buffers--save-some-buffers-override-no-conflict)
;;; test-undead-buffers--save-some-buffers-override-no-conflict.el ends here