/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.wicket.extensions.yui.calendar; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.TimeZone; import org.apache.wicket.Page; import org.apache.wicket.datetime.StyleDateConverter; import org.apache.wicket.extensions.yui.calendar.DateTimeField.AM_PM; import org.apache.wicket.protocol.http.request.WebClientInfo; import org.apache.wicket.util.tester.DiffUtil; import org.apache.wicket.util.tester.FormTester; import org.apache.wicket.util.tester.WicketTestCase; import org.joda.time.DateTimeFieldType; import org.joda.time.DateTimeZone; import org.joda.time.MutableDateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.After; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * */ public class DatePickerTest extends WicketTestCase { /** log. */ private static final Logger log = LoggerFactory.getLogger(DatePickerTest.class); private TimeZone defaultTz = TimeZone.getDefault(); /** * @see org.apache.wicket.util.tester.WicketTestCase#tearDown() */ @Override @After public void commonAfter() { TimeZone.setDefault(defaultTz); DateTimeZone.setDefault(DateTimeZone.forTimeZone(defaultTz)); super.commonAfter(); } /** * * @throws Exception */ @Test public void test1() throws Exception { log.debug("=========== test1() ================="); myTestExecution(DatesPage1.class, "DatesPage1_ExpectedResult.html"); } /** * Tests conversion of input for DateTimeField and DateField. * * @throws Exception */ @Test public void testDateFieldInput() throws Exception { log.debug("=========== testDateFieldInput() ================="); Class<? extends Page> pageClass = DatesPage2.class; Date date = new GregorianCalendar(2010, 10, 6, 0, 0).getTime(); tester.getSession().setLocale(Locale.GERMAN); tester.startPage(pageClass); tester.assertRenderedPage(pageClass); FormTester formTester = tester.newFormTester("form"); formTester.setValue("dateTimeField:date", "06.11.2010"); formTester.setValue("dateTimeField:hours", "00"); formTester.setValue("dateTimeField:minutes", "00"); formTester.setValue("dateField:date", "06.11.2010"); formTester.submit(); DatesPage2 page = (DatesPage2)tester.getLastRenderedPage(); log.debug("orig: " + date.getTime() + "; date: " + page.date.getTime() + "; dateTime: " + page.dateTime.getTime()); log.debug("orig: " + date + "; date: " + page.date + "; dateTime: " + page.dateTime); assertEquals(0, date.compareTo(page.dateTime)); assertEquals(0, date.compareTo(page.date)); } /** * Tests conversion of input for DateTimeField and DateField when the client and server are in * different time zones. * * @throws Exception */ @Test public void testDateFieldInputTimezone() throws Exception { log.debug("=========== testDateFieldInputTimezone() ================="); TimeZone tzClient = TimeZone.getTimeZone("America/Los_Angeles"); TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Class<? extends Page> pageClass = DatesPage2.class; MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 0, 0, 0, 0); Date date = new Date(dt.getMillis()); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); tester.getSession().setLocale(Locale.GERMANY); tester.startPage(pageClass); tester.assertRenderedPage(pageClass); FormTester formTester = tester.newFormTester("form"); formTester.setValue("dateTimeField:date", "06.11.2010"); formTester.setValue("dateTimeField:hours", "00"); formTester.setValue("dateTimeField:minutes", "00"); formTester.setValue("dateField:date", "06.11.2010"); formTester.submit(); DatesPage2 page = (DatesPage2)tester.getLastRenderedPage(); log.debug("orig: " + date.getTime() + "; date: " + page.date.getTime() + "; dateTime: " + page.dateTime.getTime()); log.debug("orig: " + date + "; date: " + page.date + "; dateTime: " + page.dateTime); assertEquals(0, date.compareTo(page.dateTime)); assertEquals(0, date.compareTo(page.date)); } /** * Tests joda & jvm default time zone handling */ @Test public void testJodaTimeDefaultTimeZone() { TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); // lets find a timezone different from current default String newId = null; for (String id : TimeZone.getAvailableIDs()) { if (!id.equals(origJvmDef.getID())) { newId = id; break; } } assertNotNull(newId); TimeZone.setDefault(TimeZone.getTimeZone(newId)); TimeZone newJvmDef = TimeZone.getDefault(); DateTimeZone newJodaDef = DateTimeZone.getDefault(); // if this fails we are under security manager // and we have no right to set default timezone assertNotSame(origJvmDef, newJvmDef); // this should be true because joda caches the // default timezone and even for the first // lookup it uses a System property if possible // for more info see org.joda.time.DateTimeZone.getDefault() assertSame(origJodaDef, newJodaDef); } /** * Test date conversion with the server's time zone having a different current date than the * client time zone. * * @throws ParseException */ @Test public void testDifferentDateTimeZoneConversion() throws ParseException { log.debug("=========== testDifferentDateTimeZoneConversion() ================="); TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); TimeZone tzClient = TimeZone.getTimeZone("GMT+14"); TimeZone tzServer = TimeZone.getTimeZone("GMT-12"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Class<? extends Page> pageClass = DatesPage2.class; MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 0, 0, 0, 0); Date date = new Date(dt.getMillis()); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); tester.getSession().setLocale(Locale.GERMANY); tester.startPage(pageClass); tester.assertRenderedPage(pageClass); FormTester formTester = tester.newFormTester("form"); formTester.setValue("dateTimeField:date", "06.11.2010"); formTester.setValue("dateTimeField:hours", "00"); formTester.setValue("dateTimeField:minutes", "00"); formTester.setValue("dateField:date", "06.11.2010"); formTester.submit(); DatesPage2 page = (DatesPage2)tester.getLastRenderedPage(); log.debug("orig: " + date.getTime() + "; date: " + page.date.getTime() + "; dateTime: " + page.dateTime.getTime()); log.debug("orig: " + date + "; date: " + page.date + "; dateTime: " + page.dateTime); assertEquals(0, date.compareTo(page.dateTime)); assertEquals(0, date.compareTo(page.date)); TimeZone.setDefault(origJvmDef); DateTimeZone.setDefault(origJodaDef); } /** * Test date conversion with the server's time zone having a different current date than the * client time zone using a Locale with am/pm style time. */ @Test public void testDifferentDateTimeZoneConversionAMPM() { TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); TimeZone tzClient = TimeZone.getTimeZone("GMT+14"); TimeZone tzServer = TimeZone.getTimeZone("GMT-12"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Class<? extends Page> pageClass = DatesPage2.class; MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 22, 0, 0, 0); Date date = new Date(dt.getMillis()); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); tester.getSession().setLocale(Locale.US); tester.startPage(pageClass); tester.assertRenderedPage(pageClass); FormTester formTester = tester.newFormTester("form"); formTester.setValue("dateTimeField:date", "11/06/2010"); formTester.setValue("dateTimeField:hours", "10"); formTester.setValue("dateTimeField:minutes", "00"); formTester.setValue("dateTimeField:amOrPmChoice", "1"); formTester.submit(); DatesPage2 page = (DatesPage2)tester.getLastRenderedPage(); log.debug("orig: " + date.getTime() + "; dateTime: " + page.dateTime.getTime()); log.debug("orig: " + date + "; dateTime: " + page.dateTime); assertEquals(0, date.compareTo(page.dateTime)); TimeZone.setDefault(origJvmDef); DateTimeZone.setDefault(origJodaDef); } /** * Test time conversion for TimeField. The day, month, year of the TimeField model should not be * changed. The hours and minutes should be converted to the server's time zone based on the * day, month and year of the Date model. */ @Test public void testTimeFieldDST() { TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); TimeZone tzClient = TimeZone.getTimeZone("Canada/Eastern"); TimeZone tzServer = TimeZone.getTimeZone("GMT"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); tester.getSession().setLocale(Locale.GERMAN); // Test with standard time (in client time zone) MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 1, 15, 0, 0, 0, 0); Date date = new Date(dt.getMillis()); DatesPage2 testPage = new DatesPage2(); testPage.time = date; tester.startPage(testPage); FormTester formTester = tester.newFormTester("form"); formTester.setValue("timeField:hours", "00"); formTester.setValue("timeField:minutes", "00"); formTester.submit(); assertEquals(date, testPage.time); // Test with daylight savings time (in client time zone) dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 7, 15, 0, 0, 0, 0); date = new Date(dt.getMillis()); testPage = new DatesPage2(); testPage.time = date; tester.startPage(testPage); formTester = tester.newFormTester("form"); formTester.setValue("timeField:hours", "00"); formTester.setValue("timeField:minutes", "00"); formTester.submit(); assertEquals(date, testPage.time); TimeZone.setDefault(origJvmDef); DateTimeZone.setDefault(origJodaDef); } /** * Test StyleDateConverter with the server's time zone having a different current date than the * client time zone. * * @throws ParseException */ @Test public void testStyleDateConverterTimeZoneDifference() throws ParseException { TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); TimeZone tzClient = TimeZone.getTimeZone("GMT+14"); TimeZone tzServer = TimeZone.getTimeZone("GMT-12"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); StyleDateConverter converter = new StyleDateConverter(true); Calendar cal = Calendar.getInstance(tzClient); cal.set(2011, 10, 5, 0, 0, 0); cal.set(Calendar.MILLISECOND, 0); Date dateRef = cal.getTime(); Date date = converter.convertToObject("05.11.2011", Locale.GERMANY); log.debug("ref: " + dateRef.getTime() + "; converted: " + date.getTime()); log.debug("ref: " + dateRef + "; date: " + date); assertEquals(dateRef, date); TimeZone.setDefault(origJvmDef); DateTimeZone.setDefault(origJodaDef); } /** * Validates the "value" tags of the <input> fields for DateTimeField, DateField and * TimeField when they are given Date models containing Date instances. */ @Test public void testDateFieldsWithDateModels() { TimeZone origJvmDef = TimeZone.getDefault(); DateTimeZone origJodaDef = DateTimeZone.getDefault(); TimeZone tzClient = TimeZone.getTimeZone("GMT-12"); TimeZone tzServer = TimeZone.getTimeZone("GMT+14"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); WebClientInfo clientInfo = (WebClientInfo)tester.getSession().getClientInfo(); clientInfo.getProperties().setTimeZone(tzClient); Calendar cal = Calendar.getInstance(tzServer); cal.set(2011, 5, 15, 10, 30, 0); cal.set(Calendar.MILLISECOND, 0); Date date = cal.getTime(); DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN); format.setTimeZone(tzClient); String dateRefString = format.format(date); cal.setTimeZone(tzClient); String hoursRefString = Integer.toString(cal.get(Calendar.HOUR_OF_DAY)); String minutesRefString = Integer.toString(cal.get(Calendar.MINUTE)); DatesPage2 testPage = new DatesPage2(); testPage.dateTime = date; testPage.date = date; testPage.time = date; tester.getSession().setLocale(Locale.GERMAN); tester.startPage(testPage); String dateTimeFieldDateValue = tester.getTagByWicketId("dateTimeField") .getChild("wicket:id", "date") .getAttribute("value"); assertEquals(dateRefString, dateTimeFieldDateValue); String dateTimeFieldHoursValue = tester.getTagByWicketId("dateTimeField") .getChild("wicket:id", "hours") .getAttribute("value"); assertEquals(hoursRefString, dateTimeFieldHoursValue); String dateTimeFieldMinutesValue = tester.getTagByWicketId("dateTimeField") .getChild("wicket:id", "minutes") .getAttribute("value"); assertEquals(minutesRefString, dateTimeFieldMinutesValue); String dateFieldValue = tester.getTagByWicketId("dateField") .getChild("wicket:id", "date") .getAttribute("value"); assertEquals(dateRefString, dateFieldValue); String timeFieldHoursValue = tester.getTagByWicketId("timeField") .getChild("wicket:id", "hours") .getAttribute("value"); assertEquals(hoursRefString, timeFieldHoursValue); String timeFieldMinutesValue = tester.getTagByWicketId("timeField") .getChild("wicket:id", "minutes") .getAttribute("value"); assertEquals(minutesRefString, timeFieldMinutesValue); TimeZone.setDefault(origJvmDef); DateTimeZone.setDefault(origJodaDef); } /** * * @throws ParseException */ @Test public void testDates1() throws ParseException { log.debug("=========== testDates1() ================="); TimeZone tzClient = TimeZone.getTimeZone("America/Los_Angeles"); TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Locale.setDefault(Locale.GERMANY); // Date orig = convertDate("06.11.2010", null, null, null, false, tzClient); // Date origJoda = convertDateJoda("06.11.2010", null, null, null, false, tzClient); Date orig3 = convertDateNew("06.11.2010", null, null, null, false, tzClient); MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 0, 0, 0, 0); Date date = new Date(dt.getMillis()); log.debug(/* "actual: " + orig.getTime() + "; joda: " + origJoda.getTime() + */"; origNew: " + orig3.getTime() + "; expected: " + date.getTime()); log.debug(/* "actual: " + orig + "; joda: " + origJoda + */"; origNew: " + orig3 + "; expected: " + date); assertEquals(date.getTime(), orig3.getTime()); // assertEquals(date.getTime(), orig.getTime()); // assertEquals(origJoda.getTime(), orig.getTime()); } /** * * @throws ParseException */ @Test public void testDates2() throws ParseException { log.debug("=========== testDates2() ================="); TimeZone tzClient = TimeZone.getTimeZone("America/Los_Angeles"); TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Locale.setDefault(Locale.GERMANY); // Date orig = convertDate("06.11.2010", 0, 0, AM_PM.AM, false, tzClient); // Date origJoda = convertDateJoda("06.11.2010", 0, 0, AM_PM.AM, false, tzClient); Date orig3 = convertDateNew("06.11.2010", 0, 0, AM_PM.AM, false, tzClient); MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 0, 0, 0, 0); Date date = new Date(dt.getMillis()); log.debug(/* "actual: " + orig.getTime() + "; joda: " + origJoda.getTime() + */"; origNew: " + orig3.getTime() + "; expected: " + date.getTime()); log.debug(/* "actual: " + orig + "; joda: " + origJoda + */"; origNew: " + orig3 + "; expected: " + date); assertEquals(date.getTime(), orig3.getTime()); // assertEquals(date.getTime(), orig.getTime()); // assertEquals(origJoda.getTime(), orig.getTime()); } /** * * @throws ParseException */ @Test public void testDates3() throws ParseException { log.debug("=========== testDates3() ================="); TimeZone tzClient = TimeZone.getTimeZone("America/Los_Angeles"); TimeZone tzServer = TimeZone.getTimeZone("Europe/Berlin"); TimeZone.setDefault(tzServer); DateTimeZone.setDefault(DateTimeZone.forTimeZone(tzServer)); Locale.setDefault(Locale.GERMANY); // Date orig = convertDate("06.11.2010", 12, 0, null, false, tzClient); // Date origJoda = convertDateJoda("06.11.2010", 12, 0, null, false, tzClient); Date orig3 = convertDateNew("06.11.2010", 12, 0, null, false, tzClient); MutableDateTime dt = new MutableDateTime(DateTimeZone.forTimeZone(tzClient)); dt.setDateTime(2010, 11, 6, 12, 0, 0, 0); Date date = new Date(dt.getMillis()); log.debug(/* "actual: " + orig.getTime() + "; joda: " + origJoda.getTime() + */"; origNew: " + orig3.getTime() + "; expected: " + date.getTime()); log.debug(/* "actual: " + orig + "; joda: " + origJoda + */"; origNew: " + orig3 + "; expected: " + date); assertEquals(date.getTime(), orig3.getTime()); // assertEquals(date.getTime(), orig.getTime()); // assertEquals(origJoda.getTime(), orig.getTime()); } /** * Simulate what DateTimeField does * * @param dateStr * @param hours * @param minutes * @param amOrPm * @param use12HourFormat * @param tzClient * @return Date * @throws ParseException */ public Date convertDate(final String dateStr, final Integer hours, final Integer minutes, final AM_PM amOrPm, final boolean use12HourFormat, final TimeZone tzClient) throws ParseException { log.debug(">>> convertDate()"); Date dateFieldInput = (dateStr != null ? DateFormat.getDateInstance().parse(dateStr) : null); // Default to today, if date entry was invisible final MutableDateTime date; if (dateFieldInput != null) { log.debug("1. dateFieldInput: " + dateFieldInput.getTime() + " " + dateFieldInput); date = new MutableDateTime(dateFieldInput); } else { log.debug("1. dateFieldInput: null"); // Current date date = new MutableDateTime(); } log.debug("2. mutable date: " + date.getMillis() + " " + date); // always set secs to 0 date.setSecondOfMinute(0); log.debug("3. secs = 0: " + date.getMillis() + " " + date); // The AM/PM field if (use12HourFormat) { date.set(DateTimeFieldType.halfdayOfDay(), amOrPm == AM_PM.PM ? 1 : 0); } log.debug("4. AM/PM: " + date.getMillis() + " " + date); // The hours if (hours == null) { date.setHourOfDay(0); } else { date.set(DateTimeFieldType.hourOfDay(), hours % (use12HourFormat ? 12 : 24)); } log.debug("5. hours: " + date.getMillis() + " " + date); // The minutes if (minutes == null) { date.setMinuteOfHour(0); } else { date.setMinuteOfHour(minutes); } log.debug("6. minutes: " + date.getMillis() + " " + date); // Use the client timezone to properly calculate the millisecs if (tzClient != null) { date.setZoneRetainFields(DateTimeZone.forTimeZone(tzClient)); log.debug("7. zone: " + date.getMillis() + " " + date); } Date rtn = new Date(date.getMillis()); log.debug("8. final date: " + rtn.getTime() + " " + rtn); return rtn; } /** * Simulate what DateTimeField does * * @param dateStr * @param hours * @param minutes * @param amOrPm * @param use12HourFormat * @param tzClient * @return Date * @throws ParseException */ private Date convertDateNew(final String dateStr, final Integer hours, final Integer minutes, final AM_PM amOrPm, final boolean use12HourFormat, final TimeZone tzClient) throws ParseException { log.debug(">>> convertDateNew()"); // This is what I get from field.getConvertedInput() Date dateFieldInput = (dateStr != null ? DateFormat.getDateInstance().parse(dateStr) : null); // Default with "now" if (dateFieldInput == null) { dateFieldInput = new Date(); } // Get year, month and day ignoring any timezone of the Date object Calendar cal = Calendar.getInstance(); cal.setTime(dateFieldInput); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int day = cal.get(Calendar.DAY_OF_MONTH); int iHours = (hours == null ? 0 : hours % 24); int iMins = (minutes == null ? 0 : minutes); // Use the input to create a date object with proper timezone MutableDateTime date = new MutableDateTime(year, month, day, iHours, iMins, 0, 0, DateTimeZone.forTimeZone(tzClient)); // Use the input to create a date object. Ignore the timezone provided by dateFieldInput and // use tzClient instead. No re-calculation will happen. It should be the same as above. // MutableDateTime date = new MutableDateTime(dateFieldInput, // DateTimeZone.forTimeZone(tzClient)); log.debug("1. date: " + date.getMillis() + " " + date); // Adjust for halfday if needed int halfday; if (use12HourFormat) { halfday = (amOrPm == AM_PM.PM ? 1 : 0); date.set(DateTimeFieldType.halfdayOfDay(), halfday); date.set(DateTimeFieldType.hourOfDay(), iHours % 12); } log.debug("2. halfday adjustments: " + date.getMillis() + " " + date); Date rtn = new Date(date.getMillis()); log.debug("3. final date: " + rtn.getTime() + " " + rtn); return rtn; } /** * Simulate what DateTimeField does * * @param dateStr * @param hours * @param minutes * @param amOrPm * @param use12HourFormat * @param tzClient * @return Date * @throws ParseException */ private Date convertDateJoda(final String dateStr, final Integer hours, final Integer minutes, final AM_PM amOrPm, final boolean use12HourFormat, final TimeZone tzClient) throws ParseException { log.debug(">>> convertDateJoda()"); DateTimeFormatter fmt = DateTimeFormat.shortDate(); // fmt.withZone(timeZone).parseDateTime("10/1/06 5:00 AM"); MutableDateTime date = (dateStr != null ? fmt.parseMutableDateTime(dateStr) : new MutableDateTime()); log.debug("1. mutable date: " + date.getMillis() + " " + date); // always set secs to 0 date.setSecondOfMinute(0); log.debug("2. secs = 0: " + date.getMillis() + " " + date); // The AM/PM field if (use12HourFormat) { date.set(DateTimeFieldType.halfdayOfDay(), amOrPm == AM_PM.PM ? 1 : 0); } log.debug("3. AM/PM: " + date.getMillis() + " " + date); // The hours if (hours == null) { date.setHourOfDay(0); } else { date.set(DateTimeFieldType.hourOfDay(), hours % (use12HourFormat ? 12 : 24)); } log.debug("4. hours: " + date.getMillis() + " " + date); // The minutes if (minutes == null) { date.setMinuteOfHour(0); } else { date.setMinuteOfHour(minutes); } log.debug("5. minutes: " + date.getMillis() + " " + date); // Use the client timezone to properly calculate the millisecs if (tzClient != null) { date.setZoneRetainFields(DateTimeZone.forTimeZone(tzClient)); } log.debug("6. timezone: " + date.getMillis() + " " + date); Date rtn = new Date(date.getMillis()); log.debug("7. final date: " + rtn.getTime() + " " + rtn); return rtn; } /** * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected * output file. * * @param <T> * * @param pageClass * @param filename * @throws Exception */ protected <T extends Page> void myTestExecution(final Class<T> pageClass, final String filename) throws Exception { System.out.println("=== " + pageClass.getName() + " ==="); tester.getSession().setLocale(Locale.ITALIAN); tester.startPage(pageClass); tester.assertRenderedPage(pageClass); String document = tester.getLastResponseAsString(); document = document.replaceAll("\\d\\d\\.\\d\\d\\.\\d\\d", "xx.xx.xx"); document = document.replaceAll("\\d\\d/\\d\\d/\\d\\d\\d\\d", "xx/xx/xxxx"); document = document.replaceAll("\\d\\d/\\d\\d/\\d\\d", "xx/xx/xx"); document = document.replaceAll("\\d\\d/\\d\\d\\d\\d", "xx/xxxx"); DiffUtil.validatePage(document, pageClass, filename, true); } }