diff --git a/deps.edn b/deps.edn index 2e51bc26..79818b9d 100644 --- a/deps.edn +++ b/deps.edn @@ -69,7 +69,7 @@ honeysql/honeysql {:mvn/version "1.0.444"} minimallist/minimallist {:mvn/version "0.0.6"} circleci/bond {:mvn/version "0.4.0"} - version-clj/version-clj {:mvn/version "0.1.2"} + version-clj/version-clj {:mvn/version "2.0.1"} gaka/gaka {:mvn/version "0.3.0"} failjure/failjure {:mvn/version "2.1.1"}}} :clj-nvd diff --git a/test-resources/lib_tests/version_clj/compare_test.cljc b/test-resources/lib_tests/version_clj/compare_test.cljc index b4df372a..c7ac75df 100644 --- a/test-resources/lib_tests/version_clj/compare_test.cljc +++ b/test-resources/lib_tests/version_clj/compare_test.cljc @@ -1,9 +1,10 @@ (ns version-clj.compare-test - (:require [clojure.test :refer [deftest are]] + (:require #?(:clj [clojure.test :refer [deftest are]] + :cljs [cljs.test :refer-macros [deftest are]]) [version-clj.compare :refer [version-compare]])) (deftest t-version-compare - (are [v0 v1 r] (= (version-compare v0 v1) r) + (are [v0 v1 r] (= r (version-compare v0 v1)) ;; Numeric Comparison "1.0.0" "1.0.0" 0 "1.0.0" "1.0" 0 @@ -36,6 +37,19 @@ "1.0-RC5" "1.0-RC20" -1 "1.0-RC11" "1.0-RC6" 1 + ;; Comparison nested vs. value + "1.0.0" "1.0-1.0" -1 + "1.0-1.0" "1.0.0" 1 + "1.0-0.0" "1.0.0" 0 + "1.0.0" "1.0-0.0" 0 + "1.x.0" "1.x-1.0" -1 + "1.x-1.0" "1.x.0" 1 + "1.0-612" "1.0.613" -1 + + ;; Numbers are newer than strings + "1.x.1" "1.0.1" -1 + "1.0.1" "1.x.1" 1 + ;; Releases are newer than SNAPSHOTs "1.0.0" "1.0.0-SNAPSHOT" 1 "1.0.0-SNAPSHOT" "1.0.0-SNAPSHOT" 0 diff --git a/test-resources/lib_tests/version_clj/core_test.cljc b/test-resources/lib_tests/version_clj/core_test.cljc index 691aea8a..370e58a9 100644 --- a/test-resources/lib_tests/version_clj/core_test.cljc +++ b/test-resources/lib_tests/version_clj/core_test.cljc @@ -1,25 +1,81 @@ (ns version-clj.core-test - (:require [clojure.test :refer [deftest are]] - [version-clj.core :refer [snapshot? qualified?]])) + (:require #?(:clj [clojure.test :refer [deftest is are]] + :cljs [cljs.test :refer-macros [deftest is are]]) + [version-clj.core :as v])) -(deftest t-snapshot - (are [v r] (= (boolean (snapshot? v)) r) - "1.0.0" false - "SNAPSHOT" true - "1-SNAPSHOT" true - "1.0-SNAPSHOT" true - "1.0-SNAPSHOT.2" true - "1.0-NOSNAPSHOT" false)) +(deftest t-snapshot? + (are [v r] (= r (boolean (v/snapshot? v))) + "1.0.0" false + "SNAPSHOT" true + "1-SNAPSHOT" true + "1.0-SNAPSHOT" true + "1.0-SNAPSHOT.2" true + "1.0-NOSNAPSHOT" false)) -(deftest t-qualified - (are [v r] (= (boolean (qualified? v)) r) - "1.0.0" false - "SNAPSHOT" true - "1-SNAPSHOT" true - "1.0-SNAPSHOT" true - "1.0-SNAPSHOT.2" true - "1.0-NOSNAPSHOT" true - "1.x.2" false - "1.2y" true - "1.y2" false - "1.y" false)) +(deftest t-qualified? + (are [v r] (= r (boolean (v/qualified? v))) + "1.0.0" false + "SNAPSHOT" true + "SNAPSHOT2" true + "1-SNAPSHOT" true + "1.0-SNAPSHOT" true + "1.0-SNAPSHOT.2" true + "1.0-NOSNAPSHOT" true + "1.0-NOSNAPSHOT.1" true + "1.0-NOSNAPSHOT.1.1" true + "1.0-NOSNAPSHOT1.1" true + "0.5.3-alpha.1.pre.0" true + "1.x.2" false + "1.2y" false + "1.y2" false + "1.y" false)) + +(let [v0 "1.0.0-SNAPSHOT" + v1 "1.0.0" + v2 "1.0.1-RC" + v3 "1.0.1" + ordered [v0 v1 v2 v3]] + (deftest t-version-sort + (is (= ordered (v/version-sort (shuffle ordered)))) + (is (= (map v/version->seq ordered) + (v/version-seq-sort (map v/version->seq ordered))))) + + (deftest t-version-compare + (is (pos? (v/version-compare v1 v0))) + (is (neg? (v/version-compare v0 v1))) + (is (zero? (v/version-compare v0 v0))) + (is (v/older? v0 v1)) + (is (v/newer? v1 v0)) + (is (v/older-or-equal? v0 v1)) + (is (v/older-or-equal? v0 v0)) + (is (v/newer-or-equal? v1 v0)) + (is (v/newer-or-equal? v0 v0))) + + (deftest t-version-seq-compare + (is (pos? (v/version-seq-compare + (v/version->seq v1) + (v/version->seq v0)))) + (is (neg? (v/version-seq-compare + (v/version->seq v0) + (v/version->seq v1)))) + (is (zero? (v/version-seq-compare + (v/version->seq v0) + (v/version->seq v0)))))) + +(deftest t-parse + (let [s "1.0.1", version (v/parse s)] + (is (= [[1 0 1]] (:version version))) + (is (= #{} (:qualifiers version))) + (is (not (:snapshot? version))) + (is (not (:qualified? version)))) + (let [s "1.0.1-RC1-SNAPSHOT", version (v/parse s)] + (is (= [[1 0 1] [["rc" 1] "snapshot"]] (:version version))) + (is (= #{"rc" "snapshot"} (:qualifiers version))) + (is (:snapshot? version)) + (is (:qualified? version))) + (let [s "1.0.1"] + (is (= (v/parse s) (v/parse (v/version->seq s)))))) + +(deftest t-version-and-qualifier-data + (is (= [1 0 1] (v/version-data "1.0.1-RC"))) + (is (= ["rc"] (v/qualifier-data "1.0.1-RC")))) diff --git a/test-resources/lib_tests/version_clj/split_test.cljc b/test-resources/lib_tests/version_clj/split_test.cljc index 1216b134..51cac090 100644 --- a/test-resources/lib_tests/version_clj/split_test.cljc +++ b/test-resources/lib_tests/version_clj/split_test.cljc @@ -1,22 +1,72 @@ (ns version-clj.split-test - (:require [clojure.test :refer [deftest are is]] + (:require #?(:clj [clojure.test :refer [deftest testing are is]] + :cljs [cljs.test :refer-macros [deftest testing are is]]) [version-clj.split :refer [version->seq]])) +(deftest t-split-once-sanity-check + (let [split-once @#'version-clj.split/split-once + rx #"(^|(?<=\d)|-)(?=alpha)"] + (are [in out] (= out (split-once rx in)) + "1-alpha2.2" ["1" "alpha2.2"] + "alpha" ["" "alpha"] + "1alpha" ["1" "alpha"] + "0.0.3-alpha.8+oryOS.15" ["0.0.3" "alpha.8+oryOS.15"]))) + (deftest t-split - (are [version v] (= (version->seq version) v) - "1.0.0" [[1 0 0]] - "1.0" [[1 0]] - "1" [[1]] - "1a" [[1] ["a"]] - "1-a" [[1] ["a"]] - "1.0.1-SNAPSHOT" [[1 0 1] ["snapshot"]] - "1.0.1-alpha2" [[1 0 1] ["alpha" 2]] - "11.2.0.3.0" [[11 2 0 3 0]] - "1.0-1-0.2-RC" [[1 [0 1 0] 2] ["rc"]])) + (are [version v] (= v (version->seq version)) + "1.0.0" [[1 0 0]] + "1.0" [[1 0]] + "1" [[1]] + "1a" [[1] ["a"]] + "1-a" [[1] ["a"]] + "1.0.1-SNAPSHOT" [[1 0 1] ["snapshot"]] + "1.0.1-alpha2" [[1 0 1] ["alpha" 2]] + "11.2.0.3.0" [[11 2 0 3 0]] + "1.0-1-0.2-RC" [[1 [0 1 0] 2] ["rc"]] + "1.0-612" [[1 0] [612]] + "alpha" [[] ["alpha"]] + "alpha-2" [[] ["alpha" 2]] + "1.alpha" [[1] ["alpha"]] + "1.alpha.2" [[1] ["alpha" 2]] + "1-alpha.2" [[1] ["alpha" 2]] + "1-alpha.2.2" [[1] ["alpha" 2 2]] + "1-alpha2.2" [[1] [["alpha" 2] 2]] + "1.alpha-1.0" [[1] ["alpha" [1 0]]] + "0.5.0-alpha.1" [[0 5 0] ["alpha" 1]] + "0.5.0-alpha.1" [[0 5 0] ["alpha" 1]] + "0.0.3-alpha.8+oryOS.15" [[0 0 3] ["alpha" [8 "+oryos"] 15]] + )) + +(deftest t-split-without-qualifiers + (testing "well-behaving." + (are [version] (= (version->seq version) + (version->seq version {:qualifiers {}})) + "1.0.0" + "1.0" + "1" + "1-a" + "1.0.1-SNAPSHOT" + "1.0.1-alpha2" + "11.2.0.3.0" + "1.0-1-0.2-RC" + "1-alpha.2" + "1-alpha.2.2" + "1-alpha2.2" + "0.5.0-alpha.1" + "0.5.0-alpha.1" + "0.0.3-alpha.8+oryOS.15")) + (testing "deviants." + (are [version v] (= v (version->seq version {:qualifiers {}})) + "alpha" [["alpha"]] + "alpha-2" [["alpha"] [2]] + "1a" [[1 "a"]] + "1.alpha" [[1 "alpha"]] + "1.alpha.2" [[1 "alpha" 2]] + "1.alpha-1.0" [[1 ["alpha" 1] 0]]))) (deftest t-split-with-large-number - (is (= (version->seq "0.0.1-20141002100138") - [[0 0 1] [20141002100138]])) + (is (= [[0 0 1] [20141002100138]] + (version->seq "0.0.1-20141002100138"))) #?(:clj (let [v (str Long/MAX_VALUE "12345")] (is (= (version->seq v) [[(bigint v)]])))))