blob: cedd72fee4d77bc854bf26a12fcb98c2a7f97272 [file] [log] [blame]
/*
* $Id$
*
* 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.struts2.dojo.views.jsp.ui;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.struts2.dojo.components.DateTimePicker;
/**
*/
public class DateTimePickerTagTest extends AbstractUITagTest {
final private static SimpleDateFormat RFC3339_FORMAT = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
public void testSimple() throws Exception {
DateTimePickerTag tag = new DateTimePickerTag();
tag.setPageContext(pageContext);
tag.setId("id");
tag.setAdjustWeeks("true");
tag.setDayWidth("b");
tag.setDisplayWeeks("true");
tag.setEndDate("%{'2008-01-01'}");
tag.setStartDate("%{'2008-02-02'}");
tag.setStaticDisplay("false");
tag.setWeekStartsOn("g");
tag.setName("h");
tag.setLanguage("i");
tag.setTemplateCssPath("j");
tag.setValueNotifyTopics("k");
tag.setValue("%{'2008-03-03'}");
tag.doStartTag();
tag.doEndTag();
verify(DateTimePickerTagTest.class
.getResource("DateTimePickerTagTest-1.txt"));
}
public void testSimpleDisabled() throws Exception {
DateTimePickerTag tag = new DateTimePickerTag();
tag.setPageContext(pageContext);
tag.setId("id");
tag.setAdjustWeeks("true");
tag.setDayWidth("b");
tag.setDisplayWeeks("true");
tag.setEndDate("%{'2008-01-01'}");
tag.setStartDate("%{'2008-02-02'}");
tag.setStaticDisplay("false");
tag.setWeekStartsOn("g");
tag.setName("h");
tag.setLanguage("i");
tag.setTemplateCssPath("j");
tag.setValueNotifyTopics("k");
tag.setValue("%{'2008-03-03'}");
tag.setDisabled("true");
tag.doStartTag();
tag.doEndTag();
verify(DateTimePickerTagTest.class
.getResource("DateTimePickerTagTest-2.txt"));
}
public void testTodayValue() throws Exception {
DateTimePickerTag tag = new DateTimePickerTag();
tag.setPageContext(pageContext);
tag.setValue("%{'today'}");
assertDateValue("nameValue", tag, new Date(), true, false);
}
public void testDateParsing() throws Exception {
DateTimePickerTag tag = new DateTimePickerTag();
tag.setPageContext(pageContext);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2007);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 10);
calendar.set(Calendar.MILLISECOND, 20);
calendar.set(Calendar.AM_PM, Calendar.AM);
Date date = calendar.getTime();
//test 'nameValue'
stack.set("date", "01-01-2007");
tag.setValue("%{date}");
tag.setDisplayFormat("MM-dd-yyyy");
assertDateValue("nameValue", tag, date, true, false);
assertDateProperty("nameValue", tag, date);
tag.setDisplayFormat(null);
//test 'startDate'
tag.setStartDate("%{date}");
assertDateProperty("startDate", tag, date);
//test 'endDate'
tag.setEndDate("%{date}");
assertDateProperty("endDate", tag, date);
}
private void assertDateProperty(String property, DateTimePickerTag tag, final Date date) throws Exception {
final DateFormat shortTimeFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
final DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
final DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
final DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG);
final DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL);
//try a Date value
stack.set("date", date);
assertDateValue(property, tag, date, true, false);
//try a Calendar value
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
stack.set("date", calendar);
assertDateValue(property, tag, date, true, false);
//try an object whose to string returns a parseable date
stack.set("date", new Object() {
@Override
public String toString() {
return fullFormat.format(date);
}
});
assertDateValue(property, tag, date, true, false);
// try short format
stack.set("date", shortFormat.format(date));
assertDateValue(property, tag, date, true, false);
//try medium format
stack.set("date", mediumFormat.format(date));
assertDateValue(property, tag, date, true, false);
//try long format
stack.set("date", longFormat.format(date));
assertDateValue(property, tag, date, true, false);
//try full format
stack.set("date", fullFormat.format(date));
assertDateValue(property, tag, date, true, false);
//try RFC 3339 format
stack.set("date", RFC3339_FORMAT.format(date));
assertDateValue(property, tag, date, true, false);
//try short time format
stack.set("date", shortTimeFormat.format(date));
assertDateValue(property, tag, date, false, true);
}
private void assertDateValue(String property, DateTimePickerTag tag, Date toCompareDate,
boolean compareDate, boolean compareTime) throws Exception {
tag.doStartTag();
DateTimePicker picker = (DateTimePicker) tag.getComponent();
picker.evaluateParams();
String dateStr = (String) tag.getComponent().getParameters()
.get(property);
Date date = RFC3339_FORMAT.parse(dateStr);
assertNotNull(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar toCompareCalendar = Calendar.getInstance();
toCompareCalendar.setTime(toCompareDate);
if (compareDate) {
assertEquals(toCompareCalendar.get(Calendar.YEAR), calendar
.get(Calendar.YEAR));
assertEquals(toCompareCalendar.get(Calendar.MONTH), calendar
.get(Calendar.MONTH));
assertEquals(toCompareCalendar.get(Calendar.DAY_OF_MONTH), calendar
.get(Calendar.DAY_OF_MONTH));
}
if (compareTime) {
assertEquals(toCompareCalendar.get(Calendar.HOUR_OF_DAY), calendar
.get(Calendar.HOUR_OF_DAY));
assertEquals(toCompareCalendar.get(Calendar.MINUTE), calendar
.get(Calendar.MINUTE));
assertEquals(toCompareCalendar.get(Calendar.AM_PM), calendar
.get(Calendar.AM_PM));
}
}
}