diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-24 19:53:28 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-24 19:53:28 -0500 |
| commit | 47f222f66d7d481fb0d50661d64f49440455ff6d (patch) | |
| tree | ce208be918001b30ed67cf80292b47e5b22c46f0 /tests | |
| parent | 36a453d2c1237b49f594b23433858a0146dbf31e (diff) | |
| download | dotemacs-47f222f66d7d481fb0d50661d64f49440455ff6d.tar.gz dotemacs-47f222f66d7d481fb0d50661d64f49440455ff6d.zip | |
feat(keybindings): add cj/custom-keymap registration API
Phase 3 of the load-graph project. cj/register-prefix-map and cj/register-command bind a prefix map or command under the C-; prefix and register the which-key label once which-key loads. Feature modules will route their registration through these instead of mutating cj/custom-keymap directly, so keybindings.el stays the sole owner of the prefix and modules stop assuming the keymap already exists at load.
Adds test-init-keymap-registration.el covering prefix-map and command resolution, the optional label, and invalid-key rejection. No modules are migrated yet; that follows in batches.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-init-keymap-registration.el | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/test-init-keymap-registration.el b/tests/test-init-keymap-registration.el new file mode 100644 index 00000000..fcce1edb --- /dev/null +++ b/tests/test-init-keymap-registration.el @@ -0,0 +1,45 @@ +;;; test-init-keymap-registration.el --- Keymap registration API contract -*- lexical-binding: t; -*- + +;;; Commentary: +;; Phase 3 of the load-graph project introduces a small registration API in +;; keybindings.el so feature modules stop mutating `cj/custom-keymap' directly. +;; These tests pin the contract: a registered prefix map or command resolves +;; from `cj/custom-keymap', the which-key label is optional, and an invalid key +;; signals. Each test rebinds `cj/custom-keymap' to a fresh keymap so the real +;; global prefix is never polluted. + +;;; Code: + +(require 'ert) +(require 'cl-lib) + +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'keybindings) + +(ert-deftest test-init-keymap-registration-prefix-map-resolves () + "Normal: a prefix map registered under KEY resolves from cj/custom-keymap." + (let ((cj/custom-keymap (make-sparse-keymap)) + (sub (make-sparse-keymap))) + (cj/register-prefix-map "a" sub "alpha") + (should (eq sub (keymap-lookup cj/custom-keymap "a"))))) + +(ert-deftest test-init-keymap-registration-command-resolves () + "Normal: a command registered under KEY resolves from cj/custom-keymap." + (let ((cj/custom-keymap (make-sparse-keymap))) + (cj/register-command "b" #'ignore "beta") + (should (eq #'ignore (keymap-lookup cj/custom-keymap "b"))))) + +(ert-deftest test-init-keymap-registration-label-optional () + "Boundary: registration without a LABEL still binds the key." + (let ((cj/custom-keymap (make-sparse-keymap)) + (sub (make-sparse-keymap))) + (cj/register-prefix-map "c" sub) + (should (eq sub (keymap-lookup cj/custom-keymap "c"))))) + +(ert-deftest test-init-keymap-registration-invalid-key-signals () + "Error: a non-string key is rejected by the underlying keymap-set." + (let ((cj/custom-keymap (make-sparse-keymap))) + (should-error (cj/register-prefix-map 42 (make-sparse-keymap))))) + +(provide 'test-init-keymap-registration) +;;; test-init-keymap-registration.el ends here |
