124 lines
4.6 KiB
EmacsLisp
124 lines
4.6 KiB
EmacsLisp
;; -*- no-byte-compile: t; -*-
|
|
;;; ui/workspaces/test/test-workspaces.el
|
|
|
|
(describe "ui/workspaces"
|
|
:var (persp-auto-resume-time
|
|
persp-auto-save-opt
|
|
persp-switch-to-added-buffer
|
|
persp-autokill-persp-when-removed-last-buffer
|
|
persp-autokill-buffer-on-remove
|
|
in1 in2 out1 out2
|
|
persp1 persp1-name persp2 persp2-name
|
|
wconf)
|
|
|
|
(require! :ui workspaces)
|
|
(require 'persp-mode)
|
|
|
|
(before-all
|
|
(delete-other-windows))
|
|
|
|
(before-each
|
|
(switch-to-buffer "*scratch*")
|
|
(setq wconf (current-window-configuration)
|
|
persp-auto-resume-time -1
|
|
persp-auto-save-opt 0
|
|
persp-switch-to-added-buffer nil
|
|
persp-autokill-persp-when-removed-last-buffer nil
|
|
persp-autokill-buffer-on-remove nil
|
|
in1 (get-buffer-create "in1")
|
|
in2 (get-buffer-create "in2")
|
|
out1 (get-buffer-create "out1")
|
|
out2 (get-buffer-create "out2"))
|
|
(doom-set-buffer-real in1 t)
|
|
(doom-set-buffer-real out1 t)
|
|
(let (noninteractive)
|
|
(persp-mode +1)
|
|
(let (persp-before-switch-functions persp-activated-functions)
|
|
(setq persp1-name +workspaces-main
|
|
persp1 (persp-add-new persp1-name)
|
|
persp2-name "test"
|
|
persp2 (persp-add-new persp2-name))
|
|
(persp-switch persp1-name)
|
|
(persp-add-buffer (list in1 in2) persp1))))
|
|
|
|
(after-each
|
|
(let (kill-buffer-query-functions kill-buffer-hook)
|
|
(let (noninteractive ignore-window-parameters)
|
|
(dolist (persp (persp-names))
|
|
(ignore-errors (persp-kill persp)))
|
|
(persp-mode -1))
|
|
(set-window-configuration wconf)
|
|
(mapc #'kill-buffer (list in1 in2 out1 out2))))
|
|
|
|
;;
|
|
(describe "switch"
|
|
(it "throws an error when switching to a non-existent workspace"
|
|
(expect (+workspace-switch "non-existent") :to-throw))
|
|
(it "switches to a valid workspace"
|
|
(+workspace-switch persp2-name)
|
|
(expect (+workspace-current-name) :to-equal persp2-name)))
|
|
|
|
(describe "current"
|
|
(it "returns the current workspace persp"
|
|
(expect (+workspace-p (+workspace-current)))
|
|
(expect (+workspace-current) :to-equal (get-current-persp)))
|
|
(it "returns the current workspace's name"
|
|
(expect (+workspace-current-name) :to-equal persp1-name)
|
|
(persp-switch (persp-name persp2))
|
|
(expect (+workspace-current-name) :to-equal persp2-name)))
|
|
|
|
(describe "exists-p"
|
|
(it "returns t for valid workspaces"
|
|
(expect (+workspace-exists-p persp1-name)))
|
|
(it "returns t for non-current (but valid) workspaces"
|
|
(expect (+workspace-exists-p persp2-name)))
|
|
(it "returns nil for non-existent workspaces"
|
|
(expect (+workspace-exists-p "non-existent") :to-be nil)))
|
|
|
|
(describe "buffer membership"
|
|
(it "returns t for buffers in current workspace"
|
|
(expect (+workspace-contains-buffer-p in1)))
|
|
(it "returns nil for buffers outside of current workspace"
|
|
(expect (+workspace-contains-buffer-p out1) :to-be nil))
|
|
(xit "returns a list of orphaned buffers"
|
|
(expect (+workspace-orphaned-buffer-list) :to-contain out2)))
|
|
|
|
(describe "list"
|
|
(it "returns a list of names"
|
|
(expect (+workspace-list-names)
|
|
:to-have-same-items-as (list persp1-name persp2-name)))
|
|
(it "returns a list of perspective structs"
|
|
(expect (+workspace-list)
|
|
:to-have-same-items-as (list persp1 persp2))))
|
|
|
|
(describe "CRUD"
|
|
(it "creates new workspaces"
|
|
(+workspace-new "X")
|
|
(expect (+workspace-list-names) :to-contain "X"))
|
|
(it "renames an existing workspace"
|
|
(+workspace-rename persp2-name "X")
|
|
(expect (persp-name persp2) :to-equal "X")
|
|
(expect (+workspace-list-names)
|
|
:to-have-same-items-as (list persp1-name "X")))
|
|
(it "deletes a live workspace"
|
|
(+workspace-delete persp2-name)
|
|
(expect (+workspace-list-names) :not :to-contain persp2-name)))
|
|
|
|
(describe "command"
|
|
(describe "close-window-or-workspace"
|
|
(before-each
|
|
(+workspace-switch persp2-name)
|
|
(split-window)
|
|
(expect (length (doom-visible-windows)) :to-be 2))
|
|
(it "kills window if more than one window"
|
|
(quiet! (+workspace/close-window-or-workspace))
|
|
(expect (length (doom-visible-windows)) :to-be 1))
|
|
(it "kills workspace on last window"
|
|
(quiet! (+workspace/close-window-or-workspace)
|
|
(+workspace/close-window-or-workspace))
|
|
(expect (+workspace-current-name) :to-equal persp1-name)))
|
|
|
|
(describe "rename"
|
|
(it "renames the current workspace"
|
|
(quiet! (+workspace/rename "X"))
|
|
(expect (+workspace-current-name) :to-equal "X")))))
|