blob: ed227cf05e1fec6bb47d3483d567e1ab63be392a (
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
|
;;; test-wttrin--mode-line-map.el --- Tests for wttrin--mode-line-map -*- lexical-binding: t; -*-
;; Copyright (C) 2024 Craig Jennings
;;; Commentary:
;; Unit tests for wttrin--mode-line-map keymap.
;; Tests verify the keymap exists and has correct keybindings after refactoring.
;;; Code:
(require 'ert)
(require 'wttrin)
;;; Normal Cases - Keymap Existence and Structure
(ert-deftest test-wttrin--mode-line-map-exists ()
"Test that wttrin--mode-line-map defvar exists after refactoring."
(should (boundp 'wttrin--mode-line-map)))
(ert-deftest test-wttrin--mode-line-map-is-keymap ()
"Test that wttrin--mode-line-map is actually a keymap."
(should (keymapp wttrin--mode-line-map)))
(ert-deftest test-wttrin--mode-line-map-is-sparse-keymap ()
"Test that wttrin--mode-line-map is a sparse keymap."
;; Sparse keymaps start with 'keymap symbol
(should (eq 'keymap (car wttrin--mode-line-map))))
;;; Keybinding Tests
(ert-deftest test-wttrin--mode-line-map-has-mouse-1-binding ()
"Test that left-click (mouse-1) is bound to wttrin-mode-line-click."
(let ((binding (lookup-key wttrin--mode-line-map [mode-line mouse-1])))
(should (eq binding 'wttrin-mode-line-click))))
(ert-deftest test-wttrin--mode-line-map-has-mouse-3-binding ()
"Test that right-click (mouse-3) is bound to wttrin-mode-line-force-refresh."
(let ((binding (lookup-key wttrin--mode-line-map [mode-line mouse-3])))
(should (eq binding 'wttrin-mode-line-force-refresh))))
;;; Boundary Cases - Verify No Unexpected Bindings
(ert-deftest test-wttrin--mode-line-map-no-mouse-2-binding ()
"Test that middle-click (mouse-2) has no binding."
(let ((binding (lookup-key wttrin--mode-line-map [mode-line mouse-2])))
;; Should return nil (unbound) or a prefix keymap
(should-not (and binding (symbolp binding)))))
(ert-deftest test-wttrin--mode-line-map-minimal-bindings ()
"Test that keymap has the expected bindings."
;; Count non-nil entries in keymap
(let ((count 0))
(map-keymap (lambda (_key _binding)
(setq count (1+ count)))
wttrin--mode-line-map)
;; Should have at least 1 binding (could be 1 or 2 depending on how
;; Emacs internally structures the keymap with [mode-line mouse-N])
;; The important thing is both mouse-1 and mouse-3 are accessible
(should (>= count 1))))
;;; Integration Test - Verify Mode-Line Uses the Keymap
(ert-deftest test-wttrin-mode-line-display-uses-shared-keymap ()
"Test that mode-line display uses wttrin--mode-line-map after refactoring.
This test verifies the refactoring eliminated inline keymap construction."
;; Set up minimal mode-line state
(let ((wttrin-mode-line-favorite-location "Test, CA")
(wttrin--mode-line-tooltip-data "Test weather"))
;; Update the mode-line display
(wttrin--mode-line-update-display "☀️")
;; Extract the keymap property from wttrin-mode-line-string
(let ((keymap-prop (get-text-property 0 'local-map wttrin-mode-line-string)))
;; After refactoring, should use the shared wttrin--mode-line-map
;; Not a freshly constructed keymap on each call
(should (eq keymap-prop wttrin--mode-line-map)))))
(provide 'test-wttrin--mode-line-map)
;;; test-wttrin--mode-line-map.el ends here
|