http://git-wip-us.apache.org/repos/asf/wicket/blob/d32dafd6/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
 
b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
index 11d5ab8..a99e77f 100644
--- 
a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
+++ 
b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatePickerTest.java
@@ -1,747 +1,760 @@
-/*
- * 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.WicketTestCase;
-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.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.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.WicketTestCase#tearDown()
-        */
-       @Override
-       protected void tearDown() throws Exception
-       {
-               TimeZone.setDefault(defaultTz);
-               DateTimeZone.setDefault(DateTimeZone.forTimeZone(defaultTz));
-
-               super.tearDown();
-       }
-
-       /**
-        * 
-        * @throws Exception
-        */
-       public void test1() throws Exception
-       {
-               log.debug("=========== test1() =================");
-               myTestExecution(DatesPage1.class, 
"DatesPage1_ExpectedResult.html");
-       }
-
-       /**
-        * Tests conversion of input for DateTimeField and DateField.
-        * 
-        * @throws Exception
-        */
-       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
-        */
-       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
-        */
-       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
-        */
-       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.
-        */
-       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.
-        */
-       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
-        */
-       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 &ltinput&gt fields for 
DateTimeField, DateField and
-        * TimeField when they are given Date models containing Date instances.
-        */
-       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
-        */
-       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
-        */
-       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
-        */
-       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
-        */
-       public 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
-        */
-       public 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.GERMAN);
-               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.xxxx");
-
-               DiffUtil.validatePage(document, pageClass, filename, true);
-       }
-}
+/*
+ * 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.WicketTestCase;
+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.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.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.WicketTestCase#tearDown()
+        */
+       @Override
+       protected void tearDown() throws Exception
+       {
+               TimeZone.setDefault(defaultTz);
+               DateTimeZone.setDefault(DateTimeZone.forTimeZone(defaultTz));
+
+               super.tearDown();
+       }
+
+       /**
+        * 
+        * @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 &ltinput&gt 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.GERMAN);
+               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.xxxx");
+
+               DiffUtil.validatePage(document, pageClass, filename, true);
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d32dafd6/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1_ExpectedResult.html
----------------------------------------------------------------------
diff --git 
a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1_ExpectedResult.html
 
b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1_ExpectedResult.html
index acc6554..7400398 100644
--- 
a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1_ExpectedResult.html
+++ 
b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1_ExpectedResult.html
@@ -1,6 +1,9 @@
 
 <html xmlns="http://www.w3.org/1999/xhtml";>
-<head>
+<head><script type="text/javascript" 
src="../resource/org.apache.wicket.extensions.yui.YuiLib/yuiloader/yuiloader.js"></script>
+<script type="text/javascript" 
src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery.js"></script>
+<script type="text/javascript" 
src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery.js"></script>
+
 <title>Wicket Examples - dates</title>
 <link rel="stylesheet" type="text/css" href="../../style.css"/>
 <style type="text/css">
@@ -11,11 +14,7 @@ th {
 }
 
 /*]]>*/
-</style>
-<script type="text/javascript" 
src="../resource/org.apache.wicket.extensions.yui.YuiLib/yuiloader/yuiloader.js"></script>
-<script type="text/javascript" 
src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery.js"></script>
-<script type="text/javascript" 
src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery.js"></script>
-<script type="text/javascript" >
+</style><script type="text/javascript" >
 /*<![CDATA[*/
 Wicket.Event.add(window, "domready", function(event) { 
 /*

http://git-wip-us.apache.org/repos/asf/wicket/blob/d32dafd6/wicket-examples/src/main/java/org/apache/wicket/examples/resourcedecoration/HomePage.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/resourcedecoration/HomePage.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/resourcedecoration/HomePage.java
index 3fb4ea8..f48d5dd 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/resourcedecoration/HomePage.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/resourcedecoration/HomePage.java
@@ -76,7 +76,7 @@ public class HomePage extends WicketExamplePage
                        {
                                HomePage.this.replace(new 
AjaxProofContainer("ajaxProofPlaceholder"));
                                
target.add(HomePage.this.get("ajaxProofPlaceholder"));
-                               stop();
+                               stop(target);
                        }
                });
 

Reply via email to