From: Felix Dörre Date: Thu, 26 May 2016 19:17:49 +0000 (+0200) Subject: add date-validity checker in 'CalendarUtil' X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=f718e460ae93ab692b817359e7b79696387e8dd1 add date-validity checker in 'CalendarUtil' Change-Id: I41dde6b3db0f87b0c365634758830cd95f899746 --- diff --git a/src/org/cacert/gigi/output/DateSelector.java b/src/org/cacert/gigi/output/DateSelector.java index 22a0f620..c4af9b03 100644 --- a/src/org/cacert/gigi/output/DateSelector.java +++ b/src/org/cacert/gigi/output/DateSelector.java @@ -4,7 +4,6 @@ import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; -import java.util.GregorianCalendar; import java.util.Map; import java.util.TimeZone; @@ -14,6 +13,7 @@ import org.cacert.gigi.GigiApiException; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Outputable; import org.cacert.gigi.util.DayDate; +import org.cacert.gigi.util.CalendarUtil; import org.cacert.gigi.util.HTMLEncoder; public class DateSelector implements Outputable { @@ -118,7 +118,12 @@ public class DateSelector implements Outputable { if ( !(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) { return false; } - return true; // TODO checkdate + + if ( !CalendarUtil.isDateValid(year, month, day)) { + return false; + } + + return true; } @Override @@ -127,10 +132,7 @@ public class DateSelector implements Outputable { } public DayDate getDate() { - Calendar gc = GregorianCalendar.getInstance(); - gc.set(year, month - 1, day, 0, 0, 0); - gc.set(Calendar.MILLISECOND, 0); - return new DayDate(gc.getTime().getTime()); + return CalendarUtil.getDateFromComponents(year, month, day); } public static SimpleDateFormat getDateFormat() { diff --git a/src/org/cacert/gigi/util/CalendarUtil.java b/src/org/cacert/gigi/util/CalendarUtil.java new file mode 100644 index 00000000..83002dc5 --- /dev/null +++ b/src/org/cacert/gigi/util/CalendarUtil.java @@ -0,0 +1,26 @@ +package org.cacert.gigi.util; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class CalendarUtil { + + public static boolean isDateValid(int year, int month, int day) { + + Calendar c = GregorianCalendar.getInstance(); + c.set(year, month - 1, day); + return c.get(Calendar.YEAR) == year && c.get(Calendar.MONTH) == month - 1 && c.get(Calendar.DATE) == day; + + } + + public static DayDate getDateFromComponents(int year, int month, int day) { + Calendar cal = Calendar.getInstance(); + cal.setTimeZone(TimeZone.getTimeZone("UTC")); + cal.setTimeInMillis(0); + cal.set(year, month - 1, day, 0, 0, 0); + Date dob = cal.getTime(); + return new DayDate(dob.getTime()); + } +} diff --git a/tests/org/cacert/gigi/TestCalendarUtil.java b/tests/org/cacert/gigi/TestCalendarUtil.java new file mode 100644 index 00000000..87da1b05 --- /dev/null +++ b/tests/org/cacert/gigi/TestCalendarUtil.java @@ -0,0 +1,55 @@ +package org.cacert.gigi; + +import static org.junit.Assert.*; + +import java.util.Calendar; +import java.util.TimeZone; + +import org.cacert.gigi.util.CalendarUtil; +import org.cacert.gigi.util.DayDate; +import org.junit.Test; + +public class TestCalendarUtil { + + @Test + public void testGetDateFromComponents() { + + Calendar now = Calendar.getInstance(); + now.setTimeZone(TimeZone.getTimeZone("UTC")); + + int year = now.get(Calendar.YEAR); + int month = now.get(Calendar.MONTH) + 1; + int days = now.get(Calendar.DATE); + now.setTimeInMillis(0); + now.set(year, month - 1, days, 0, 0, 0); + + DayDate dob = CalendarUtil.getDateFromComponents(year, month, days); + DayDate d = new DayDate(now.getTimeInMillis()); + + assertEquals(d.getTime(), dob.getTime()); + dob = CalendarUtil.getDateFromComponents(year + 1, month, days); + + assertNotEquals(d.getTime(), dob.getTime()); + + } + + @Test + public void testIsDateValid() { + assertTrue(CalendarUtil.isDateValid(2016, 2, 28)); + assertTrue(CalendarUtil.isDateValid(2016, 2, 29)); + assertFalse(CalendarUtil.isDateValid(2016, 2, 30)); + assertFalse(CalendarUtil.isDateValid(2016, 4, 31)); + + assertTrue(CalendarUtil.isDateValid(2000, 2, 28)); + assertTrue(CalendarUtil.isDateValid(2000, 2, 29)); + assertFalse(CalendarUtil.isDateValid(2000, 2, 30)); + assertFalse(CalendarUtil.isDateValid(2000, 4, 31)); + + assertTrue(CalendarUtil.isDateValid(2015, 2, 28)); + assertFalse(CalendarUtil.isDateValid(2015, 2, 29)); + assertFalse(CalendarUtil.isDateValid(2015, 2, 30)); + assertFalse(CalendarUtil.isDateValid(2015, 4, 31)); + + } + +} diff --git a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java index 695598ae..9e68c0ba 100644 --- a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java +++ b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java @@ -95,6 +95,7 @@ public class RegisterPageTest extends ManagedTest { public void testInvDay() throws IOException { testFailedForm("fname=a&lname=b&email=e&pword1=ap&pword2=ap&day=40&month=1&year=1910&cca_agree=1"); testFailedForm("fname=a&lname=b&email=e&pword1=ap&pword2=ap&day=0&month=1&year=1910&cca_agree=1"); + testFailedForm("fname=a&lname=b&email=e&pword1=ap&pword2=ap&day=-1&month=1&year=1910&cca_agree=1"); testFailedForm("fname=a&lname=b&email=e&pword1=ap&pword2=ap&day=a&month=1&year=1910&cca_agree=1"); }