From 34912cdba15b56409cfb7f9d825bb75c4193831f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Wed, 25 Mar 2026 16:48:55 +0200 Subject: [PATCH] Add integration tests for sample files, remove unused ones Add integration tests for previously unused sample files: - docstrings.clj: font-lock spot checks on ns, def, defmacro, and defprotocol method docstrings - outline.clj: outline heading navigation and indentation preservation Remove sample files whose scenarios are already covered by existing specs: bug43.clj, extra_def_forms.clj, navigation.clj, regex.clj, spec.clj. Keep embed.cljs and native.jank as manual testing fixtures (they depend on optional grammars not available in CI). --- test/clojure-ts-mode-integration-test.el | 59 ++++++++++++++++++++++++ test/samples/bug43.clj | 7 --- test/samples/extra_def_forms.clj | 6 --- test/samples/navigation.clj | 14 ------ test/samples/regex.clj | 7 --- test/samples/spec.clj | 7 --- 6 files changed, 59 insertions(+), 41 deletions(-) delete mode 100644 test/samples/bug43.clj delete mode 100644 test/samples/extra_def_forms.clj delete mode 100644 test/samples/navigation.clj delete mode 100644 test/samples/regex.clj delete mode 100644 test/samples/spec.clj diff --git a/test/clojure-ts-mode-integration-test.el b/test/clojure-ts-mode-integration-test.el index 46541d3..4840813 100644 --- a/test/clojure-ts-mode-integration-test.el +++ b/test/clojure-ts-mode-integration-test.el @@ -39,6 +39,17 @@ (original (with-temp-buffer (insert-file-contents file) (buffer-string)))) + (with-temp-buffer + (insert original) + (clojure-ts-mode) + (indent-region (point-min) (point-max)) + (expect (buffer-string) :to-equal original)))) + + (it "preserves correct indentation of outline.clj after indent-region" + (let* ((file (clojure-ts-test--resource-file "outline.clj")) + (original (with-temp-buffer + (insert-file-contents file) + (buffer-string)))) (with-temp-buffer (insert original) (clojure-ts-mode) @@ -73,6 +84,34 @@ (expect (get-text-property (match-beginning 0) 'face) :to-equal 'font-lock-comment-face)))) + (it "applies expected font-lock faces to docstrings.clj" + (let ((file (clojure-ts-test--resource-file "docstrings.clj"))) + (with-temp-buffer + (insert-file-contents file) + (let ((treesit-font-lock-level 3)) + (clojure-ts-mode)) + (font-lock-ensure) + ;; ns docstring + (goto-char (point-min)) + (search-forward "This is a namespace") + (expect (get-text-property (match-beginning 0) 'face) + :to-equal 'font-lock-doc-face) + ;; def with docstring before value + (goto-char (point-min)) + (search-forward "I'm a docstring") + (expect (get-text-property (match-beginning 0) 'face) + :to-equal 'font-lock-doc-face) + ;; defmacro docstring + (goto-char (point-min)) + (search-forward "Fixes most known bugs") + (expect (get-text-property (match-beginning 0) 'face) + :to-equal 'font-lock-doc-face) + ;; defprotocol method docstring + (goto-char (point-min)) + (search-forward "Does foo") + (expect (get-text-property (match-beginning 0) 'face) + :to-equal 'font-lock-doc-face)))) + (it "applies expected font-lock faces to test.clj" (let ((file (clojure-ts-test--resource-file "test.clj"))) (with-temp-buffer @@ -111,4 +150,24 @@ ;; Should find the namespace (expect (assoc "Namespace:refactoring" flatten-index) :not :to-be nil)))))) +(describe "integration: outline on sample files" + (before-all + (unless (treesit-language-available-p 'clojure) + (signal 'buttercup-pending "tree-sitter Clojure grammar not available"))) + + (it "navigates headings in outline.clj" + (let ((file (clojure-ts-test--resource-file "outline.clj"))) + (with-temp-buffer + (insert-file-contents file) + (let ((clojure-ts-outline-variant 'comments)) + (clojure-ts-mode)) + (outline-minor-mode 1) + (goto-char (point-min)) + (outline-next-heading) + (expect (looking-at ";;; First heading") :to-be-truthy) + (outline-next-heading) + (expect (looking-at ";;;; Heading level 2") :to-be-truthy) + (outline-next-heading) + (expect (looking-at ";;; Second heading") :to-be-truthy))))) + ;;; clojure-ts-mode-integration-test.el ends here diff --git a/test/samples/bug43.clj b/test/samples/bug43.clj deleted file mode 100644 index 85cfda1..0000000 --- a/test/samples/bug43.clj +++ /dev/null @@ -1,7 +0,0 @@ -^{:a 1} - (def b 2) - -^{:a 1} -(defn a - "hello" ;; <- - [] "world") diff --git a/test/samples/extra_def_forms.clj b/test/samples/extra_def_forms.clj deleted file mode 100644 index 6ecb3a3..0000000 --- a/test/samples/extra_def_forms.clj +++ /dev/null @@ -1,6 +0,0 @@ -(ns extra-def-forms) - -(defelem file-upload - "Creates a file upload input." - [name] - (input-field "file" name nil)) diff --git a/test/samples/navigation.clj b/test/samples/navigation.clj deleted file mode 100644 index 26bdf44..0000000 --- a/test/samples/navigation.clj +++ /dev/null @@ -1,14 +0,0 @@ -(ns navigation) - -(let [my-var ^{:foo "bar"} (= "Hello" "Hello")]) - -(let [my-var ^boolean (= "Hello" "world")]) - -#(+ % %) - -^boolean (= 2 2) - -(defn- to-string - ^String - [arg] - (.toString arg)) diff --git a/test/samples/regex.clj b/test/samples/regex.clj deleted file mode 100644 index f37b50a..0000000 --- a/test/samples/regex.clj +++ /dev/null @@ -1,7 +0,0 @@ -(ns regex) - -(def email-pattern - #"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?") - -(def simple-regex - #"^(\\d+).*[a|b|c|d].*[a-z0-9!#]$") diff --git a/test/samples/spec.clj b/test/samples/spec.clj deleted file mode 100644 index b0770cf..0000000 --- a/test/samples/spec.clj +++ /dev/null @@ -1,7 +0,0 @@ -(ns spec - (:require - [clojure.spec.alpha :as s])) - -(s/def ::username string?) -(s/def ::age number?) -(s/def ::email string?)