(import testament :prefix "" :exit true) (import /src/generators) (defn- parent [] @{:send (fn [self res] (put self :res res))}) (defn path-builder [data item] (string "test/out/" (item :topic))) (defn exclaim [data item] (string (item :topic) "!")) (defn base-path [data] "test/out/world.html") (defn hello-world [data] (string "Hello " (get-in data [:world :contents]) "!")) (def sample-data {:pages [{:topic "test-topic"}]}) (def path-data {:pages [{:topic "test-topic" :path "/pages/page.md"}]}) (def base-data {:world {:contents "world!"}}) (def some-data {:world {:path "/pages/world.md"}}) (deftest render-each-generator (let [spec {:each :pages :dest path-builder :out exclaim} generator (generators/from-spec spec "render each test" sample-data) [_ _ out] ((generator (parent)) :res)] (is (== @[[:write "test/out/test-topic" "test-topic!"]] out)))) (deftest copy-each-generator (let [spec {:each :pages :dest path-builder} generator (generators/from-spec spec "copy each test" sample-data)] (assert-thrown ((generator (parent))))) (let [spec {:each :pages :dest path-builder} generator (generators/from-spec spec "copy each test" path-data) [_ _ out] ((generator (parent)) :res)] (is (== @[[:copy "/pages/page.md" "test/out/test-topic"]] out)))) (deftest render-generator (let [spec {:dest base-path :out hello-world} generator (generators/from-spec spec "render generator" base-data) [_ _ out] ((generator (parent)) :res)] (is (== @[[:write "test/out/world.html" "Hello world!!"]] out)))) (deftest copy-some-generator (let [spec {:some :world :dest base-path} generator (generators/from-spec spec "copy some test" base-data)] (assert-thrown ((generator (parent))))) (let [spec {:some :world :dest base-path} generator (generators/from-spec spec "copy some test" some-data) [_ _ out] ((generator (parent)) :res)] (is (== @[[:copy "/pages/world.md" "test/out/world.html"]] out)))) (run-tests!)