From 4240c2744bf3725f91bf5ba66a5bd54f50a209ae Mon Sep 17 00:00:00 2001 From: jem Date: Tue, 28 May 2019 18:53:08 +0200 Subject: [PATCH] add multi-data-spec ability --- main/src/data_test.clj | 13 +++++------ main/src/data_test/file_loader.clj | 23 ++++++++----------- main/src/data_test/runner.clj | 2 +- .../should_test_multiple_specs.1.edn | 2 ++ .../should_test_multiple_specs.2.edn | 2 ++ test/src/data_test/file_loader_test.clj | 10 ++++++-- test/src/data_test_test.clj | 3 +++ 7 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 test/resources/data_test_test/should_test_multiple_specs.1.edn create mode 100644 test/resources/data_test_test/should_test_multiple_specs.2.edn diff --git a/main/src/data_test.clj b/main/src/data_test.clj index 327f836..aeed91f 100644 --- a/main/src/data_test.clj +++ b/main/src/data_test.clj @@ -28,13 +28,12 @@ (defmacro defdatatest [n bindings & body] (when ct/*load-tests* - (let [namespaced-test-key# (keyword (str *ns*) (name n)) - file-prefix# (fl/data-test-spec-file-prefix namespaced-test-key#)] + (let [namespaced-test-key# (keyword (str *ns*) (name n))] `(def ~(vary-meta n assoc :test `(fn [] - (let [testdata# (fl/load-test-data ~file-prefix#) - ~(symbol (first bindings)) (:input testdata#) - ~(symbol (second bindings)) (:expectation testdata#)] - ~@body)) - :data-spec-prefix file-prefix#) + (doseq [data-spec# (fl/load-data-test-specs ~namespaced-test-key#)] + (let [~(symbol (first bindings)) (:input data-spec#) + ~(symbol (second bindings)) (:expectation data-spec#)] + ~@body))) + :data-spec-key namespaced-test-key#) (fn [] (ct/test-var (var ~n))))))) diff --git a/main/src/data_test/file_loader.clj b/main/src/data_test/file_loader.clj index 9cb02ad..594f259 100644 --- a/main/src/data_test/file_loader.clj +++ b/main/src/data_test/file_loader.clj @@ -25,6 +25,11 @@ {:input s/Any :expectation s/Any}) +(def RuntimeTestDataSpec + (merge + TestDataSpec + {:data-spec-file s/Str})) + (s/defn read-test-data-spec :- TestDataSpec [resource-url :- s/Str] (aero/read-config resource-url)) @@ -43,13 +48,15 @@ (map #(str prefix "." % ".edn") (range 10))))) -(s/defn load-data-test-spec +(s/defn load-data-test-spec :- RuntimeTestDataSpec [file-path :- s/Str] (let [file-resource (io/resource file-path)] (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] (let [data-test-specs (filter some? (map load-data-test-spec (data-test-spec-file-names name-key)))] @@ -58,13 +65,3 @@ {:message "Could not find test spec" :name-key name-key})) (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)))))) diff --git a/main/src/data_test/runner.clj b/main/src/data_test/runner.clj index 30c158e..9237c2b 100644 --- a/main/src/data_test/runner.clj +++ b/main/src/data_test/runner.clj @@ -50,7 +50,7 @@ (name-prefix [_] (fl/data-test-spec-file-prefix (:name _))) (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] (data-test _ input expectation)))) diff --git a/test/resources/data_test_test/should_test_multiple_specs.1.edn b/test/resources/data_test_test/should_test_multiple_specs.1.edn new file mode 100644 index 0000000..030c81f --- /dev/null +++ b/test/resources/data_test_test/should_test_multiple_specs.1.edn @@ -0,0 +1,2 @@ +{:input 1 + :expectation 1} \ No newline at end of file diff --git a/test/resources/data_test_test/should_test_multiple_specs.2.edn b/test/resources/data_test_test/should_test_multiple_specs.2.edn new file mode 100644 index 0000000..fecaa2f --- /dev/null +++ b/test/resources/data_test_test/should_test_multiple_specs.2.edn @@ -0,0 +1,2 @@ +{:input 2 + :expectation 2} \ No newline at end of file diff --git a/test/src/data_test/file_loader_test.clj b/test/src/data_test/file_loader_test.clj index 24e7b3d..fdf60e2 100644 --- a/test/src/data_test/file_loader_test.clj +++ b/test/src/data_test/file_loader_test.clj @@ -46,7 +46,8 @@ (sut/data-test-spec-file-names ::test-it)))) (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"))))) (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"))))) (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)))) (deftest should-throw-exception diff --git a/test/src/data_test_test.clj b/test/src/data_test_test.clj index 06e6471..08b7ac2 100644 --- a/test/src/data_test_test.clj +++ b/test/src/data_test_test.clj @@ -40,6 +40,9 @@ ; ---------------------------- macro ----------------------------- (sut/defdatatest should-test-with-data-macro-version [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))))