babashka/test-resources/lib_tests/testdoc/core_test.clj

134 lines
3.3 KiB
Clojure
Raw Normal View History

(ns testdoc.core-test
(:require
[clojure.java.io :as io]
[clojure.test :as t]
[testdoc.core :as sut]))
(defn- repl-styled-success-test-func
"foo bar
=> (+ 1 2 3)
6
=> (+ 1 2
=> 3 4)
10
=> *1
10
=> (inc *1)
11"
[])
(defn- code-first-styled-success-test-func
"foo bar
(+ 1 2 3)
;; => 6
(+ 1 2
3 4)
;; => 10
*1
;; => 10
(inc *1)
;; => 11"
[])
(defn- repl-styled-partial-success-test-func
"foo bar
=> (+ 1 2 3)
6
=> (+ 1 2 3 4)
999"
[])
(defn- code-first-styled-partial-success-test-func
"foo bar
(+ 1 2 3)
;; => 6
(+ 1 2 3 4)
;; => 999"
[])
(t/deftest testdoc-test
(t/testing "repl style"
(t/is (= [{:type :pass :expected 6 :actual 6}
{:type :pass :expected 10 :actual 10}
{:type :pass :expected 10 :actual 10}
{:type :pass :expected 11 :actual 11}]
(->> (sut/testdoc nil #'repl-styled-success-test-func)
(map #(select-keys % [:type :expected :actual]))
(sort-by :expected))))
(t/is (= [{:type :pass :expected 6 :actual 6}
{:type :fail :expected 999 :actual 10}]
(->> (sut/testdoc nil #'repl-styled-partial-success-test-func)
(map #(select-keys % [:type :expected :actual]))
(sort-by :expected)))))
(t/testing "code-first style"
(t/is (= [{:type :pass :expected 6 :actual 6}
{:type :pass :expected 10 :actual 10}
{:type :pass :expected 10 :actual 10}
{:type :pass :expected 11 :actual 11}]
(->> (sut/testdoc nil #'code-first-styled-success-test-func)
(map #(select-keys % [:type :expected :actual]))
(sort-by :expected))))
(t/is (= [{:type :pass :expected 6 :actual 6}
{:type :fail :expected 999 :actual 10}]
(->> (sut/testdoc nil #'code-first-styled-partial-success-test-func)
(map #(select-keys % [:type :expected :actual]))
(sort-by :expected))))))
(t/deftest testdoc-unsupported-test
(let [[result :as results] (sut/testdoc nil 123)]
(t/is (= 1 (count results)))
(t/is (= :fail (:type result)))
(t/is (re-seq #"^Unsupported document:" (:message result)))))
(defn plus
"Add a and b
=> (plus 1 2)
3
=> (plus 2
=> 3)
5"
[a b]
(+ a b))
(t/deftest plus-test
(t/is (testdoc #'plus)))
(t/deftest plus-string-test
(t/is (testdoc "=> (require '[testdoc.core-test :as ct])
nil
=> (ct/plus 1 2)
3
=> (ct/plus 2
=> 3)
5")))
(t/deftest nil-value-test
(t/is (= [{:type :fail :message "(= 1 nil)" :expected nil :actual 1}]
(sut/testdoc nil "=> 1
nil"))))
(t/deftest unresolved-symbol-test
(let [[err :as res] (sut/testdoc nil "
=> (unresolved-fn 10)
11")]
(t/is (= 1 (count res)))
(t/is (= :fail (:type err)))
(t/is (every? #(some? (get err %)) [:type :message :expected :actual]))
(t/is (= "(= (unresolved-fn 10) 11), [line: 2]" (:message err)))))
(t/deftest debug-test
(with-out-str
(t/is (testdoc #'sut/debug))))
(t/deftest README-test
(t/is (testdoc (slurp (io/file "README.md")))))