You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2007/04/20 04:29:32 UTC

svn commit: r530613 - in /struts/struts2/trunk/plugins/dojo/src: main/java/org/apache/struts2/dojo/components/ test/java/org/apache/struts2/dojo/views/jsp/ui/ test/resources/org/apache/struts2/dojo/views/jsp/ui/

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:
  *     &lt;s:datetimepicker name="order.date" label="Order Date" /&gt;
  * Example 2:
- *     &lt;s:datetimepicker name="delivery.date" label="Delivery Date" format="yyyy-MM-dd"  /&gt;
- *
+ *     &lt;s:datetimepicker name="delivery.date" label="Delivery Date" displayFormat="yyyy-MM-dd"  /&gt;
+ * Example 3:    
+ *      &lt;s:datetimepicker name="delivery.date" label="Delivery Date" value="%{date}"  /&gt;
  * <!-- END SNIPPET: expl1 -->
  * </pre>
  * <p/>
  *
- * <!-- START SNIPPET: expldesc2 -->
- *
- * The css could be changed by using the following :-
- *
- * <!-- END SNIPPET: expldesc2 -->
- *
- * <pre>
- * <!-- START SNIPPET: expl2 -->
- *
- * &lt;s:datetimepicker name="birthday" label="Birthday" templateCss="...." /&gt;
- *
- * <!-- 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"