add multi-data-spec ability
This commit is contained in:
parent
67af5c1d67
commit
4240c2744b
7 changed files with 32 additions and 23 deletions
|
@ -28,13 +28,12 @@
|
||||||
|
|
||||||
(defmacro defdatatest [n bindings & body]
|
(defmacro defdatatest [n bindings & body]
|
||||||
(when ct/*load-tests*
|
(when ct/*load-tests*
|
||||||
(let [namespaced-test-key# (keyword (str *ns*) (name n))
|
(let [namespaced-test-key# (keyword (str *ns*) (name n))]
|
||||||
file-prefix# (fl/data-test-spec-file-prefix namespaced-test-key#)]
|
|
||||||
`(def ~(vary-meta n assoc
|
`(def ~(vary-meta n assoc
|
||||||
:test `(fn []
|
:test `(fn []
|
||||||
(let [testdata# (fl/load-test-data ~file-prefix#)
|
(doseq [data-spec# (fl/load-data-test-specs ~namespaced-test-key#)]
|
||||||
~(symbol (first bindings)) (:input testdata#)
|
(let [~(symbol (first bindings)) (:input data-spec#)
|
||||||
~(symbol (second bindings)) (:expectation testdata#)]
|
~(symbol (second bindings)) (:expectation data-spec#)]
|
||||||
~@body))
|
~@body)))
|
||||||
:data-spec-prefix file-prefix#)
|
:data-spec-key namespaced-test-key#)
|
||||||
(fn [] (ct/test-var (var ~n)))))))
|
(fn [] (ct/test-var (var ~n)))))))
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
{:input s/Any
|
{:input s/Any
|
||||||
:expectation s/Any})
|
:expectation s/Any})
|
||||||
|
|
||||||
|
(def RuntimeTestDataSpec
|
||||||
|
(merge
|
||||||
|
TestDataSpec
|
||||||
|
{:data-spec-file s/Str}))
|
||||||
|
|
||||||
(s/defn read-test-data-spec :- TestDataSpec
|
(s/defn read-test-data-spec :- TestDataSpec
|
||||||
[resource-url :- s/Str]
|
[resource-url :- s/Str]
|
||||||
(aero/read-config resource-url))
|
(aero/read-config resource-url))
|
||||||
|
@ -43,13 +48,15 @@
|
||||||
(map #(str prefix "." % ".edn")
|
(map #(str prefix "." % ".edn")
|
||||||
(range 10)))))
|
(range 10)))))
|
||||||
|
|
||||||
(s/defn load-data-test-spec
|
(s/defn load-data-test-spec :- RuntimeTestDataSpec
|
||||||
[file-path :- s/Str]
|
[file-path :- s/Str]
|
||||||
(let [file-resource (io/resource file-path)]
|
(let [file-resource (io/resource file-path)]
|
||||||
(when file-resource
|
(when file-resource
|
||||||
(read-test-data-spec file-resource))))
|
(merge
|
||||||
|
{:data-spec-file file-path}
|
||||||
|
(read-test-data-spec file-resource)))))
|
||||||
|
|
||||||
(s/defn load-data-test-specs :- [TestDataSpec]
|
(s/defn load-data-test-specs :- [RuntimeTestDataSpec]
|
||||||
[name-key :- s/Keyword]
|
[name-key :- s/Keyword]
|
||||||
(let [data-test-specs (filter some?
|
(let [data-test-specs (filter some?
|
||||||
(map load-data-test-spec (data-test-spec-file-names name-key)))]
|
(map load-data-test-spec (data-test-spec-file-names name-key)))]
|
||||||
|
@ -58,13 +65,3 @@
|
||||||
{:message "Could not find test spec"
|
{:message "Could not find test spec"
|
||||||
:name-key name-key}))
|
:name-key name-key}))
|
||||||
(into [] data-test-specs))))
|
(into [] data-test-specs))))
|
||||||
|
|
||||||
(s/defn load-test-data
|
|
||||||
[file-prefix :- s/Str]
|
|
||||||
(let [file-path (str file-prefix ".edn")]
|
|
||||||
(try
|
|
||||||
(read-test-data-spec (io/resource file-path))
|
|
||||||
(catch IllegalArgumentException e
|
|
||||||
(throw (ex-info (str "Could not find test spec on " file-path)
|
|
||||||
{:message "Could not find test spec"
|
|
||||||
:file-path file-prefix} e))))))
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
(name-prefix [_]
|
(name-prefix [_]
|
||||||
(fl/data-test-spec-file-prefix (:name _)))
|
(fl/data-test-spec-file-prefix (:name _)))
|
||||||
(run-tests [_]
|
(run-tests [_]
|
||||||
(let [testdata (fl/load-test-data (fl/data-test-spec-file-prefix (:name _)))
|
(let [testdata (fl/load-data-test-spec (fl/data-test-spec-file-prefix (:name _)))
|
||||||
{:keys [input expectation]} testdata]
|
{:keys [input expectation]} testdata]
|
||||||
(data-test _ input expectation))))
|
(data-test _ input expectation))))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
{:input 1
|
||||||
|
:expectation 1}
|
|
@ -0,0 +1,2 @@
|
||||||
|
{:input 2
|
||||||
|
:expectation 2}
|
|
@ -46,7 +46,8 @@
|
||||||
(sut/data-test-spec-file-names ::test-it))))
|
(sut/data-test-spec-file-names ::test-it))))
|
||||||
|
|
||||||
(deftest should-load-data
|
(deftest should-load-data
|
||||||
(is (= {:test "data"}
|
(is (= {:test "data"
|
||||||
|
:data-spec-file "data_test/file_loader_test/test_it.edn"}
|
||||||
(sut/load-data-test-spec (str (sut/data-test-spec-file-prefix ::test-it) ".edn")))))
|
(sut/load-data-test-spec (str (sut/data-test-spec-file-prefix ::test-it) ".edn")))))
|
||||||
|
|
||||||
(deftest should-not-load-non-existing-data
|
(deftest should-not-load-non-existing-data
|
||||||
|
@ -54,7 +55,12 @@
|
||||||
(sut/load-data-test-spec (str (sut/data-test-spec-file-prefix ::not-existing) ".edn")))))
|
(sut/load-data-test-spec (str (sut/data-test-spec-file-prefix ::not-existing) ".edn")))))
|
||||||
|
|
||||||
(deftest should-load-data-test-specs
|
(deftest should-load-data-test-specs
|
||||||
(is (= [{:test "data"} {:test "data1"} {:test "data9"}]
|
(is (= [{:test "data"
|
||||||
|
:data-spec-file "data_test/file_loader_test/test_it.edn"}
|
||||||
|
{:test "data1"
|
||||||
|
:data-spec-file "data_test/file_loader_test/test_it.1.edn"}
|
||||||
|
{:test "data9"
|
||||||
|
:data-spec-file "data_test/file_loader_test/test_it.9.edn"}]
|
||||||
(sut/load-data-test-specs ::test-it))))
|
(sut/load-data-test-specs ::test-it))))
|
||||||
|
|
||||||
(deftest should-throw-exception
|
(deftest should-throw-exception
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
; ---------------------------- macro -----------------------------
|
; ---------------------------- macro -----------------------------
|
||||||
(sut/defdatatest should-test-with-data-macro-version [input expectation]
|
(sut/defdatatest should-test-with-data-macro-version [input expectation]
|
||||||
(is (= input expectation)))
|
(is (= input expectation)))
|
||||||
|
|
||||||
|
(sut/defdatatest should-test-multiple-specs [input expectation]
|
||||||
|
(is (= input expectation)))
|
||||||
|
|
||||||
|
|
||||||
(macroexpand-1 '(sut/defdatatest should-test-with-data-macro-version [input expectation] (is (= 1 1))))
|
(macroexpand-1 '(sut/defdatatest should-test-with-data-macro-version [input expectation] (is (= 1 1))))
|
||||||
|
|
Loading…
Reference in a new issue