aboutsummaryrefslogtreecommitdiff
path: root/tests/test-prog-c-mode-settings.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-prog-c-mode-settings.el')
-rw-r--r--tests/test-prog-c-mode-settings.el52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/test-prog-c-mode-settings.el b/tests/test-prog-c-mode-settings.el
new file mode 100644
index 00000000..eef2d910
--- /dev/null
+++ b/tests/test-prog-c-mode-settings.el
@@ -0,0 +1,52 @@
+;;; test-prog-c-mode-settings.el --- Tests for cj/c-mode-settings -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Verifies the C mode hook applies the documented buffer-local values and
+;; only calls `lsp-deferred' when both the function and clangd are available.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'ert)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'prog-c)
+
+(ert-deftest test-prog-c-mode-settings-normal-applies-buffer-locals ()
+ "Normal: cj/c-mode-settings applies the documented buffer-local values."
+ (with-temp-buffer
+ (cl-letf (((symbol-function 'auto-fill-mode) (lambda (&rest _) nil))
+ ((symbol-function 'electric-pair-mode) (lambda (&rest _) nil))
+ ((symbol-function 'lsp-deferred) (lambda (&rest _) nil))
+ ((symbol-function 'executable-find) (lambda (_) nil)))
+ (cj/c-mode-settings))
+ (should (eq indent-tabs-mode nil))
+ (should (= c-basic-offset 4))
+ (should (= tab-width 4))
+ (should (= fill-column 80))
+ (should comment-auto-fill-only-comments)))
+
+(ert-deftest test-prog-c-mode-settings-boundary-lsp-available-deferred ()
+ "Boundary: when lsp-deferred is fbound and clangd is on PATH, lsp-deferred is called."
+ (let ((lsp-calls 0))
+ (with-temp-buffer
+ (cl-letf (((symbol-function 'auto-fill-mode) (lambda (&rest _) nil))
+ ((symbol-function 'electric-pair-mode) (lambda (&rest _) nil))
+ ((symbol-function 'lsp-deferred) (lambda () (cl-incf lsp-calls)))
+ ((symbol-function 'executable-find) (lambda (_) "/usr/bin/clangd")))
+ (cj/c-mode-settings)))
+ (should (= lsp-calls 1))))
+
+(ert-deftest test-prog-c-mode-settings-error-clangd-missing-skips-lsp ()
+ "Error: when clangd is not on PATH, lsp-deferred is NOT called."
+ (let ((lsp-calls 0))
+ (with-temp-buffer
+ (cl-letf (((symbol-function 'auto-fill-mode) (lambda (&rest _) nil))
+ ((symbol-function 'electric-pair-mode) (lambda (&rest _) nil))
+ ((symbol-function 'lsp-deferred) (lambda () (cl-incf lsp-calls)))
+ ((symbol-function 'executable-find) (lambda (_) nil)))
+ (cj/c-mode-settings)))
+ (should (zerop lsp-calls))))
+
+(provide 'test-prog-c-mode-settings)
+;;; test-prog-c-mode-settings.el ends here