Package org.apache.wicket.extensions.yui.calendar

Source Code of org.apache.wicket.extensions.yui.calendar.DatePickerTest

/*
* 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);
  }
}
TOP

Related Classes of org.apache.wicket.extensions.yui.calendar.DatePickerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.