summaryrefslogtreecommitdiff
path: root/tests/test-mousetrap-mode--get-profile-for-mode.el
blob: db0c47b95db17fad867697e86fd6720cbdc38ff0 (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
;;; test-mousetrap-mode--get-profile-for-mode.el --- Tests for profile lookup -*- lexical-binding: t; -*-

;;; Commentary:
;; Unit tests for mouse-trap--get-profile-for-mode function.
;; Tests profile lookup logic including exact matches, inheritance,
;; and fallback to default profile.

;;; Code:

(require 'ert)
(require 'mousetrap-mode)

;;; Normal Cases

(ert-deftest test-mousetrap-mode--get-profile-for-mode-normal-exact-match-returns-profile ()
  "Test exact mode match returns mapped profile."
  (let ((major-mode 'dashboard-mode))
    (should (eq 'scroll+primary (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-normal-inherited-mode-returns-parent-profile ()
  "Test that org-mode inherits disabled profile from text-mode."
  (with-temp-buffer
    (org-mode)
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-normal-unmapped-mode-returns-default ()
  "Test unmapped mode returns default profile."
  (with-temp-buffer
    (emacs-lisp-mode)
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-normal-special-mode-derivative-returns-disabled ()
  "Test that help-mode inherits disabled from special-mode."
  (with-temp-buffer
    (help-mode)
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-normal-pdf-view-mode-returns-full ()
  "Test pdf-view-mode returns full profile."
  (let ((major-mode 'pdf-view-mode))
    (should (eq 'full (mouse-trap--get-profile-for-mode)))))

;;; Boundary Cases

(ert-deftest test-mousetrap-mode--get-profile-for-mode-boundary-empty-mode-profiles-returns-default ()
  "Test empty mode profiles list returns default."
  (let ((mouse-trap-mode-profiles nil))
    (with-temp-buffer
      (emacs-lisp-mode)
      (should (eq 'disabled (mouse-trap--get-profile-for-mode))))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-boundary-exact-match-priority-over-inheritance ()
  "Test exact mode match takes priority over inherited match."
  (let ((major-mode 'text-mode))
    ;; text-mode is explicitly mapped to disabled
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-boundary-first-parent-match-wins ()
  "Test first matching parent profile wins with multiple inheritance.
When a mode could match multiple parent profiles, the first one
in mouse-trap-mode-profiles should win."
  (let ((mouse-trap-mode-profiles
         '((special-mode . disabled)
           (text-mode . scroll-only)))
        (major-mode 'derived-test-mode))
    ;; Simulate a mode that derives from special-mode
    (put 'derived-test-mode 'derived-mode-parent 'special-mode)
    (with-temp-buffer
      (setq major-mode 'derived-test-mode)
      (should (eq 'disabled (mouse-trap--get-profile-for-mode))))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-boundary-deeply-nested-inheritance ()
  "Test profile lookup works through deep inheritance chain."
  ;; Create a deep inheritance chain: level3 -> level2 -> level1 -> text-mode
  (let ((mouse-trap-mode-profiles
         '((text-mode . disabled)))
        (major-mode 'level3-mode))
    (put 'level1-mode 'derived-mode-parent 'text-mode)
    (put 'level2-mode 'derived-mode-parent 'level1-mode)
    (put 'level3-mode 'derived-mode-parent 'level2-mode)
    (with-temp-buffer
      (setq major-mode 'level3-mode)
      (should (eq 'disabled (mouse-trap--get-profile-for-mode))))))

;;; Error Cases

(ert-deftest test-mousetrap-mode--get-profile-for-mode-error-nil-major-mode-returns-default ()
  "Test nil major-mode returns default profile gracefully."
  (let ((major-mode nil))
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(ert-deftest test-mousetrap-mode--get-profile-for-mode-error-invalid-symbol-returns-default ()
  "Test invalid major-mode symbol returns default profile."
  (let ((major-mode 'not-a-real-mode-symbol))
    (should (eq 'disabled (mouse-trap--get-profile-for-mode)))))

(provide 'test-mousetrap-mode--get-profile-for-mode)
;;; test-mousetrap-mode--get-profile-for-mode.el ends here