From 13f6e9886661e4a4b7dc8a31649ad01892001b1c Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 30 Apr 2022 11:44:46 +0430 Subject: [PATCH 1/2] Kotlin: Use Instant.parse instead a custom date parser Also fixes the demo which had the same code. --- .../cosinekitty/astronomy/demo/Main.java | 35 ++++++------------- .../cosinekitty/astronomy/demo/MoonPhase.java | 2 +- .../cosinekitty/astronomy/demo/MainTests.java | 3 +- 3 files changed, 13 insertions(+), 27 deletions(-) diff --git a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java index eb7b79dc..e4ae1ce2 100644 --- a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java +++ b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/Main.java @@ -1,8 +1,9 @@ package io.github.cosinekitty.astronomy.demo; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.time.Instant; +import java.time.format.DateTimeParseException; import java.util.Date; + import io.github.cosinekitty.astronomy.*; public class Main { @@ -25,27 +26,14 @@ public class Main { Date now = new Date(); return Time.fromMillisecondsSince1970(now.getTime()); } - Pattern pattern = Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})(T(\\d{2}):(\\d{2})(:(\\d{2}(\\.\\d+)?))?Z)$"); - Matcher matcher = pattern.matcher(args[index]); - if (matcher.find()) { - int year = Integer.parseInt(matcher.group(1)); - int month = Integer.parseInt(matcher.group(2)); - int day = Integer.parseInt(matcher.group(3)); - int hour = 0; - int minute = 0; - double second = 0.0; - if (!matcher.group(4).isEmpty()) { - hour = Integer.parseInt(matcher.group(5)); - minute = Integer.parseInt(matcher.group(6)); - if (!matcher.group(7).isEmpty()) { - second = Double.parseDouble((matcher.group(8))); - } - } - return new Time(year, month, day, hour, minute, second); + try { + Instant instant = Instant.parse(args[index]); + return Time.fromMillisecondsSince1970(instant.toEpochMilli()); + } catch (DateTimeParseException e) { + System.out.print("FATAL: Invalid date/time syntax: "); + System.out.println(args[index]); + return null; } - System.out.print("FATAL: Invalid date/time syntax: "); - System.out.println(args[index]); - return null; } public static void main(String[] args) { @@ -66,8 +54,7 @@ public class Main { break; case "now": - Date now = new Date(); - Time time = Time.fromMillisecondsSince1970(now.getTime()); + Time time = Time.fromMillisecondsSince1970(System.currentTimeMillis()); System.out.println(time); rc = 0; break; diff --git a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/MoonPhase.java b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/MoonPhase.java index 3205d21d..918e41e6 100644 --- a/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/MoonPhase.java +++ b/demo/java/src/main/java/io/github/cosinekitty/astronomy/demo/MoonPhase.java @@ -32,7 +32,7 @@ public class MoonPhase { } private static String quarterName(int quarter) { - switch(quarter) { + switch (quarter) { case 0: return "New Moon"; case 1: return "First Quarter"; case 2: return "Full Moon"; diff --git a/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java b/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java index d6ea5f4c..266b3a1d 100644 --- a/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java +++ b/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java @@ -4,7 +4,6 @@ import io.github.cosinekitty.astronomy.Time; import org.junit.jupiter.api.Test; import java.time.Instant; -import java.util.Date; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -12,6 +11,6 @@ public class MainTests { @Test void main() { String time = "2022-01-01T12:00:00.000Z"; - assertEquals(time, new Time(Date.from(Instant.parse(time))).toString()); + assertEquals(time, Time.fromMillisecondsSince1970(Instant.parse(time).toEpochMilli()).toString()); } } From e81a566d1ef0981eed82cc51bbe94918e1f97b4e Mon Sep 17 00:00:00 2001 From: Don Cross Date: Sat, 30 Apr 2022 11:14:01 -0400 Subject: [PATCH 2/2] Kotlin: was not running Java demo tests. Run the Java demo unit test as part of the automated test suite. If the test fails, print the xml test results to the screen, so if it happens in GitHub Actions, we can see what went wrong and diagnose the problem. --- demo/java/demotest | 5 ++++- demo/java/demotest.bat | 5 +++-- .../github/cosinekitty/astronomy/demo/MainTests.java | 10 ++++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/demo/java/demotest b/demo/java/demotest index 56971dce..571b089b 100755 --- a/demo/java/demotest +++ b/demo/java/demotest @@ -12,7 +12,10 @@ RunDemo() rm -rf build test mkdir -p test -./gradlew jar || Fail "Cannot build jar file." +if ! ./gradlew jar test; then + cat build/test-results/test/TEST-io.github.cosinekitty.astronomy.demo.MainTests.xml + exit 1 +fi echo "" echo "Java demos: starting" echo "" diff --git a/demo/java/demotest.bat b/demo/java/demotest.bat index 2cb43a9a..d420fe64 100644 --- a/demo/java/demotest.bat +++ b/demo/java/demotest.bat @@ -8,9 +8,10 @@ if exist build ( rd /s/q build ) if exist test ( rd /s/q test ) md test -call gradlew.bat jar +call gradlew.bat jar test if errorlevel 1 ( - echo Cannot build jar file. + echo Cannot build/test jar file. + type build\test-results\test\TEST-io.github.cosinekitty.astronomy.demo.MainTests.xml exit /b 1 ) diff --git a/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java b/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java index 266b3a1d..616ebc75 100644 --- a/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java +++ b/demo/java/src/test/java/io/github/cosinekitty/astronomy/demo/MainTests.java @@ -10,7 +10,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class MainTests { @Test void main() { - String time = "2022-01-01T12:00:00.000Z"; - assertEquals(time, Time.fromMillisecondsSince1970(Instant.parse(time).toEpochMilli()).toString()); + timeTest(); + } + + private void timeTest() { + String text = "2022-04-29T12:34:45.321Z"; + long millis = Instant.parse(text).toEpochMilli(); + String check = Time.fromMillisecondsSince1970(millis).toString(); + assertEquals(text, check); } }