diff --git a/lib_java/build-test-jar.sh b/lib_java/build-test-jar.sh
new file mode 100755
index 0000000..313c522
--- /dev/null
+++ b/lib_java/build-test-jar.sh
@@ -0,0 +1,7 @@
+#! /bin/bash
+
+JAVA_FILES=$(find src/dates_calc/ -name "*.java")
+
+javac -d classes $JAVA_FILES
+
+jar --main-class dates_calc/DatesCalcTest --create --file test-main.jar -C classes dates_calc
diff --git a/lib_java/dune b/lib_java/dune
index 7f83a96..7843d2d 100644
--- a/lib_java/dune
+++ b/lib_java/dune
@@ -1,3 +1,9 @@
+(rule
+ (target test-main.jar)
+ (deps (glob_files src/dates_calc/*.java))
+ (action (run ./build-test-jar.sh))
+)
+
(install
(section lib)
(files
diff --git a/lib_java/pom.xml b/lib_java/pom.xml
deleted file mode 100644
index 0535fd9..0000000
--- a/lib_java/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
- 4.0.0
-
- catala
- dates-calc
- 1.0-SNAPSHOT
-
- dates-calc
-
- http://www.example.com
-
-
- UTF-8
- 17
-
-
-
-
-
- org.junit
- junit-bom
- 5.11.0
- pom
- import
-
-
-
-
-
-
- org.junit.jupiter
- junit-jupiter-api
- test
-
-
-
- org.junit.jupiter
- junit-jupiter-params
- test
-
-
-
-
-
-
-
-
- maven-clean-plugin
- 3.4.0
-
-
-
- maven-resources-plugin
- 3.3.1
-
-
- maven-compiler-plugin
- 3.13.0
-
-
- maven-surefire-plugin
- 3.3.0
-
-
- maven-jar-plugin
- 3.4.2
-
-
- maven-install-plugin
- 3.1.2
-
-
- maven-deploy-plugin
- 3.1.2
-
-
-
- maven-site-plugin
- 3.12.1
-
-
- maven-project-info-reports-plugin
- 3.6.1
-
-
-
-
-
diff --git a/lib_java/src/main/java/dates_calc/AmbiguousComputationException.java b/lib_java/src/dates_calc/AmbiguousComputationException.java
similarity index 100%
rename from lib_java/src/main/java/dates_calc/AmbiguousComputationException.java
rename to lib_java/src/dates_calc/AmbiguousComputationException.java
diff --git a/lib_java/src/main/java/dates_calc/Date.java b/lib_java/src/dates_calc/Date.java
similarity index 100%
rename from lib_java/src/main/java/dates_calc/Date.java
rename to lib_java/src/dates_calc/Date.java
diff --git a/lib_java/src/test/java/dates_calc/DatesCalcTest.java b/lib_java/src/dates_calc/DatesCalcTest.java
similarity index 60%
rename from lib_java/src/test/java/dates_calc/DatesCalcTest.java
rename to lib_java/src/dates_calc/DatesCalcTest.java
index cf26dc7..b81da19 100644
--- a/lib_java/src/test/java/dates_calc/DatesCalcTest.java
+++ b/lib_java/src/dates_calc/DatesCalcTest.java
@@ -8,12 +8,6 @@
import java.util.List;
import java.util.stream.Stream;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
public class DatesCalcTest {
// Helper to read CSV data, using relative path from lib_java
@@ -38,25 +32,40 @@ private static List readCsv(String relativePath) throws IOException {
// --- Data Providers ---
// Return Stream where each Arguments contains the individual elements of a row
- static Stream exactComputationsProvider() throws IOException {
- // Map each String[] row to Arguments.of(row[0], row[1], row[2])
- return readCsv("exact_computations.csv").stream().map(row -> Arguments.of(row[0], row[1], row[2]));
+ static Stream exactComputationsProvider() throws IOException {
+ // Arrays of length 3
+ return readCsv("exact_computations.csv").stream();
+ }
+
+ static Stream ambiguousComputationsProvider() throws IOException {
+ // Arrays of length 4
+ return readCsv("ambiguous_computations.csv").stream();
+ }
+
+ static Stream firstLastDayOfMonthProvider() throws IOException {
+ // Arrays of length 3
+ return readCsv("first_last_day_of_month.csv").stream();
}
- static Stream ambiguousComputationsProvider() throws IOException {
- // Map each String[] row to Arguments.of(row[0], row[1], row[2], row[3])
- return readCsv("ambiguous_computations.csv").stream().map(row -> Arguments.of(row[0], row[1], row[2], row[3]));
+ static void assertEquals(T expected, T received, String message) {
+ if (!(expected.equals(received))) {
+ throw new RuntimeException(message);
+ }
}
- static Stream firstLastDayOfMonthProvider() throws IOException {
- // Map each String[] row to Arguments.of(row[0], row[1], row[2])
- return readCsv("first_last_day_of_month.csv").stream().map(row -> Arguments.of(row[0], row[1], row[2]));
+ static void assertThrows(Class exn_clazz, Runnable thunk, String message) {
+ try {
+ thunk.run();
+ } catch (Exception e) {
+ if (exn_clazz.isInstance(e)) {
+ return;
+ }
+ }
+ throw new RuntimeException(message);
}
// --- Test Methods ---
- @ParameterizedTest(name = "[{index}] {0} + {1} = {2}")
- @MethodSource("exactComputationsProvider")
- void testAddDatesExact(String dateStr, String periodStr, String expectedDateStr) {
+ static void testAddDatesExact(String dateStr, String periodStr, String expectedDateStr) {
Date d = Date.fromString(dateStr);
Period p = Period.fromString(periodStr);
Date expected = Date.fromString(expectedDateStr);
@@ -66,9 +75,7 @@ void testAddDatesExact(String dateStr, String periodStr, String expectedDateStr)
assertEquals(expected, d.add(p, Date.Rounding.ROUND_DOWN), "Exact addition (RoundDown) failed for " + dateStr + " + " + periodStr);
}
- @ParameterizedTest(name = "[{index}] {0} + {1} -> UP={2}, DOWN={3}")
- @MethodSource("ambiguousComputationsProvider")
- void testAddDatesAmbiguous(String dateStr, String periodStr, String expectedUpStr, String expectedDownStr) {
+ static void testAddDatesAmbiguous(String dateStr, String periodStr, String expectedUpStr, String expectedDownStr) {
// No need to access via index anymore
Date d = Date.fromString(dateStr);
Period p = Period.fromString(periodStr);
@@ -80,9 +87,7 @@ void testAddDatesAmbiguous(String dateStr, String periodStr, String expectedUpSt
assertEquals(expectedDown, d.add(p, Date.Rounding.ROUND_DOWN), "Ambiguous addition (RoundDown) failed for " + dateStr + " + " + periodStr);
}
- @ParameterizedTest(name = "[{index}] {0} -> First={1}, Last={2}")
- @MethodSource("firstLastDayOfMonthProvider")
- void testFirstLastDayOfMonth(String dateStr, String expectedFirstStr, String expectedLastStr) {
+ static void testFirstLastDayOfMonth(String dateStr, String expectedFirstStr, String expectedLastStr) {
Date d = Date.fromString(dateStr);
Date expectedFirst = Date.fromString(expectedFirstStr);
Date expectedLast = Date.fromString(expectedLastStr);
@@ -90,4 +95,14 @@ void testFirstLastDayOfMonth(String dateStr, String expectedFirstStr, String exp
assertEquals(expectedFirst, d.firstDayOfMonth(), "First day of month calculation failed for " + dateStr);
assertEquals(expectedLast, d.lastDayOfMonth(), "Last day of month calculation failed for " + dateStr);
}
+
+ public static void main(String[] args) throws IOException {
+ System.out.println("Running Java unit tests...");
+ exactComputationsProvider().forEach(arr -> testAddDatesExact(arr[0], arr[1], arr[2]));
+ System.out.println("- Addition tests: OK");
+ ambiguousComputationsProvider().forEach(arr -> testAddDatesAmbiguous(arr[0], arr[1], arr[2], arr[3]));
+ System.out.println("- Ambiguous addition tests: OK");
+ firstLastDayOfMonthProvider().forEach(arr -> testFirstLastDayOfMonth(arr[0], arr[1], arr[2]));
+ System.out.println("- First/Last day of month tests: OK");
+ }
}
diff --git a/lib_java/src/main/java/dates_calc/Period.java b/lib_java/src/dates_calc/Period.java
similarity index 100%
rename from lib_java/src/main/java/dates_calc/Period.java
rename to lib_java/src/dates_calc/Period.java
diff --git a/test/dune b/test/dune
index 9b6184a..e85befa 100644
--- a/test/dune
+++ b/test/dune
@@ -29,5 +29,5 @@
(rule
(alias runtest)
- (deps (source_tree ../lib_java))
- (action (chdir ../lib_java (run mvn test))))
+ (deps (file ../lib_java/test-main.jar))
+ (action (run java -jar %{deps})))