From 9fbdfb738432259af351ec8d30d53db557675045 Mon Sep 17 00:00:00 2001 From: jem Date: Fri, 24 May 2019 09:43:49 +0200 Subject: [PATCH] added the file loading infor to meta & separated file loading from test running --- main/src/data_test.clj | 23 ++++++---- main/src/data_test/file_loader.clj | 42 +++++++++++++++++++ main/src/data_test/runner.clj | 29 ++----------- .../data_test/file_loader_test/test_it.edn | 1 + .../should-test-with-data-record-version.edn | 2 - test/src/data_test/file_loader_test.clj | 37 ++++++++++++++++ test/src/data_test/runner_test.clj | 16 ------- test/src/data_test_test.clj | 4 +- 8 files changed, 101 insertions(+), 53 deletions(-) create mode 100644 main/src/data_test/file_loader.clj create mode 100644 test/resources/data_test/file_loader_test/test_it.edn delete mode 100644 test/resources/data_test_test/should-test-with-data-record-version.edn create mode 100644 test/src/data_test/file_loader_test.clj diff --git a/main/src/data_test.clj b/main/src/data_test.clj index c07f7b6..be8b6c6 100644 --- a/main/src/data_test.clj +++ b/main/src/data_test.clj @@ -17,17 +17,24 @@ (:require [clojure.test :as ct] [schema.core :as s] - [data-test.runner :as runner])) + [data-test.runner :as runner] + [data-test.file-loader :as fl])) + +(def TestDataSpec fl/TestDataSpec) (s/defn test-with-data [test-name :- s/Keyword] (runner/run-tests (runner/create-test-runner test-name))) (defmacro defdatatest [n & body] - `(clojure.test/deftest ~(symbol (name n)) - (let [namespaced-test-key# ~(keyword (str *ns*) (name n)) - file-prefix# (data-test.runner/data-file-prefix namespaced-test-key#) - testdata# (data-test.runner/load-test-data file-prefix#) - ~(symbol 'input) (:input testdata#) - ~(symbol 'expectation) (:expectation testdata#)] - ~@body))) + (when ct/*load-tests* + (let [namespaced-test-key# (keyword (str *ns*) (name n)) + file-prefix# (fl/data-file-prefix namespaced-test-key#)] + `(def ~(vary-meta n assoc + :test `(fn [] + (let [testdata# (fl/load-test-data ~file-prefix#) + ~(symbol 'input) (:input testdata#) + ~(symbol 'expectation) (:expectation testdata#)] + ~@body)) + :data-spec-prefix file-prefix#) + (fn [] (ct/test-var (var ~n))))))) diff --git a/main/src/data_test/file_loader.clj b/main/src/data_test/file_loader.clj new file mode 100644 index 0000000..bb974b9 --- /dev/null +++ b/main/src/data_test/file_loader.clj @@ -0,0 +1,42 @@ +; Licensed to the Apache Software Foundation (ASF) under one +; or more contributor license agreements. See the NOTICE file +; distributed with this work for additional information +; regarding copyright ownership. The ASF licenses this file +; to you under the Apache License, Version 2.0 (the +; "License"); you may not use this file except in compliance +; with the License. You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +(ns data-test.file-loader + (:require + [clojure.java.io :as io] + [clojure.string :as str] + [schema.core :as s] + [aero.core :as aero])) + +;TODO: replace schema with spec +(def TestDataSpec + {:input s/Any + :expectation s/Any}) + +(s/defn read-data :- TestDataSpec + [resource-url :- s/Str] + (aero/read-config resource-url)) + +(s/defn data-file-prefix :- s/Str + [name-key :- s/Keyword] + (str/replace + (str/replace (str (namespace name-key) "/" (name name-key)) + #"-" "_") + #"\." "/")) + +(s/defn load-test-data + [file-prefix :- s/Str] + (let [file-path (str file-prefix ".edn")] + (read-data (io/resource file-path)))) diff --git a/main/src/data_test/runner.clj b/main/src/data_test/runner.clj index 5e77023..eace2d4 100644 --- a/main/src/data_test/runner.clj +++ b/main/src/data_test/runner.clj @@ -15,15 +15,8 @@ ; limitations under the License. (ns data-test.runner (:require - [clojure.java.io :as io] - [clojure.string :as str] [schema.core :as s] - [aero.core :as aero])) - -;TODO: replace schema with spec -(def TestDataSet - {:input s/Any - :expectation s/Any}) + [data-test.file-loader :as fl])) (def TestResult {:input s/Any @@ -52,28 +45,12 @@ "Multimethod for data-test." dispatch-by-name) -(s/defn read-data :- TestDataSet - [resource-url :- s/Str] - (aero/read-config resource-url)) - -(s/defn data-file-prefix :- s/Str - [name-key :- s/Keyword] - (str/replace - (str/replace (str (namespace name-key) "/" (name name-key)) - #"-" "_") - #"\." "/")) - -(s/defn load-test-data - [file-prefix :- s/Str] - (let [file-path (str file-prefix ".edn")] - (read-data (io/resource file-path)))) - (extend-type TestRunner RunTest (name-prefix [_] - (data-file-prefix (:name _))) + (fl/data-file-prefix (:name _))) (run-tests [_] - (let [testdata (load-test-data (data-file-prefix (:name _))) + (let [testdata (fl/load-test-data (fl/data-file-prefix (:name _))) {:keys [input expectation]} testdata] (data-test _ input expectation)))) diff --git a/test/resources/data_test/file_loader_test/test_it.edn b/test/resources/data_test/file_loader_test/test_it.edn new file mode 100644 index 0000000..e85d33d --- /dev/null +++ b/test/resources/data_test/file_loader_test/test_it.edn @@ -0,0 +1 @@ +{:test "data"} \ No newline at end of file diff --git a/test/resources/data_test_test/should-test-with-data-record-version.edn b/test/resources/data_test_test/should-test-with-data-record-version.edn deleted file mode 100644 index 030c81f..0000000 --- a/test/resources/data_test_test/should-test-with-data-record-version.edn +++ /dev/null @@ -1,2 +0,0 @@ -{:input 1 - :expectation 1} \ 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 new file mode 100644 index 0000000..1c46dec --- /dev/null +++ b/test/src/data_test/file_loader_test.clj @@ -0,0 +1,37 @@ +; Licensed to the Apache Software Foundation (ASF) under one +; or more contributor license agreements. See the NOTICE file +; distributed with this work for additional information +; regarding copyright ownership. The ASF licenses this file +; to you under the Apache License, Version 2.0 (the +; "License"); you may not use this file except in compliance +; with the License. You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +(ns data-test.file-loader-test + (:require + [clojure.test :refer :all] + [clojure.java.io :as io] + [schema.core :as s] + [data-test.file-loader :as sut])) + +(deftest should-read-data + (is (= {:simple "test"} + (sut/read-data (io/resource "simple_aero.edn")))) + (is (= {:to-be-refernced "ref-test", :key1 "ref-test", :key2 "ref-test"} + (sut/read-data (io/resource "tagged_aero.edn")))) + ) + +(deftest should-calculate-data-file-prefix + (is (= "data_test/file_loader_test/test_it" + (sut/data-file-prefix ::test-it)))) + +(deftest should-load-data + (is (= {:test "data"} + (sut/load-test-data (sut/data-file-prefix ::test-it))))) + diff --git a/test/src/data_test/runner_test.clj b/test/src/data_test/runner_test.clj index e7ac182..916470f 100644 --- a/test/src/data_test/runner_test.clj +++ b/test/src/data_test/runner_test.clj @@ -15,26 +15,10 @@ ; limitations under the License. (ns data-test.runner-test (:require - [clojure.java.io :as io] [clojure.test :refer :all] [schema.core :as s] [data-test.runner :as sut])) -(deftest should-read-data - (is (= {:simple "test"} - (sut/read-data (io/resource "simple_aero.edn")))) - (is (= {:to-be-refernced "ref-test", :key1 "ref-test", :key2 "ref-test"} - (sut/read-data (io/resource "tagged_aero.edn")))) - ) - -(deftest should-calculate-data-file-prefix - (is (= "data_test/runner_test/test_it" - (sut/data-file-prefix ::test-it)))) - -(deftest should-load-data - (is (= {:test "data"} - (sut/load-test-data (sut/data-file-prefix ::test-it))))) - (s/defmethod sut/data-test ::test-it [_ input :- s/Any expectation :- s/Any] "my-result") diff --git a/test/src/data_test_test.clj b/test/src/data_test_test.clj index e713b42..a88369b 100644 --- a/test/src/data_test_test.clj +++ b/test/src/data_test_test.clj @@ -37,7 +37,9 @@ (is (sut/test-with-data ::should-test-with-data-record-version))) ; ---------------------------- macro ----------------------------- -(sut/defdatatest should-test-with-data-macro-version (is (= input expectation))) +;(sut/defdatatest should-test-with-data-macro-version (is (= input expectation))) + +(sut/defdatatest2 should-test-with-data-macro-version (is (= input expectation))) (macroexpand-1 '(sut/defdatatest should-test-with-data-macro-version (is (= 1 1))))