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