blob: f1f6155f45667fb8b6c13abab90e48568868cc6a (
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
;;; test-ai-term--sort-candidates.el --- Tests for cj/--ai-term-sort-candidates -*- lexical-binding: t; -*-
;;; Commentary:
;; The project picker lists candidates with a live tmux session first
;; (so an agent that survived an Emacs crash is easy to get back to),
;; then everything else. Within the active group, projects opened this
;; session (`cj/--ai-term-mru') lead, most-recent first; the rest of the
;; active group, and the whole no-session group, sort alphabetically by
;; abbreviated path. With an empty MRU it's just active-first-then-alpha.
;;; Code:
(require 'ert)
(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
(require 'ai-term)
(ert-deftest test-ai-term--sort-candidates-active-first-then-alpha ()
"Normal: the one project with a live session leads; the rest go alpha."
(let ((cj/ai-term-tmux-session-prefix "aiv-"))
(should (equal (cj/--ai-term-sort-candidates
'("/c/foo" "/c/bar" "/c/baz")
'("aiv-bar"))
'("/c/bar" "/c/baz" "/c/foo")))))
(ert-deftest test-ai-term--sort-candidates-multiple-active-each-group-alpha ()
"Normal: both groups sort alphabetically internally."
(let ((cj/ai-term-tmux-session-prefix "aiv-"))
(should (equal (cj/--ai-term-sort-candidates
'("/c/foo" "/c/bar" "/c/baz")
'("aiv-foo" "aiv-bar"))
'("/c/bar" "/c/foo" "/c/baz")))))
(ert-deftest test-ai-term--sort-candidates-no-sessions-is-plain-alpha ()
"Boundary: nil session set -> a plain alphabetical list."
(let ((cj/ai-term-tmux-session-prefix "aiv-"))
(should (equal (cj/--ai-term-sort-candidates
'("/c/foo" "/c/bar") nil)
'("/c/bar" "/c/foo")))))
(ert-deftest test-ai-term--sort-candidates-empty-dirs-yields-nil ()
"Boundary: no candidates -> nil."
(should (null (cj/--ai-term-sort-candidates nil '("aiv-foo")))))
(ert-deftest test-ai-term--sort-candidates-active-group-mru-first ()
"Normal: within the active group, recently-opened projects lead in MRU
order; active dirs not opened this session fall after them alpha; the
no-session group trails, alpha."
(let ((cj/ai-term-tmux-session-prefix "aiv-")
(cj/--ai-term-mru '("/c/baz" "/c/foo")))
(should (equal (cj/--ai-term-sort-candidates
'("/c/foo" "/c/bar" "/c/baz" "/c/qux")
'("aiv-foo" "aiv-bar" "aiv-baz"))
'("/c/baz" "/c/foo" "/c/bar" "/c/qux")))))
(ert-deftest test-ai-term--sort-candidates-mru-does-not-bump-inactive ()
"Boundary: an MRU dir whose tmux session has died sorts alpha in the
no-session group, not at the top."
(let ((cj/ai-term-tmux-session-prefix "aiv-")
(cj/--ai-term-mru '("/c/zed")))
(should (equal (cj/--ai-term-sort-candidates
'("/c/foo" "/c/zed" "/c/bar")
'("aiv-foo"))
'("/c/foo" "/c/bar" "/c/zed")))))
(ert-deftest test-ai-term--session-active-p-matches-by-derived-name ()
"Normal: a dir is active when its derived session name is in the set."
(let ((cj/ai-term-tmux-session-prefix "aiv-"))
(should (cj/--ai-term-session-active-p "/c/foo" '("aiv-bar" "aiv-foo")))
(should-not (cj/--ai-term-session-active-p "/c/qux" '("aiv-bar" "aiv-foo")))
(should-not (cj/--ai-term-session-active-p "/c/foo" nil))))
(provide 'test-ai-term--sort-candidates)
;;; test-ai-term--sort-candidates.el ends here
|