#47 except, with-args, only, swap tests.. more to come
This commit is contained in:
parent
98496d63d8
commit
b77bef3457
2 changed files with 100 additions and 10 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
(ns mount.core
|
(ns mount.core
|
||||||
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro]
|
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro]
|
||||||
[mount.tools.logger :refer [log]]
|
[mount.tools.logger :refer [log]]
|
||||||
|
[clojure.set :refer [intersection]]
|
||||||
[clojure.string :as s])
|
[clojure.string :as s])
|
||||||
:cljs (:require [mount.tools.macro :as macro]
|
:cljs (:require [mount.tools.macro :as macro]
|
||||||
[mount.tools.logger :refer [log]]))
|
[mount.tools.logger :refer [log]]))
|
||||||
|
|
@ -250,11 +251,16 @@
|
||||||
|
|
||||||
;; composable set of states
|
;; composable set of states
|
||||||
|
|
||||||
|
(defn- mapset [f xs]
|
||||||
|
(-> (map f xs)
|
||||||
|
set))
|
||||||
|
|
||||||
(defn only
|
(defn only
|
||||||
([states]
|
([states]
|
||||||
states)
|
(only (find-all-states) states))
|
||||||
([states these]
|
([states these]
|
||||||
(filter these states)))
|
(intersection (mapset var-to-str these)
|
||||||
|
(mapset var-to-str states))))
|
||||||
|
|
||||||
(defn with-args
|
(defn with-args
|
||||||
([args]
|
([args]
|
||||||
|
|
@ -267,7 +273,8 @@
|
||||||
([states]
|
([states]
|
||||||
(except (find-all-states) states))
|
(except (find-all-states) states))
|
||||||
([states these]
|
([states these]
|
||||||
(remove these states)))
|
(remove (mapset var-to-str these)
|
||||||
|
(mapset var-to-str states))))
|
||||||
|
|
||||||
(defn swap
|
(defn swap
|
||||||
([with]
|
([with]
|
||||||
|
|
@ -287,13 +294,6 @@
|
||||||
(var-to-str to) :state))
|
(var-to-str to) :state))
|
||||||
states))
|
states))
|
||||||
|
|
||||||
#_(-> (only #{1 2 3 4})
|
|
||||||
(with-args {})
|
|
||||||
(except #{2 1})
|
|
||||||
(swap {2 42 1 34})
|
|
||||||
(swap-states {4 "#'foo.bar/42"})
|
|
||||||
(start))
|
|
||||||
|
|
||||||
;; explicit, not composable (subject to depreciate?)
|
;; explicit, not composable (subject to depreciate?)
|
||||||
|
|
||||||
(defn stop-except [& states]
|
(defn stop-except [& states]
|
||||||
|
|
|
||||||
90
test/core/mount/test/composable_fns.cljc
Normal file
90
test/core/mount/test/composable_fns.cljc
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
(ns mount.test.composable-fns
|
||||||
|
(:require
|
||||||
|
#?@(:cljs [[cljs.test :as t :refer-macros [is are deftest testing use-fixtures]]
|
||||||
|
[clojure.set :refer [intersection]]
|
||||||
|
[mount.core :refer [only except swap swap-states with-args] :as mount :refer-macros [defstate]]
|
||||||
|
[tapp.websockets :refer [system-a]]
|
||||||
|
[tapp.conf :refer [config]]
|
||||||
|
[tapp.audit-log :refer [log]]]
|
||||||
|
:clj [[clojure.test :as t :refer [is are deftest testing use-fixtures]]
|
||||||
|
[clojure.set :refer [intersection]]
|
||||||
|
[mount.core :as mount :refer [defstate only except swap swap-states with-args]]
|
||||||
|
[tapp.conf :refer [config]]
|
||||||
|
[tapp.nyse :refer [conn]]
|
||||||
|
[tapp.example :refer [nrepl]]])
|
||||||
|
[mount.test.helper :refer [dval helper]]))
|
||||||
|
|
||||||
|
#?(:clj (alter-meta! *ns* assoc ::load false))
|
||||||
|
|
||||||
|
(defstate test-conn :start 42
|
||||||
|
:stop (constantly 0))
|
||||||
|
|
||||||
|
(defstate test-nrepl :start [])
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(deftest only-states
|
||||||
|
|
||||||
|
(testing "only should only return given states.
|
||||||
|
if source set of states is not provided, it should use all the states to select from"
|
||||||
|
(is (= #{"#'mount.test.composable-fns/test-conn" "#'tapp.example/nrepl" "#'tapp.nyse/conn"}
|
||||||
|
(only #{"#'is.not/here" #'mount.test.composable-fns/test-conn #'tapp.example/nrepl #'tapp.nyse/conn}))))
|
||||||
|
|
||||||
|
(testing "only should only return given states"
|
||||||
|
(is (= #{"#'mount.test.composable-fns/test-conn" "#'tapp.example/nrepl"}
|
||||||
|
(only [#'mount.test.composable-fns/test-conn #'tapp.example/nrepl #'tapp.nyse/conn]
|
||||||
|
#{"#'is.not/here" #'mount.test.composable-fns/test-conn #'tapp.example/nrepl}))))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(deftest except-states
|
||||||
|
|
||||||
|
(testing "except should exclude given states.
|
||||||
|
if source set of states is not provided, it should use all the states to exclude from"
|
||||||
|
(let [states (except #{"#'is.not/here" #'tapp.example/nrepl #'tapp.nyse/conn})]
|
||||||
|
(is (coll? states))
|
||||||
|
(is (pos? (count states)))
|
||||||
|
(is (zero? (count (intersection (set states)
|
||||||
|
#{"#'tapp.example/nrepl" "#'tapp.nyse/conn" "#'is.not/here"}))))))
|
||||||
|
|
||||||
|
(testing "except should exclude given states"
|
||||||
|
(is (= #{"#'tapp.conf/config" "#'mount.test.composable-fns/test-conn"}
|
||||||
|
(set (except #{#'tapp.example/nrepl #'tapp.conf/config #'mount.test.composable-fns/test-conn}
|
||||||
|
#{"#'is.not/here" #'tapp.example/nrepl #'tapp.nyse/conn})))))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(deftest states-with-args
|
||||||
|
|
||||||
|
(testing "with-args should set args and return all states if none provided"
|
||||||
|
(let [states (with-args {:a 42})]
|
||||||
|
(is (= {:a 42} (mount/args)))
|
||||||
|
(is (= states (#'mount.core/find-all-states)))))
|
||||||
|
|
||||||
|
(testing "with-args should set args and thread states if provided"
|
||||||
|
(let [t-states #{"#'is.not/here" #'mount.test.composable-fns/test-conn #'tapp.example/nrepl #'tapp.nyse/conn}
|
||||||
|
states (with-args t-states {:a 42})]
|
||||||
|
(is (= {:a 42} (mount/args)))
|
||||||
|
(is (= states t-states))))))
|
||||||
|
|
||||||
|
#?(:clj
|
||||||
|
(deftest swap-states-with-values
|
||||||
|
|
||||||
|
(testing "swap should swap states with values and return all states if none is given"
|
||||||
|
(let [states (swap {#'tapp.nyse/conn "conn-sub"
|
||||||
|
#'tapp.example/nrepl :nrepl-sub})]
|
||||||
|
(is (= states (#'mount.core/find-all-states)))
|
||||||
|
(mount/start)
|
||||||
|
(is (map? (dval config)))
|
||||||
|
(is (= :nrepl-sub (dval nrepl)))
|
||||||
|
(is (= "conn-sub" (dval conn)))
|
||||||
|
(mount/stop)))
|
||||||
|
|
||||||
|
(testing "swap should swap states with values and return only states that it is given"
|
||||||
|
(let [t-states #{"#'is.not/here" #'mount.test.composable-fns/test-conn #'tapp.example/nrepl #'tapp.nyse/conn}
|
||||||
|
states (swap t-states {#'tapp.nyse/conn "conn-sub"
|
||||||
|
#'tapp.example/nrepl :nrepl-sub})]
|
||||||
|
(is (= states t-states))
|
||||||
|
(mount/start)
|
||||||
|
(is (map? (dval config)))
|
||||||
|
(is (= :nrepl-sub (dval nrepl)))
|
||||||
|
(is (= "conn-sub" (dval conn)))
|
||||||
|
(is (= 42 (dval test-conn)))
|
||||||
|
(mount/stop)))))
|
||||||
Loading…
Reference in a new issue