From 696d4102a7c347bf57902ee84fa2f2665bf4574a Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 29 May 2020 20:28:42 +0200 Subject: [PATCH] Add more java.time classes, test with cljc.java-time tests --- script/lib_tests/cljc_java_time_test | 22 +++++ script/run_lib_tests | 1 + src/babashka/impl/classes.clj | 17 +++- src/babashka/main.clj | 1 + .../lib_tests/cljc/java_time_test.cljc | 90 +++++++++++++++++++ 5 files changed, 129 insertions(+), 2 deletions(-) create mode 100755 script/lib_tests/cljc_java_time_test create mode 100644 test-resources/lib_tests/cljc/java_time_test.cljc diff --git a/script/lib_tests/cljc_java_time_test b/script/lib_tests/cljc_java_time_test new file mode 100755 index 00000000..e1f14e4f --- /dev/null +++ b/script/lib_tests/cljc_java_time_test @@ -0,0 +1,22 @@ +#!/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))) +" diff --git a/script/run_lib_tests b/script/run_lib_tests index a9670461..944b29ce 100755 --- a/script/run_lib_tests +++ b/script/run_lib_tests @@ -23,3 +23,4 @@ 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 diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 753f2ad7..cf8f7540 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -109,6 +109,7 @@ java.lang.Exception java.lang.Integer java.lang.Long + java.lang.Number java.lang.NumberFormatException java.lang.Math java.lang.Object @@ -152,7 +153,7 @@ java.nio.file.attribute.PosixFilePermissions]) java.security.MessageDigest ~@(when features/java-time? - '[java.time.format.DateTimeFormatter + `[java.time.format.DateTimeFormatter java.time.Clock java.time.DateTimeException java.time.DayOfWeek @@ -172,8 +173,19 @@ java.time.ZonedDateTime java.time.ZoneId java.time.ZoneOffset + java.time.format.DateTimeFormatterBuilder + java.time.format.DecimalStyle + java.time.format.ResolverStyle + java.time.format.SignStyle + java.time.temporal.ChronoField java.time.temporal.ChronoUnit - java.time.temporal.TemporalAccessor]) + java.time.temporal.IsoFields + java.time.temporal.TemporalField + ~(symbol "[Ljava.time.temporal.TemporalField;") + java.time.format.TextStyle + java.time.temporal.Temporal + java.time.temporal.TemporalAccessor + java.time.temporal.TemporalAdjuster]) java.util.concurrent.LinkedBlockingQueue java.util.jar.JarFile java.util.jar.JarEntry @@ -185,6 +197,7 @@ java.util.Date java.util.MissingResourceException java.util.Properties + java.util.Set java.util.UUID java.util.concurrent.TimeUnit java.util.zip.InflaterInputStream diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 85bf57b9..9f3187cc 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -411,6 +411,7 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that File java.io.File Long java.lang.Long Math java.lang.Math + Number java.lang.Number NumberFormatException java.lang.NumberFormatException Object java.lang.Object Runtime java.lang.Runtime diff --git a/test-resources/lib_tests/cljc/java_time_test.cljc b/test-resources/lib_tests/cljc/java_time_test.cljc new file mode 100644 index 00000000..ab80c5e1 --- /dev/null +++ b/test-resources/lib_tests/cljc/java_time_test.cljc @@ -0,0 +1,90 @@ +(ns cljc.java-time-test + (:require [clojure.test :refer [deftest testing is]] + [cljc.java-time.temporal.chrono-field] + [cljc.java-time.temporal.chrono-unit] + [cljc.java-time.temporal.iso-fields] + [cljc.java-time.temporal.temporal] + [cljc.java-time.temporal.temporal-accessor] + [cljc.java-time.temporal.temporal-adjuster] + [cljc.java-time.format.date-time-formatter] + [cljc.java-time.format.resolver-style] + [cljc.java-time.format.date-time-formatter-builder] + [cljc.java-time.format.decimal-style] + [cljc.java-time.format.sign-style] + [cljc.java-time.format.text-style] + [cljc.java-time.clock :as clock] + [cljc.java-time.day-of-week :as day-of-week] + [cljc.java-time.duration :as duration] + [cljc.java-time.instant :as instant] + [cljc.java-time.local-date :as local-date] + [cljc.java-time.local-date-time :as local-date-time] + [cljc.java-time.local-time :as local-time] + [cljc.java-time.month :as month] + [cljc.java-time.month-day :as month-day] + [cljc.java-time.offset-date-time :as offset-date-time] + [cljc.java-time.offset-time :as offset-time] + [cljc.java-time.period :as period] + [cljc.java-time.year :as year] + [cljc.java-time.year-month :as year-month] + [cljc.java-time.zone-id :as zone-id] + [cljc.java-time.zone-offset :as zone-offset] + [cljc.java-time.zoned-date-time :as zoned-date-time] + [cljc.java-time.extn.predicates :as predicates] + + #?(:cljs [cljs.java-time.extend-eq-and-compare]))) + +#?(:clj + (deftest multi-tail-var-args + (testing "multi-tail var args example" + (is (let [a (make-array java.time.temporal.TemporalField 1)] + (aset a 0 cljc.java-time.temporal.chrono-field/nano-of-second) + (cljc.java-time.format.date-time-formatter/with-resolver-fields + cljc.java-time.format.date-time-formatter/iso-instant + a)))))) + +(deftest normal-multi-tail + (is (year-month/of (int 12) (int 12))) + (is (year-month/of (int 12) month/january))) + +(deftest get-longs + (testing "normal getter" + (is (year-month/get-year + (year-month/now)))) + (testing "getLong, which has a different name in jsjoda :-S " + (is (year-month/get-long + (year-month/now) + cljc.java-time.temporal.chrono-field/month-of-year)))) + +(deftest leap-year + (testing "no obv. way to accommodate both isLeap methods. just going with the static one" + (is (year/is-leap 24)))) + +(deftest of-works-in-js-and-jvm + (is (= (local-date-time/of 2011 month/january 3 11 59) (local-date-time/of 2011 month/january 3 11 59)))) + +(deftest predicates + (is (true? (predicates/clock? (clock/system-utc)))) + (is (true? (predicates/day-of-week? day-of-week/monday))) + (is (true? (predicates/duration? (duration/parse "PT1M")))) + (is (true? (predicates/instant? (instant/now)))) + (is (true? (predicates/local-date? (local-date/now)))) + (is (true? (predicates/local-date-time? (local-date-time/now)))) + (is (true? (predicates/local-time? (local-time/now)))) + (is (true? (predicates/month? month/may))) + (is (true? (predicates/month-day? (month-day/now)))) + (is (true? (predicates/offset-date-time? (offset-date-time/now)))) + (is (true? (predicates/offset-time? (offset-time/now)))) + (is (true? (predicates/period? (period/parse "P1D")))) + (is (true? (predicates/year? (year/now)))) + (is (true? (predicates/year-month? (year-month/now)))) + (is (true? (predicates/zone-id? (zone-id/system-default)))) + (is (true? (predicates/zone-offset? zone-offset/utc))) + (is (true? (predicates/zoned-date-time? (zoned-date-time/now)))) + + (is (true? (predicates/date? (local-date/now)))) + (is (true? (predicates/date-time? (local-date-time/now)))) + (is (true? (predicates/time? (local-time/now)))) + + (is (false? (predicates/local-date? 16))) + (is (false? (predicates/month? 16)))) +