diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecision.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecision.java index 24d537494..a3fc56cc5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecision.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecision.java @@ -499,29 +499,32 @@ public class DateTimeWithPrecision extends BaseEditElement { if( second == null ) second = 0; - DateTime dateTime = new DateTime(); + //initialize to something so that we can be assured not to get + //system date dependent behavior + DateTime dateTime = new DateTime("1970-01-01T00:00:00Z"); + try{ - dateTime.withYear(year); + dateTime = dateTime.withYear(year); }catch(IllegalArgumentException iae){ errors.put(fieldName+".year", iae.getLocalizedMessage()); } try{ - dateTime.withMonthOfYear(month); + dateTime = dateTime.withMonthOfYear(month); }catch(IllegalArgumentException iae){ errors.put(fieldName+".month", iae.getLocalizedMessage()); } try{ - dateTime.withDayOfMonth(day); + dateTime = dateTime.withDayOfMonth(day); }catch(IllegalArgumentException iae){ errors.put(fieldName+".day", iae.getLocalizedMessage()); } try{ - dateTime.withHourOfDay(hour); + dateTime = dateTime.withHourOfDay(hour); }catch(IllegalArgumentException iae){ errors.put(fieldName+".hour", iae.getLocalizedMessage()); } try{ - dateTime.withSecondOfMinute(second); + dateTime = dateTime.withSecondOfMinute(second); }catch(IllegalArgumentException iae){ errors.put(fieldName+".second", iae.getLocalizedMessage()); } diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecisionTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecisionTest.java index c924b0618..8994d1e64 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecisionTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/elements/DateTimeWithPrecisionTest.java @@ -268,4 +268,69 @@ public class DateTimeWithPrecisionTest { Assert.assertEquals(XSDDateTime.class, obj.getClass()); } + + @Test + public void day30Test() throws Exception{ + String FIELDNAME = "testfield"; + Field field = new Field(); + field.setName(FIELDNAME); + DateTimeWithPrecision dtwp = new DateTimeWithPrecision(field); + + + /* Check if it works with day number under 29 */ + Map queryParameters = new HashMap(); + queryParameters.put(FIELDNAME+".year", new String[]{"1999" }); + queryParameters.put(FIELDNAME+".month", new String[]{"12"}); + queryParameters.put(FIELDNAME+".day", new String[]{"28"}); + + Map validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters); + Assert.assertNotNull(validationMsgs); + Assert.assertTrue(validationMsgs.size() == 0 ); + + String precisionURI = dtwp.getSubmittedPrecision( queryParameters); + Assert.assertNotNull(precisionURI); + Assert.assertEquals(VitroVocabulary.Precision.DAY.uri(), precisionURI); + + /* Check for days greater than 28 */ + queryParameters = new HashMap(); + queryParameters.put(FIELDNAME+".year", new String[]{"1999" }); + queryParameters.put(FIELDNAME+".month", new String[]{"12"}); + queryParameters.put(FIELDNAME+".day", new String[]{"30"}); + + validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters); + Assert.assertNotNull(validationMsgs); + Assert.assertTrue(validationMsgs.size() == 0 ); + + precisionURI = dtwp.getSubmittedPrecision( queryParameters); + Assert.assertNotNull(precisionURI); + Assert.assertEquals(VitroVocabulary.Precision.DAY.uri(), precisionURI); + + /* Check for leap year */ + queryParameters = new HashMap(); + queryParameters.put(FIELDNAME+".year", new String[]{"2000" }); + queryParameters.put(FIELDNAME+".month", new String[]{"2"}); + queryParameters.put(FIELDNAME+".day", new String[]{"29"}); + + validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters); + Assert.assertNotNull(validationMsgs); + Assert.assertTrue(validationMsgs.size() == 0 ); + + precisionURI = dtwp.getSubmittedPrecision( queryParameters); + Assert.assertNotNull(precisionURI); + Assert.assertEquals(VitroVocabulary.Precision.DAY.uri(), precisionURI); + + /* check for non leap year */ + queryParameters = new HashMap(); + queryParameters.put(FIELDNAME+".year", new String[]{"1999" }); + queryParameters.put(FIELDNAME+".month", new String[]{"2"}); + queryParameters.put(FIELDNAME+".day", new String[]{"29"}); + + validationMsgs = dtwp.getValidationMessages("testfield", (EditConfiguration)null, queryParameters); + Assert.assertNotNull(validationMsgs); + Assert.assertTrue(validationMsgs.size() > 0 ); + + precisionURI = dtwp.getSubmittedPrecision( queryParameters); + Assert.assertNotNull(precisionURI); + Assert.assertEquals(VitroVocabulary.Precision.DAY.uri(), precisionURI); + } }