Merge testing of libs into one babashka process (#485)

This commit is contained in:
Michiel Borkent 2020-06-17 13:30:22 +02:00 committed by GitHub
parent 4a126be2c6
commit ee8508d320
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 194 additions and 449 deletions

View file

@ -22,7 +22,7 @@ jobs:
git submodule update
- restore_cache:
keys:
- v1-dependencies-{{ checksum "project.clj" }}
- v1-dependencies-{{ checksum "project.clj" }}-{{ checksum "deps.edn" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
@ -63,7 +63,7 @@ jobs:
- save_cache:
paths:
- ~/.m2
key: v1-dependencies-{{ checksum "project.clj" }}
key: v1-dependencies-{{ checksum "project.clj" }}-{{ checksum "deps.edn" }}
linux:
docker:
- image: circleci/clojure:lein-2.9.1

View file

@ -31,4 +31,28 @@
:jvm-opts ["-Djdk.attach.allowAttachSelf"]
:main-opts ["-m" "babashka.profile"]}
:lib-tests
{:extra-deps {minimallist {:mvn/version "0.0.1"}}}}}
{:extra-deps {clj-http-lite
{:git/url "https://github.com/babashka/clj-http-lite"
:sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"}
spartan.spec {:git/url "https://github.com/borkdude/spartan.spec"
:sha "16f7eec4b6589c77c96c9fcf989f78fffcee7c4c"}
regal {:git/url "https://github.com/lambdaisland/regal"
:sha "b059fdb06d5586a9a04c27e7b011c467ad8546db"}
medley {:git/url "https://github.com/weavejester/medley"
:sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}
babasha.curl {:local/root "babashka.curl"}
cprop {:mvn/version "0.1.16"}
comb {:mvn/version "0.1.1"}
mvxcvi/arrangement {:mvn/version "1.2.0"}
org.clojure/data.zip {:mvn/version "1.0.0"}
clojure-csv {:mvn/version "2.0.2"}
org.clojure/math.combinatorics {:mvn/version "0.1.6"}
doric {:mvn/version "0.9.0"}
cljc.java-time
{:git/url "https://github.com/henryw374/cljc.java-time.git"
:sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"}
camel-snake-kebab {:mvn/version "0.4.1"}
aero {:mvn/version "1.1.6"}
org.clojure/data.generators {:mvn/version "1.0.0"}
honeysql {:mvn/version "1.0.444"}
minimallist {:mvn/version "0.0.1"}}}}}

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {aero {:mvn/version "1.1.6"}}}' -Spath)
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[aero.core-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'aero.core-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,13 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {mvxcvi/arrangement {:mvn/version "1.2.0"}}}' -Spath)
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -e "(require '[arrangement.core :as order]) (sort order/rank ['a false 2 :b nil 3.14159 \"c\" true \d [3 2] #{:one :two} [3 1 2] #{:three}])"

View file

@ -1,33 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {babasha.curl {:local/root "babashka.curl"}}}' -Spath)
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -e "
(require '[babashka.curl :as curl] :reload-all)
(prn (:status (curl/get \"https://www.clojure.org\")))
(prn (:status (curl/get \"https://postman-echo.com/get?foo1=bar1&foo2=bar2\")))
(prn (:status (curl/post \"https://postman-echo.com/post\")))
(prn (:status (curl/post \"https://postman-echo.com/post\"
{:body (json/generate-string {:a 1})
:headers {\"X-Hasura-Role\" \"admin\"}
:content-type :json
:accept :json})))
(prn (:status (curl/put \"https://postman-echo.com/put\"
{:body (json/generate-string {:a 1})
:headers {\"X-Hasura-Role\" \"admin\"}
:content-type :json
:accept :json})))
"

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {camel-snake-kebab {:mvn/version "0.4.1"}}}' -Spath)
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[camel-snake-kebab.core-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'camel-snake-kebab.core-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,33 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {clj-http-lite {:git/url "https://github.com/babashka/clj-http-lite" :sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"}}}' -Spath)
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -e "
(require '[clj-http.lite.client :as client])
(prn (:status (client/get \"https://www.clojure.org\")))
(prn (:status (client/get \"https://postman-echo.com/get?foo1=bar1&foo2=bar2\")))
(prn (:status (client/post \"https://postman-echo.com/post\")))
(prn (:status (client/post \"https://postman-echo.com/post\"
{:body (json/generate-string {:a 1})
:headers {\"X-Hasura-Role\" \"admin\"}
:content-type :json
:accept :json})))
(prn (:status (client/put \"https://postman-echo.com/put\"
{:body (json/generate-string {:a 1})
:headers {\"X-Hasura-Role\" \"admin\"}
:content-type :json
:accept :json})))
"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -cp test-resources/lib_tests -e "
(require '[clojure.java.io :as io])
(require '[clj-yaml.core-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'clj-yaml.core-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,22 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {cljc.java-time {:git/url "https://github.com/henryw374/cljc.java-time.git" :sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"}}}' -Spath)"
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[clojure.java.io :as io])
(require '[cljc.java-time-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'cljc.java-time-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,16 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {clojure-csv {:mvn/version "RELEASE"}}}' -Spath)"
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -e "
(require '[clojure-csv.core :as csv])
(prn (csv/write-csv (csv/parse-csv \"a,b,c\n1,2,3\")))
"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -cp test-resources/lib_tests -e "
(require '[clojure.java.io :as io])
(require '[clojure.data.csv-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'clojure.data.csv-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {org.clojure/data.generators {:mvn/version "1.0.0"}}}' -Spath)
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[clojure.data.generators-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'clojure.data.generators-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,28 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {org.clojure/data.zip {:mvn/version "1.0.0"}}}' -Spath)"
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD --verbose "
(require '[clojure.data.xml :as xml])
(require '[clojure.zip :as zip])
(require '[clojure.data.zip.xml :refer [text attr attr= xml-> xml1-> text=]])
(def data (str \"<root>\"
\" <character type=\\\"person\\\" name=\\\"alice\\\" />\"
\" <character type=\\\"animal\\\" name=\\\"march hare\\\" />\"
\"</root>\"))
;(prn :data data)
(let [xml (zip/xml-zip (xml/parse (java.io.StringReader. data)))]
;(prn :xml xml)
(prn :alice-is-a (xml1-> xml :character [(attr= :name \"alice\")] (attr :type)))
(prn :animal-is-called (xml1-> xml :character [(attr= :type \"animal\")] (attr :name))))
"

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {comb {:mvn/version "0.1.1"}}}')
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD '
(ns foo (:require [comb.template :as template]))
(prn (template/eval "<% (dotimes [x 3] %>foo<% ) %>"))
(prn (template/eval "Hello <%= name %>" {:name "Alice"}))
(def hello
(template/fn [name] "Hello <%= name %>"))
(prn (hello "Alice"))
'

View file

@ -1,20 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {org.clojure/math.combinatorics {:mvn/version "0.1.6"}}}' -Spath)
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -cp "test-resources/lib_tests:$BABASHKA_CLASSPATH" -e "
(require '[clojure.math.test-combinatorics])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'clojure.math.test-combinatorics)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,18 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {cprop {:mvn/version "0.1.16"}}}')
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
CPROP_ENV="hello" $BB_CMD "
(require '[cprop.core :refer [load-config]])
(require '[cprop.source :refer [from-system-props from-env]])
(println (:cprop-env (from-env)))
"

View file

@ -1,15 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
curl -sL https://raw.githubusercontent.com/borkdude/deps.clj/master/deps.clj -o deps_test.clj
chmod +x deps_test.clj
$BB_CMD deps_test.clj -Sdescribe
rm deps_test.clj

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH="$(clojure -Spath -Sdeps '{:deps {doric {:mvn/version "0.9.0"}}}')"
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[doric.test.core])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]} (t/run-tests 'doric.test.core)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
export BABASHKA_CLASSPATH
BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {honeysql {:mvn/version "1.0.444"}}}' -Spath)
$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e "
(require '[honeysql.core-test])
(require '[honeysql.format-test])
(require '[clojure.test :as t])
(let [{:keys [:test :pass :fail :error]}
(t/run-tests 'honeysql.core-test 'honeysql.format-test)]
(when-not (pos? test)
(System/exit 1))
(System/exit (+ fail error)))
"

View file

@ -1,17 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {medley {:git/url "https://github.com/weavejester/medley" :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}}}' -Spath)"
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD "
(require '[medley.core :refer [index-by random-uuid]])
(prn (index-by :id [{:id 1} {:id 2}]))
(prn (random-uuid))
"

View file

@ -1,22 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {regal {:git/url "https://github.com/lambdaisland/regal" :sha "b059fdb06d5586a9a04c27e7b011c467ad8546db"}}}' -Spath)"
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD "
(require '[lambdaisland.regal :as regal])
(def r [:cat
[:+ [:class [\a \z]]]
\"=\"
[:+ [:not \=]]])
(prn (regal/regex r))
(prn (re-matches (regal/regex r) \"foo=bar\"))
"

View file

@ -1,17 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {spartan.spec {:git/url "https://github.com/borkdude/spartan.spec" :sha "16f7eec4b6589c77c96c9fcf989f78fffcee7c4c"}}}' -Spath)
if [ "$BABASHKA_TEST_ENV" = "native" ]; then
BB_CMD="./bb"
else
BB_CMD="lein bb"
fi
$BB_CMD -e "
(time (require '[spartan.spec :as s]))
(time (s/explain (s/cat :i int? :s string?) [1 :foo]))
(time (s/conform (s/cat :i int? :s string?) [1 \"foo\"]))
"

View file

@ -8,24 +8,4 @@ then
export PATH=$GRAALVM_HOME/bin:$PATH
fi
script/lib_tests/clj_http_lite_test
script/lib_tests/deps_clj_test
script/lib_tests/spartan_spec_test
script/lib_tests/clojure_csv_test
script/lib_tests/regal_test
script/lib_tests/medley_test
script/lib_tests/babashka_curl_test
script/lib_tests/cprop_test
script/lib_tests/comb_test
script/lib_tests/arrangement_test
script/lib_tests/clj_yaml_test
script/lib_tests/clojure_data_csv_test
script/lib_tests/combinatorics_test
script/lib_tests/doric_test
script/lib_tests/clojure_data_zip_test
script/lib_tests/cljc_java_time_test
script/lib_tests/camel_snake_kebab_test
script/lib_tests/aero_test
script/lib_tests/clojure_data_generators_test
script/lib_tests/honeysql_test
script/lib_tests/run_all_libtests

View file

@ -1,20 +1,182 @@
(ns babashka.run-all-libtests
(:require [clojure.test :as t]))
(:require [clojure.test :as t]
[clojure.java.io :as io]))
(def status (atom {}))
(defn test-namespaces [& namespaces]
(doseq [ns namespaces]
(require ns))
(let [m (apply t/run-tests namespaces)]
(swap! status (fn [status]
(merge-with + status m)))))
(merge-with + status (dissoc m :type))))))
;;;; Minimallist
;;;; clj-http-lite
(require '[minimallist.core-test])
(require '[clj-http.lite.client :as client])
(require '[cheshire.core :as json])
(prn (:status (client/get "https://www.clojure.org")))
(prn (:status (client/get "https://postman-echo.com/get?foo1=bar1&foo2=bar2")))
(prn (:status (client/post "https://postman-echo.com/post")))
(prn (:status (client/post "https://postman-echo.com/post"
{:body (json/generate-string {:a 1})
:headers {"X-Hasura-Role" "admin"}
:content-type :json
:accept :json})))
(prn (:status (client/put "https://postman-echo.com/put"
{:body (json/generate-string {:a 1})
:headers {"X-Hasura-Role" "admin"}
:content-type :json
:accept :json})))
;;;; spartan.spec
(time (require '[spartan.spec :as s]))
(require '[spartan.spec :as s])
(time (s/explain (s/cat :i int? :s string?) [1 :foo]))
(time (s/conform (s/cat :i int? :s string?) [1 "foo"]))
;;;; regal
(require '[lambdaisland.regal :as regal])
(def r [:cat
[:+ [:class [\a \z]]]
"="
[:+ [:not \=]]])
(prn (regal/regex r))
(prn (re-matches (regal/regex r) "foo=bar"))
;;;; medley
(require '[medley.core :refer [index-by random-uuid]])
(prn (index-by :id [{:id 1} {:id 2}]))
(prn (random-uuid))
;;;; babashka.curl
(require '[babashka.curl :as curl] :reload-all)
(prn (:status (curl/get "https://www.clojure.org")))
(prn (:status (curl/get "https://postman-echo.com/get?foo1=bar1&foo2=bar2")))
(prn (:status (curl/post "https://postman-echo.com/post")))
(prn (:status (curl/post "https://postman-echo.com/post"
{:body (json/generate-string {:a 1})
:headers {"X-Hasura-Role" "admin"}
:content-type :json
:accept :json})))
(prn (:status (curl/put "https://postman-echo.com/put"
{:body (json/generate-string {:a 1})
:headers {"X-Hasura-Role" "admin"}
:content-type :json
:accept :json})))
;;;; cprop
(require '[cprop.core])
(require '[cprop.source :refer [from-env]])
(println (:cprop-env (from-env)))
;;;; comb
(require '[comb.template :as template])
(prn (template/eval "<% (dotimes [x 3] %>foo<% ) %>"))
(prn (template/eval "Hello <%= name %>" {:name "Alice"}))
(def hello
(template/fn [name] "Hello <%= name %>"))
(prn (hello "Alice"))
;;;; arrangement
(require '[arrangement.core :as order])
(prn (sort order/rank ['a false 2 :b nil 3.14159
"c" true \d [3 2] #{:one :two}
[3 1 2] #{:three}]))
;;;; clj-yaml
(test-namespaces 'clj-yaml.core-test)
;;;; clojure-csv
(require '[clojure-csv.core :as csv])
;; TODO: convert to test
(prn (csv/write-csv (csv/parse-csv "a,b,c\n1,2,3")))
;;;; clojure.data.zip
(require '[clojure.data.xml :as xml])
(require '[clojure.zip :as zip])
(require '[clojure.data.zip.xml :refer [attr attr= xml1->]])
(def data (str "<root>"
" <character type=\"person\" name=\"alice\" />"
" <character type=\"animal\" name=\"march hare\" />"
"</root>"))
;; TODO: convert to test
(let [xml (zip/xml-zip (xml/parse (java.io.StringReader. data)))]
;(prn :xml xml)
(prn :alice-is-a (xml1-> xml :character [(attr= :name "alice")] (attr :type)))
(prn :animal-is-called (xml1-> xml :character [(attr= :type "animal")] (attr :name))))
;;;; clojure.data.csv
(test-namespaces 'clojure.data.csv-test)
;;;; clojure.math.combinatorics
(test-namespaces 'clojure.math.test-combinatorics)
;;;; deps.clj
(spit "deps_test.clj"
(:body (curl/get "https://raw.githubusercontent.com/borkdude/deps.clj/master/deps.clj")))
(binding [*command-line-args* ["-Sdescribe"]]
(load-file "deps_test.clj"))
(.delete (io/file "deps_test.clj"))
;;;; doric
(test-namespaces 'doric.test.core)
;;;; cljc-java-time
(test-namespaces 'cljc.java-time-test)
;;;; camel-snake-kebab
(test-namespaces 'camel-snake-kebab.core-test)
;;;; aero
(test-namespaces 'aero.core-test)
;;;; clojure.data.generators
(test-namespaces 'clojure.data.generators-test)
;;;; honeysql
(test-namespaces 'honeysql.core-test 'honeysql.format-test)
;;;; minimallist
(test-namespaces 'minimallist.core-test)
;;;; Final exit code
;;;; final exit code
(let [{:keys [:test :fail :error] :as m} @status]
(prn m)