aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorConstantine Vetoshev <vetoshev@gmail.com>2026-04-02 22:38:16 -0700
committerConstantine Vetoshev <vetoshev@gmail.com>2026-04-02 22:38:16 -0700
commit230cabf4c1406569bac416cff9502ae23648e3f8 (patch)
tree259fe4d91e151d3dc0610d9b9dfa775184d74195 /test
parent1271ac579798fe65ba2246a72a44efb1eeeba2ec (diff)
Avoid recursive persp-delete-frame cleanup on frame deletion.HEADmaster
Diffstat (limited to 'test')
-rw-r--r--test/test-perspective.el21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/test-perspective.el b/test/test-perspective.el
index c4f1331..31f3272 100644
--- a/test/test-perspective.el
+++ b/test/test-perspective.el
@@ -2427,4 +2427,25 @@ persp-test-make-sample-environment."
(sort (persp-get-buffer-names "C") #'string-lessp))))))))
(persp-test-clean-files "A1" "A2" "B1" "B2" "C1" "C2"))))
+(ert-deftest basic-persp-delete-frame-ignores-reentrant-calls ()
+ "Test that `persp-delete-frame' ignores nested reentrant calls."
+ (persp-test-with-persp
+ (persp-switch "A")
+ (persp-switch "B")
+ (let ((expected-names (sort (copy-sequence (persp-names)) #'string-lessp))
+ killed-names
+ reentered)
+ (cl-letf (((symbol-function 'persp-kill)
+ (lambda (name)
+ (push name killed-names)
+ ;; Simulate a nested `delete-frame' triggered while
+ ;; perspective cleanup is already in progress.
+ (unless reentered
+ (setq reentered t)
+ (persp-delete-frame (selected-frame))))))
+ (persp-delete-frame (selected-frame)))
+ (should reentered)
+ (should (equal expected-names
+ (sort killed-names #'string-lessp))))))
+
;;; test-perspective.el ends here