Sfoglia il codice sorgente

DMYParseTest for invalid numbers

Andrew Grant 3 mesi fa
parent
commit
cd6b458d36

+ 42 - 4
src/main/java/scot/carricksoftware/grantswriter/data/DMYImpl.java

@@ -27,14 +27,52 @@ public class DMYImpl implements DMY {
         DMY dmy = new DMYImpl();
         String[] split = string.split("/");
 
-        dmy.setDay(length2(split[0]));
+        checkDay(dmy, length2(split[0]));
+        checkMonth(dmy, length2(split[1]));
+        checkYear(dmy,length4(split[2]));
 
-        dmy.setMonth(length2(split[1]));
-
-        dmy.setYear(length4(split[2]));
         return dmy;
     }
 
+    private void checkDay(DMY dmy, String s) {
+        try {
+            int num = Integer.parseInt(s);
+            if (num < 1 || num > 31) {
+                dmy.setDay(null);
+            } else {
+                dmy.setDay(s);
+            }
+        } catch (Exception e) {
+            dmy.setDay(null);
+        }
+    }
+
+    private void checkMonth(DMY dmy, String s) {
+        try {
+            int num = Integer.parseInt(s);
+            if (num < 1 || num > 12) {
+                dmy.setMonth(null);
+            } else {
+                dmy.setMonth(s);
+            }
+        } catch (Exception e) {
+            dmy.setDay(null);
+        }
+    }
+
+    private void checkYear(DMY dmy, String s) {
+        try {
+            int num = Integer.parseInt(s);
+            if (num < 1500 || num > 2030) {
+                dmy.setYear(null);
+            } else {
+                dmy.setYear(s);
+            }
+        } catch (Exception e) {
+            dmy.setDay(null);
+        }
+    }
+
     @Override
     public String getDay() {
         return day;

+ 44 - 0
src/test/java/scot/carricksoftware/grantswriter/data/DMYCompareTest.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grantswriter.data;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class DMYCompareTest {
+
+    private DMY dmy;
+
+    @BeforeEach
+    void setUp() {
+        dmy = new DMYImpl();
+        String sunday = "25/01/1953";
+        dmy = dmy.parse(sunday);
+    }
+
+    @Test
+    void equalityTest() {
+        String sunday2 = "25/01/1953";
+        assertEquals(0, dmy.compareTo(dmy.parse(sunday2)));
+    }
+
+    @Test
+    void nextDayTest() {
+        String monday = "26/01/1953";
+        assertEquals(-1, dmy.compareTo(dmy.parse(monday)));
+    }
+
+    @Test
+    void previousDayTest() {
+        String saturday = "24/01/1953";
+        assertEquals(1, dmy.compareTo(dmy.parse(saturday)));
+    }
+
+
+
+}

+ 54 - 3
src/test/java/scot/carricksoftware/grantswriter/data/DMYParseTest.java

@@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 class DMYParseTest {
 
@@ -44,9 +45,59 @@ class DMYParseTest {
         String input = "1/2/3";
         dmy = dmy.parse(input);
 
-        assertEquals("1 ", dmy.getDay());
-        assertEquals("2 ", dmy.getMonth());
-        assertEquals("3   ", dmy.getYear());
+        assertNull(dmy.getDay());
+        assertNull(dmy.getMonth());
+        assertNull(dmy.getYear());
+    }
+
+    @Test
+    void invalidNumericDayTest() {
+        String input = "33/1/1953";
+        dmy = dmy.parse(input);
+
+        assertNull(dmy.getDay());
+    }
+
+    @Test
+    void invalidDayTest() {
+        String input = "z/1/1953";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getDay());
+    }
+
+    @Test
+    void invalidNumericMonthTest() {
+        String input = "25/13/1953";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getMonth());
+    }
+
+    @Test
+    void invalidMonthTest() {
+        String input = "25/z/1953";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getMonth());
+    }
+
+    @Test
+    void invalidNumericHighYearTest() {
+        String input = "25/01/2050";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getYear());
+    }
+
+    @Test
+    void invalidNumericLowYearTest() {
+        String input = "25/01/25";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getYear());
+    }
+
+    @Test
+    void invalidYearTest() {
+        String input = "25/01/z";
+        dmy = dmy.parse(input);
+        assertNull(dmy.getYear());
     }
 
 }