Author: musachy Date: Thu Apr 19 19:29:31 2007 New Revision: 530613 URL: http://svn.apache.org/viewvc?view=rev&rev=530613 Log: Add testcases and improve javadoc for DateTimePicker
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest.java struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest-1.txt Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java?view=diff&rev=530613&r1=530612&r2=530613 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/DateTimePicker.java Thu Apr 19 19:29:31 2007 @@ -21,7 +21,6 @@ package org.apache.struts2.dojo.components; import java.text.DateFormat; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -92,13 +91,23 @@ * </table> * * <p> - * The value sent to the server is - * typically a locale-independent value in a hidden field as defined by the name - * attribute. RFC3339 representation is the format used. + * The value sent to the server is a locale-independent value, in a hidden field as defined + * by the name attribute. The value will be formatted conforming to RFC3 339 + * (yyyy-MM-dd'T'HH:mm:ss) * </p> - * - * <p/> - * + * <p> + * The following formats(in order) will be used to parse the values of the attributes 'value', + * 'startDate' and 'endDate': + * </p> + * <ul> + * <li>RFC 3339 + * <li>SimpleDateFormat.getTimeInstance(DateFormat.SHORT + * <li>SimpleDateFormat.getDateInstance(DateFormat.SHORT + * <li>SimpleDateFormat.getDateInstance(DateFormat.MEDIUM + * <li>SimpleDateFormat.getDateInstance(DateFormat.FULL + * <li>SimpleDateFormat.getDateInstance(DateFormat.LONG + * <li>'displayFormat' attribute value + * </ul> * <!-- END SNIPPET: javadoc --> * * <b>Examples</b> @@ -109,26 +118,13 @@ * Example 1: * <s:datetimepicker name="order.date" label="Order Date" /> * Example 2: - * <s:datetimepicker name="delivery.date" label="Delivery Date" format="yyyy-MM-dd" /> - * + * <s:datetimepicker name="delivery.date" label="Delivery Date" displayFormat="yyyy-MM-dd" /> + * Example 3: + * <s:datetimepicker name="delivery.date" label="Delivery Date" value="%{date}" /> * <!-- END SNIPPET: expl1 --> * </pre> * <p/> * - * <!-- START SNIPPET: expldesc2 --> - * - * The css could be changed by using the following :- - * - * <!-- END SNIPPET: expldesc2 --> - * - * <pre> - * <!-- START SNIPPET: expl2 --> - * - * <s:datetimepicker name="birthday" label="Birthday" templateCss="...." /> - * - * <!-- END SNIPPET: expl2 --> - * </pre> - * */ @StrutsTag(name="datetimepicker", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.DateTimePickerTag", description="Render datetimepicker") public class DateTimePicker extends UIBean { @@ -172,9 +168,9 @@ if(adjustWeeks != null) addParameter("adjustWeeks", findValue(adjustWeeks, Boolean.class)); if(startDate != null) - addParameter("startDate", findString(startDate)); + addParameter("startDate", format(findString(startDate))); if(endDate != null) - addParameter("endDate", findString(endDate)); + addParameter("endDate", format(findString(endDate))); if(weekStartsOn != null) addParameter("weekStartsOn", findString(weekStartsOn)); if(staticDisplay != null) @@ -334,17 +330,17 @@ Date date = null; //formats used to parse the date List<DateFormat> formats = new ArrayList<DateFormat>(); - if (this.displayFormat != null) { - SimpleDateFormat displayFormat = new SimpleDateFormat( - (String) getParameters().get("displayFormat")); - formats.add(displayFormat); - } formats.add(RFC3339_FORMAT); formats.add(SimpleDateFormat.getTimeInstance(DateFormat.SHORT)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.SHORT)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.MEDIUM)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.FULL)); formats.add(SimpleDateFormat.getDateInstance(DateFormat.LONG)); + if (this.displayFormat != null) { + SimpleDateFormat displayFormat = new SimpleDateFormat( + (String) getParameters().get("displayFormat")); + formats.add(displayFormat); + } for (DateFormat format : formats) { try { Modified: struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest.java?view=diff&rev=530613&r1=530612&r2=530613 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest.java (original) +++ struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest.java Thu Apr 19 19:29:31 2007 @@ -20,9 +20,22 @@ */ 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 javax.servlet.jsp.JspException; + +import org.apache.struts2.dojo.TestAction; +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); @@ -32,8 +45,8 @@ tag.setAdjustWeeks("true"); tag.setDayWidth("b"); tag.setDisplayWeeks("true"); - tag.setEndDate("d"); - tag.setStartDate("e"); + tag.setEndDate("01-01-2008"); + tag.setStartDate("01-01-2007"); tag.setStaticDisplay("false"); tag.setWeekStartsOn("g"); tag.setName("h"); @@ -44,7 +57,109 @@ tag.doStartTag(); tag.doEndTag(); - verify(DateTimePickerTagTest.class.getResource("DateTimePickerTagTest-1.txt")); + verify(DateTimePickerTagTest.class + .getResource("DateTimePickerTagTest-1.txt")); + } + + 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, Date date) throws Exception { + DateFormat shortTimeFormat = DateFormat.getTimeInstance(DateFormat.SHORT); + DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT); + DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM); + DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG); + DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL); + + // try short format on 'value' + stack.set("date", shortFormat.format(date)); + assertDateValue(property, tag, date, true, false); + + //try medium format on 'value' + stack.set("date", mediumFormat.format(date)); + assertDateValue(property, tag, date, true, false); + + //try long format on 'value' + stack.set("date", longFormat.format(date)); + assertDateValue(property, tag, date, true, false); + + //try long format on 'value' + stack.set("date", fullFormat.format(date)); + assertDateValue(property, tag, date, true, false); + + //try RFC 3339 format on 'value' + stack.set("date", RFC3339_FORMAT.format(date)); + assertDateValue(property, tag, date, true, false); + + //try short time format on 'value' + 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.end(pageContext.getOut(), null); + + 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)); + } + } } Modified: struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest-1.txt URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest-1.txt?view=diff&rev=530613&r1=530612&r2=530613 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest-1.txt (original) +++ struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/DateTimePickerTagTest-1.txt Thu Apr 19 19:29:31 2007 @@ -6,8 +6,8 @@ inputName="h" displayWeeks="true" adjustWeeks="true" - startDate="e" - endDate="d" + startDate="01-01-2007" + endDate="01-01-2008" weekStartsOn="g" staticDisplay="false" templateCssPath="j"