From 6aa369c1ea7694b1dd5a4e1d9cb5f64564e04234 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 10 Jul 2021 04:11:28 +0000 Subject: basic-persp-creation-deletion: test killing all perspectives Test 'persp-current-name' and also killing the main perspective. When killing the main perspective, preserve the *ert* buffer when the tests are run interactively, and always preserve *Messages*, because it's an ert's requirement for properly executing tests. --- CHANGELOG.md | 1 + test/test-perspective.el | 51 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95f530d..71dbab9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### ERT tests changed +- `basic-persp-creation-deletion`: test killing all perspectives, main perspective included. - `persp-test-with-persp`: `unwind-protect` BODY to ensure a proper cleanup upon failures. - `persp-test-with-persp`: kill other perspectives than the main perspective when cleaning up. diff --git a/test/test-perspective.el b/test/test-perspective.el index 16feb5f..28798a0 100644 --- a/test/test-perspective.el +++ b/test/test-perspective.el @@ -639,16 +639,59 @@ local value of it is a mistake." (kill-buffer "*dummy*"))) (ert-deftest basic-persp-creation-deletion () + "Switching to a non-existing perspective should create the new +perspective. Switching to an existing perspective should not +duplicate the perspective. Creating a new perspective should +not automatically switch to the perspective." (persp-test-with-persp - (should (equal (list "main") (persp-names))) + (should (equal (persp-current-name) "main")) + (should (equal (list "main") (sort (persp-names) #'string-lessp))) + ;; test if switching to a non-existing perspective also creates it (persp-switch "A") + (should (equal (persp-current-name) "A")) (should (equal (list "A" "main") (sort (persp-names) #'string-lessp))) + ;; test if creating a new perspective switches to it automatically + (persp-new "B") + (should (equal (persp-current-name) "A")) + (should (equal (list "A" "B" "main") (sort (persp-names) #'string-lessp))) + ;; test if switching to an existing perspective duplicates it (persp-switch "B") + (should (equal (persp-current-name) "B")) (should (equal (list "A" "B" "main") (sort (persp-names) #'string-lessp))) - (persp-kill "A") + (persp-switch "A") + (should (equal (persp-current-name) "A")) + (should (equal (list "A" "B" "main") (sort (persp-names) #'string-lessp))) + ;; kill the current perspective to see where we land + (persp-kill (persp-current-name)) + (should (equal (persp-current-name) "B")) (should (equal (list "B" "main") (sort (persp-names) #'string-lessp))) - (persp-kill "B") - (should (equal (list "main") (persp-names))))) + (persp-kill (persp-current-name)) + (should (equal (persp-current-name) "main")) + (should (equal (list "main") (sort (persp-names) #'string-lessp))) + ;; sanity checks before killing the main perspective + (should (get-buffer "*Messages*")) + (should (get-buffer-create "*scratch*")) + (persp-set-buffer (get-buffer "*scratch*")) + (let ((ert-buffer (get-buffer "*ert*")) + (msg-buffer (get-buffer "*Messages*"))) + ;; interactively run ert requires the *ert* buffer + (setf (persp-current-buffers) (remq ert-buffer (persp-current-buffers))) + ;; the *Messages* buffer is also ert's requiremet + (setf (persp-current-buffers) (remq msg-buffer (persp-current-buffers))) + ;; *scratch* is in main, not *ert* and *Messages* + (should (persp-test-buffer-in-persps "*scratch*" "main")) + (should-not (persp-test-buffer-in-persps ert-buffer "main")) + (should-not (persp-test-buffer-in-persps msg-buffer "main")) + ;; kill the main perspective except above buffers + (persp-kill (persp-current-name)) + ;; the *scratch* buffer should have been killed + (should-not (get-buffer "*scratch*")) + ;; *ert* is needed by interactively run tests + (should (eq ert-buffer (get-buffer "*ert*"))) + ;; the *Messages* buffer is needed by ert + (should (eq msg-buffer (get-buffer "*Messages*"))))) + ;; cleanup + (should (get-buffer-create "*scratch*"))) (ert-deftest basic-persp-switching () (persp-test-with-persp -- cgit v1.0