aboutsummaryrefslogtreecommitdiff
path: root/tests/test-ai-term--tmux-session-name.el
blob: db8e836f453dd552c74a7679c7feeaa087b32e71 (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
;;; test-ai-term--tmux-session-name.el --- Tests for cj/--ai-term-tmux-session-name -*- lexical-binding: t; -*-

;;; Commentary:
;; The tmux session name is `cj/ai-term-tmux-session-prefix' followed by
;; the project's basename, so reopening the agent on the same project (e.g.
;; after an Emacs crash) reattaches to the same tmux session rather than
;; spawning a new one -- and the prefix lets `tmux ls' output be filtered
;; down to AI-term's own sessions.  The basename is sanitized to a form
;; tmux won't re-mangle: runs of whitespace become hyphens, and `.' / `:'
;; (which tmux disallows in session names and silently rewrites to `_')
;; become `_' up front so the computed name matches the real session.

;;; Code:

(require 'ert)

(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
(require 'ai-term)

(ert-deftest test-ai-term--tmux-session-name-normal-project ()
  "Normal: basename gets the configured prefix."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/home/cjennings/projects/foo")
                   "aiv-foo"))))

(ert-deftest test-ai-term--tmux-session-name-trailing-slash ()
  "Boundary: trailing slash collapses before basename extraction."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/home/cjennings/projects/foo/")
                   "aiv-foo"))))

(ert-deftest test-ai-term--tmux-session-name-dots-become-underscores ()
  "Boundary: tmux disallows `.' in session names and rewrites it to `_',
so the basename's dots are sanitized to `_' up front -- `.emacs.d' must
yield `aiv-_emacs_d', matching the session tmux actually creates."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/home/cjennings/.emacs.d")
                   "aiv-_emacs_d"))))

(ert-deftest test-ai-term--tmux-session-name-colon-becomes-underscore ()
  "Boundary: `:' is also disallowed by tmux in session names -> `_'."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/tmp/a:b")
                   "aiv-a_b"))))

(ert-deftest test-ai-term--tmux-session-name-space-becomes-hyphen ()
  "Boundary: a space in the basename is replaced with a hyphen."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/tmp/my work")
                   "aiv-my-work"))))

(ert-deftest test-ai-term--tmux-session-name-multiple-spaces-collapse ()
  "Boundary: a run of whitespace collapses to a single hyphen."
  (let ((cj/ai-term-tmux-session-prefix "aiv-"))
    (should (equal (cj/--ai-term-tmux-session-name "/tmp/a   b\tc")
                   "aiv-a-b-c"))))

(ert-deftest test-ai-term--tmux-session-name-honors-custom-prefix ()
  "Normal: a non-default prefix is what gets prepended."
  (let ((cj/ai-term-tmux-session-prefix "em-"))
    (should (equal (cj/--ai-term-tmux-session-name "/home/cjennings/projects/foo")
                   "em-foo"))))

(provide 'test-ai-term--tmux-session-name)
;;; test-ai-term--tmux-session-name.el ends here