Skip to content

Commit 2a4a5c0

Browse files
committed
Reintroduce self-test to check splint.clj requires
1 parent 00e4e01 commit 2a4a5c0

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

dev/noahtheduke/splint/rules/dev/sorted_rules_require.clj

Lines changed: 0 additions & 21 deletions
This file was deleted.

justfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ test *args="--output dots":
4040
[no-exit-message]
4141
test-all *args="--output dots":
4242
just clojure-lsp
43-
bb run splint
4443
just test-raw {{args}}
4544

4645
@new-rule arg:

test/noahtheduke/splint/self_test.clj

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,51 @@
99
[clojure.java.io :as io]
1010
[clojure.string :as str]
1111
[lazytest.core :refer [defdescribe expect it]]
12-
[lazytest.extensions.matcher-combinators :refer [match?]])
12+
[lazytest.extensions.matcher-combinators :refer [match?]]
13+
[noahtheduke.splint.runner :as splint :refer [prepare-rules]]
14+
[noahtheduke.splint.test-helpers :refer [with-out-str-data-map]]
15+
[noahtheduke.splint.config :as conf]
16+
[noahtheduke.splint.rules :refer [global-rules]]
17+
[noahtheduke.splint.parser :refer [parse-file]])
1318
(:import
1419
(java.io File)))
1520

1621
(set! *warn-on-reflection* true)
1722

23+
(defdescribe dogfooding-test
24+
(it "no diagnostics in splint"
25+
(match? {:result {:diagnostics []
26+
:exit 0}}
27+
(-> (splint/run ["--quiet" "--no-parallel" "dev" "src" "test"])
28+
(with-out-str-data-map)
29+
((fn [{results :result}]
30+
{:result {:diagnostics (:diagnostics results)
31+
:exit (:exit results)}}))))))
32+
33+
(defdescribe splint-clj-test
34+
(let [requires (->> (parse-file {:contents (slurp "src/noahtheduke/splint.clj")})
35+
(first) ; ns form
36+
(last) ; rules :require
37+
(next) ; drop :require
38+
,)]
39+
(it "lists every rule"
40+
(expect (= requires (sort requires))
41+
"Rules in `noahtheduke.splint` must be in sorted order."))
42+
(it "has all of the rules in the rules config"
43+
(let [rule-names (->> requires
44+
(map str)
45+
(map #(take-last 2 (str/split % #"\.")))
46+
(map #(symbol (first %) (last %))))
47+
config-rule-names (-> @conf/default-config
48+
(assoc :clojure-version {:major 99})
49+
(prepare-rules (:rules @global-rules))
50+
:rules
51+
(->> (remove #(.equals "dev" (:genre (val %))))
52+
(map (comp str key))
53+
(map #(str/replace % "?" ""))
54+
(map symbol)))]
55+
(expect (= (set rule-names) (set config-rule-names)))))))
56+
1857
(defdescribe config-test
1958
(it "has sorted default config"
2059
(let [default-config (slurp (io/resource "config/default.edn"))

0 commit comments

Comments
 (0)