Add orchestra tests
This commit is contained in:
parent
19ad756261
commit
4f21669f6b
7 changed files with 340 additions and 1 deletions
4
deps.edn
4
deps.edn
|
|
@ -96,7 +96,9 @@
|
||||||
better-cond/better-cond {:mvn/version "2.1.1"}
|
better-cond/better-cond {:mvn/version "2.1.1"}
|
||||||
org.clojure/core.specs.alpha {:mvn/version "0.2.62"}
|
org.clojure/core.specs.alpha {:mvn/version "0.2.62"}
|
||||||
reifyhealth/specmonstah {:mvn/version "2.0.0"}
|
reifyhealth/specmonstah {:mvn/version "2.0.0"}
|
||||||
exoscale/coax {:mvn/version "1.0.0-alpha14"}}
|
exoscale/coax {:mvn/version "1.0.0-alpha14"}
|
||||||
|
orchestra/orchestra {:mvn/version "2021.01.01-1"}
|
||||||
|
expound/expound {:mvn/version "0.8.10"}}
|
||||||
:classpath-overrides {org.clojure/clojure nil
|
:classpath-overrides {org.clojure/clojure nil
|
||||||
org.clojure/spec.alpha nil}}
|
org.clojure/spec.alpha nil}}
|
||||||
:clj-nvd
|
:clj-nvd
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,8 @@
|
||||||
(test-namespaces 'better-cond.core-test)
|
(test-namespaces 'better-cond.core-test)
|
||||||
|
|
||||||
(test-namespaces 'exoscale.coax-test)
|
(test-namespaces 'exoscale.coax-test)
|
||||||
|
|
||||||
|
(test-namespaces 'orchestra.core-test 'orchestra.expound-test 'orchestra.many-fns 'orchestra.reload-test)
|
||||||
;; TODO, after @cldwalker finishes PR to specmonstah (test-namespaces 'reifyhealth.specmonstah.core-test)
|
;; TODO, after @cldwalker finishes PR to specmonstah (test-namespaces 'reifyhealth.specmonstah.core-test)
|
||||||
|
|
||||||
;;;; final exit code
|
;;;; final exit code
|
||||||
|
|
|
||||||
258
test-resources/lib_tests/orchestra/core_test.cljc
Normal file
258
test-resources/lib_tests/orchestra/core_test.cljc
Normal file
|
|
@ -0,0 +1,258 @@
|
||||||
|
(ns orchestra.core-test
|
||||||
|
(:require #?@(:clj [[clojure.test :refer :all]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[clojure.spec.test.alpha :as cst]
|
||||||
|
[orchestra.spec.test :as st]
|
||||||
|
[orchestra.core :refer [defn-spec]]]
|
||||||
|
|
||||||
|
:cljs [[cljs.test
|
||||||
|
:refer-macros [deftest testing is use-fixtures]]
|
||||||
|
[cljs.spec.alpha :as s]
|
||||||
|
[cljs.spec.test.alpha :as cst]
|
||||||
|
[orchestra-cljs.spec.test :as st]
|
||||||
|
[orchestra.core :refer-macros [defn-spec]]])))
|
||||||
|
|
||||||
|
(defn-spec args' true?
|
||||||
|
[meow string?]
|
||||||
|
true)
|
||||||
|
|
||||||
|
(deftest args
|
||||||
|
(testing "Positive"
|
||||||
|
(is (args' "meow")))
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(args' 42)))))
|
||||||
|
|
||||||
|
(defn-spec ret' integer?
|
||||||
|
[meow any?]
|
||||||
|
meow)
|
||||||
|
|
||||||
|
(deftest ret
|
||||||
|
(testing "Positive"
|
||||||
|
(is (= 42 (ret' 42))))
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(ret' true)))))
|
||||||
|
|
||||||
|
(defn-spec func' number?
|
||||||
|
{:fn #(= (:ret %) (-> % :args :meow))}
|
||||||
|
[meow number?]
|
||||||
|
(Math/abs meow))
|
||||||
|
|
||||||
|
(deftest func
|
||||||
|
(testing "Positive"
|
||||||
|
(is (= 42 (func' 42))))
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(func' -42)))))
|
||||||
|
|
||||||
|
(defn-spec full' number?
|
||||||
|
{:fn #(let [meow (-> % :args :meow)
|
||||||
|
ret (:ret %)]
|
||||||
|
(or (= ret meow)
|
||||||
|
(and (< meow 0)
|
||||||
|
(= (- ret) meow))))}
|
||||||
|
[meow number?]
|
||||||
|
(Math/abs meow))
|
||||||
|
|
||||||
|
(deftest full
|
||||||
|
(testing "Positive"
|
||||||
|
(is (full' 0))
|
||||||
|
(is (full' -10))))
|
||||||
|
|
||||||
|
(defn-spec destruct-map' number?
|
||||||
|
[{:keys [a b]} (s/map-of keyword? number?)]
|
||||||
|
(+ a b))
|
||||||
|
|
||||||
|
(deftest destruct-map
|
||||||
|
(testing "Positive"
|
||||||
|
(is (= 42 (destruct-map' {:a 30 :b 12}))))
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(destruct-map' nil)))))
|
||||||
|
|
||||||
|
(defn-spec doc-string' nil?
|
||||||
|
"Doc strings also work just fine."
|
||||||
|
[]
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(deftest doc-string
|
||||||
|
(testing "Invocation"
|
||||||
|
(is (nil? (doc-string'))))
|
||||||
|
(testing "Meta"
|
||||||
|
(is (= "Doc strings also work just fine."
|
||||||
|
(-> #'doc-string' meta :doc)))))
|
||||||
|
|
||||||
|
(defn-spec metadata' nil?
|
||||||
|
"Docstring"
|
||||||
|
{:test-meta true}
|
||||||
|
[]
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(deftest metadata
|
||||||
|
(testing "Invocation"
|
||||||
|
(is (nil? (metadata'))))
|
||||||
|
(testing "Preserves metadata"
|
||||||
|
(is (:test-meta (meta #'metadata')))
|
||||||
|
(is (= "Docstring" (-> #'metadata' meta :doc)))))
|
||||||
|
|
||||||
|
; Blocked on a ClojureScript bug for now
|
||||||
|
(defn-spec arities' number?
|
||||||
|
([a number?]
|
||||||
|
(inc a))
|
||||||
|
([a number?, b number?]
|
||||||
|
(+ a b))
|
||||||
|
([a string?, b boolean?, c map?]
|
||||||
|
0))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(deftest arities
|
||||||
|
(testing "Arity-1 Positive"
|
||||||
|
(is (= 2 (arities' 1))))
|
||||||
|
(testing "Arity-1 Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(arities' false))))
|
||||||
|
|
||||||
|
(testing "Arity-2 Positive"
|
||||||
|
(is (= 6 (arities' 1 5))))
|
||||||
|
(testing "Arity-2 Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(arities' "bad" nil))))
|
||||||
|
|
||||||
|
(testing "Arity-3 Positive"
|
||||||
|
(is (= 0 (arities' "" true {}))))
|
||||||
|
(testing "Arity-3 Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(arities' nil nil nil))))))
|
||||||
|
|
||||||
|
(defn-spec sum' number?
|
||||||
|
([a number?]
|
||||||
|
a)
|
||||||
|
; Varargs are also supported.
|
||||||
|
([a number?, b number?, & args (s/* number?)]
|
||||||
|
(apply + a b args)))
|
||||||
|
|
||||||
|
#?(:clj (deftest sum
|
||||||
|
(testing "Arity-1 Positive"
|
||||||
|
(is (= 5 (sum' 5))))
|
||||||
|
(testing "Arity-1 Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(sum' nil))))
|
||||||
|
|
||||||
|
(testing "Arity-n Positive"
|
||||||
|
(is (= 25 (apply sum' (repeat 5 5)))))
|
||||||
|
(testing "Arity-n Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(apply sum' (repeat 5 :not-a-number)))))))
|
||||||
|
|
||||||
|
(defn-spec wrap-single-arity' nil?
|
||||||
|
([]
|
||||||
|
nil))
|
||||||
|
|
||||||
|
(deftest wrap-single-arity
|
||||||
|
(testing "Positive"
|
||||||
|
(is (nil? (wrap-single-arity')))))
|
||||||
|
|
||||||
|
(s/def ::cat-arg (s/cat :first keyword? :rest (s/* any?)))
|
||||||
|
(defn-spec cat-arg nil?
|
||||||
|
[a ::cat-arg]
|
||||||
|
nil)
|
||||||
|
(defn-spec cat-args nil?
|
||||||
|
[a ::cat-arg, & args (s/* any?)]
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(deftest wrap-args-in-spec
|
||||||
|
(testing "Non-vararg Positive"
|
||||||
|
(is (nil? (cat-arg [:ok]))))
|
||||||
|
(testing "Non-vararg Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(cat-arg 1))))
|
||||||
|
(testing "Vararg Positive"
|
||||||
|
(is (nil? (cat-args [:ok :anything "goes" 'here 12]))))
|
||||||
|
(testing "Vararg Negative Int"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(cat-args 1))))
|
||||||
|
(testing "Vararg Negative Seq"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(cat-args ["not a keyword" :the-rest 'does-not-matter 1.2])))))
|
||||||
|
|
||||||
|
(defn empty-spec'
|
||||||
|
[meow]
|
||||||
|
(Math/abs meow))
|
||||||
|
(s/fdef empty')
|
||||||
|
|
||||||
|
(deftest empty-spec
|
||||||
|
(testing "Positive"
|
||||||
|
(is (empty-spec' 0))))
|
||||||
|
|
||||||
|
(defn func-no-args-spec
|
||||||
|
[meow]
|
||||||
|
(Math/abs meow))
|
||||||
|
(s/fdef func-no-args-spec
|
||||||
|
:fn #(= (:ret %) (-> % :args :meow)))
|
||||||
|
|
||||||
|
(deftest func-negative
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default)
|
||||||
|
(func-no-args-spec -42)))))
|
||||||
|
|
||||||
|
(deftest disabled
|
||||||
|
(testing "Positive"
|
||||||
|
(cst/with-instrument-disabled
|
||||||
|
(is (func-no-args-spec -42)))))
|
||||||
|
|
||||||
|
(defn-spec conform-ret-into-fn (s/or :error #{:error}
|
||||||
|
:success string?)
|
||||||
|
{:fn #(condp = (-> % :ret key)
|
||||||
|
:success (and (clojure.string/starts-with? (-> % :ret val)
|
||||||
|
"your-")
|
||||||
|
(clojure.string/ends-with? (-> % :ret val)
|
||||||
|
(-> % :args :string)))
|
||||||
|
true)}
|
||||||
|
[string string?]
|
||||||
|
(str "your-" string))
|
||||||
|
|
||||||
|
(deftest conform-ret-into-fn-test
|
||||||
|
(is (conform-ret-into-fn "Hello")))
|
||||||
|
|
||||||
|
(defn-spec var-is-added' nil?
|
||||||
|
[]
|
||||||
|
:not-nil)
|
||||||
|
|
||||||
|
(deftest var-is-added
|
||||||
|
(testing "Positive"
|
||||||
|
(try
|
||||||
|
(var-is-added')
|
||||||
|
(is false "Exception should've been thrown")
|
||||||
|
(catch #?(:clj RuntimeException :cljs :default) ex
|
||||||
|
(is (= `var-is-added' (-> ex ex-data ::s/fn)))))))
|
||||||
|
|
||||||
|
(defn-spec arities-work-fine' integer?
|
||||||
|
([]
|
||||||
|
0)
|
||||||
|
([i integer?]
|
||||||
|
i))
|
||||||
|
|
||||||
|
(deftest arities-work-fine
|
||||||
|
(testing "Positive"
|
||||||
|
(is (= 0 (arities-work-fine')))
|
||||||
|
(is (= 777 (arities-work-fine' 777)))))
|
||||||
|
|
||||||
|
(defn-spec keyword-args-work-fine' vector?
|
||||||
|
[& {:keys [a b]} (s/keys* :req-un [::a ::b])]
|
||||||
|
[a b])
|
||||||
|
|
||||||
|
(deftest keyword-args-work-fine
|
||||||
|
(testing "Positive"
|
||||||
|
(is (= [1 2] (keyword-args-work-fine' :a 1 :b 2)))
|
||||||
|
(is (= [1 2] (keyword-args-work-fine' :b 2 :a 1))))
|
||||||
|
|
||||||
|
(testing "Negative"
|
||||||
|
(is (thrown? #?(:clj RuntimeException :cljs :default) (keyword-args-work-fine' :b 2)))))
|
||||||
|
|
||||||
|
(defn-spec instrument-fixture any?
|
||||||
|
[f fn?]
|
||||||
|
(st/unstrument)
|
||||||
|
(st/instrument)
|
||||||
|
(f))
|
||||||
|
(use-fixtures :each instrument-fixture)
|
||||||
35
test-resources/lib_tests/orchestra/expound_test.cljc
Normal file
35
test-resources/lib_tests/orchestra/expound_test.cljc
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
(ns orchestra.expound-test
|
||||||
|
(:require #?@(:clj [[clojure.test :refer :all]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[orchestra.spec.test :as st]
|
||||||
|
[orchestra.core :refer [defn-spec]]]
|
||||||
|
|
||||||
|
:cljs [[cljs.test
|
||||||
|
:refer-macros [deftest testing is use-fixtures]]
|
||||||
|
[cljs.spec.alpha :as s]
|
||||||
|
[orchestra-cljs.spec.test :as st]
|
||||||
|
[orchestra.core :refer-macros [defn-spec]]])
|
||||||
|
|
||||||
|
[expound.alpha :as expound]))
|
||||||
|
|
||||||
|
(defn-spec instrument-fixture any?
|
||||||
|
[f fn?]
|
||||||
|
(st/unstrument)
|
||||||
|
(st/instrument)
|
||||||
|
(binding [s/*explain-out* expound/printer]
|
||||||
|
(f)))
|
||||||
|
(use-fixtures :each instrument-fixture)
|
||||||
|
|
||||||
|
(defn-spec expound' true?
|
||||||
|
[blah string?]
|
||||||
|
true)
|
||||||
|
|
||||||
|
(deftest expound
|
||||||
|
(testing "Pretty printed"
|
||||||
|
(try
|
||||||
|
(expound' 42)
|
||||||
|
(catch #?(:clj RuntimeException :cljs :default) e
|
||||||
|
(is (some? (-> (ex-data e)
|
||||||
|
s/explain-out
|
||||||
|
with-out-str
|
||||||
|
(clojure.string/includes? "-- Spec failed --"))))))))
|
||||||
15
test-resources/lib_tests/orchestra/make_fns.cljc
Normal file
15
test-resources/lib_tests/orchestra/make_fns.cljc
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
(ns orchestra.make-fns
|
||||||
|
(:require #?@(:clj [[clojure.spec.alpha :as s]]
|
||||||
|
:cljs [[cljs.spec.alpha :as s]])))
|
||||||
|
|
||||||
|
#?(:clj (defmacro make-fns [fn-count]
|
||||||
|
(let [cljs? (-> &env :ns some?)]
|
||||||
|
`(do
|
||||||
|
~@(for [i (range fn-count)]
|
||||||
|
(let [fn-name (symbol (str "fn-" i))]
|
||||||
|
`(do
|
||||||
|
(defn ~fn-name []
|
||||||
|
(str ~fn-name))
|
||||||
|
(~(if cljs?
|
||||||
|
'cljs.spec.alpha/fdef
|
||||||
|
's/fdef) ~fn-name))))))))
|
||||||
18
test-resources/lib_tests/orchestra/many_fns.cljc
Normal file
18
test-resources/lib_tests/orchestra/many_fns.cljc
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
(ns orchestra.many-fns
|
||||||
|
(:require #?@(:clj [[clojure.test :refer :all]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[orchestra.spec.test :as st]
|
||||||
|
[orchestra.core :refer [defn-spec]]
|
||||||
|
[orchestra.make-fns :refer [make-fns]]]
|
||||||
|
|
||||||
|
:cljs [[cljs.test
|
||||||
|
:refer-macros [deftest testing is use-fixtures]]
|
||||||
|
[cljs.spec.alpha :as s]
|
||||||
|
[orchestra-cljs.spec.test :as st]
|
||||||
|
[orchestra.core :refer-macros [defn-spec]]
|
||||||
|
[orchestra.make-fns :refer-macros [make-fns]]])))
|
||||||
|
|
||||||
|
(make-fns 2000)
|
||||||
|
|
||||||
|
(deftest many-fns
|
||||||
|
(st/instrument))
|
||||||
9
test-resources/lib_tests/orchestra/reload_test.cljc
Normal file
9
test-resources/lib_tests/orchestra/reload_test.cljc
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
(ns orchestra.reload-test
|
||||||
|
(:require [clojure.test :refer :all]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[orchestra.spec.test :refer :all]))
|
||||||
|
|
||||||
|
(deftest in-place-reload
|
||||||
|
(testing "Positive"
|
||||||
|
(dotimes [_ 5]
|
||||||
|
(require 'orchestra.spec.test :reload-all))))
|
||||||
Loading…
Reference in a new issue