You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2010/11/02 08:36:55 UTC

svn commit: r1029965 - in /click/trunk/click/framework: src/org/apache/click/control/Select.java test/org/apache/click/control/SelectTest.java

Author: sabob
Date: Tue Nov  2 07:36:54 2010
New Revision: 1029965

URL: http://svn.apache.org/viewvc?rev=1029965&view=rev
Log:
added stateful Select. CLK-715

Modified:
    click/trunk/click/framework/src/org/apache/click/control/Select.java
    click/trunk/click/framework/test/org/apache/click/control/SelectTest.java

Modified: click/trunk/click/framework/src/org/apache/click/control/Select.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/Select.java?rev=1029965&r1=1029964&r2=1029965&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/Select.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/Select.java Tue Nov  2 07:36:54 2010
@@ -20,6 +20,7 @@ package org.apache.click.control;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -931,6 +932,54 @@ public class Select extends Field {
     }
 
     /**
+     * Return the Select state. The following state is returned, depending on
+     * whether {@link #isMultiple()} is <tt>true</tt> or <tt>false</tt>:
+     * <ul>
+     * <li>{@link #getValue()} if {@link #isMultiple()} is <tt>false</tt></li>
+     * <li>{@link #getSelectedValues()} if {@link #isMultiple()} is <tt>true</tt></li>
+     * </ul>
+     *
+     * @return the Select state
+     */
+    @Override
+    public Object getState() {
+        if (isMultiple()) {
+            List selectedState = getSelectedValues();
+            if (selectedState.isEmpty()) {
+                return null;
+            } else {
+                return selectedState.toArray(new String[0]);
+            }
+        } else {
+            return super.getState();
+        }
+    }
+
+    /**
+     * Set the Select state.
+     *
+     * @param state the Select state to set
+     */
+    @Override
+    public void setState(Object state) {
+        if (state == null) {
+            return;
+        }
+
+        List<String> localSelectedState = new ArrayList<String>(5);
+
+        if (state instanceof String) {
+            String selectState = (String) state;
+            setValue(selectState);
+            localSelectedState.add(selectState);
+        } else {
+            String[] selectState = (String[]) state;
+            localSelectedState = Arrays.asList(selectState);
+        }
+        setSelectedValues(localSelectedState);
+    }
+
+    /**
      * This method invokes {@link #getOptionList()} to ensure exceptions thrown
      * while retrieving options will be handled by the error page.
      *

Modified: click/trunk/click/framework/test/org/apache/click/control/SelectTest.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/test/org/apache/click/control/SelectTest.java?rev=1029965&r1=1029964&r2=1029965&view=diff
==============================================================================
--- click/trunk/click/framework/test/org/apache/click/control/SelectTest.java (original)
+++ click/trunk/click/framework/test/org/apache/click/control/SelectTest.java Tue Nov  2 07:36:54 2010
@@ -18,6 +18,9 @@
  */
 package org.apache.click.control;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import junit.framework.TestCase;
 import org.apache.click.MockContext;
 
@@ -42,4 +45,100 @@ public class SelectTest extends TestCase
         // Check that the value <script> is not rendered
         assertTrue(select.toString().indexOf(value) < 0);
     }
+
+    /**
+     * Test that Select.getState contains the select value.
+     * CLK-715
+     */
+    public void testGetState() {
+        // Setup Select
+        Select select  = new Select("gender");
+        select.add(new Option("male"));
+        select.add(new Option("female"));
+
+        String expectedState = "female";
+        select.setValue(expectedState);
+
+        // Setup Select value
+        List<String> selectedValues = new ArrayList<String>();
+        selectedValues.add(expectedState);
+        select.setSelectedValues(selectedValues);
+
+        Object state = select.getState();
+
+        // Perform tests
+        assertEquals(expectedState, state);
+        assertEquals(state, select.getValue());
+        assertEquals(state, select.getSelectedValues().get(0));
+    }
+
+    /**
+     * Test that Select.getState contains the select values.
+     * CLK-715
+     */
+    public void testGetStateMultiple() {
+        // Setup Select
+        Select select  = new Select("gender");
+        select.add(new Option("male"));
+        select.add(new Option("female"));
+                select.setMultiple(true);
+
+        // Setup Select values
+        List<String> selectedValues = new ArrayList<String>();
+        selectedValues.add("male");
+        selectedValues.add("female");
+        select.setSelectedValues(selectedValues);
+
+        String[] state = (String[]) select.getState();
+
+        Object expectedState = "male";
+        assertEquals(expectedState, state[0]);
+
+        // Perform tests
+        String[] expectedStateArray = new String[] {"male", "female"};
+        assertTrue(Arrays.equals(expectedStateArray, state));
+
+        assertTrue(Arrays.equals(state, select.getSelectedValues().toArray()));
+    }
+
+    /**
+     * Test that Select.setState set the select value.
+     *
+     * CLK-715
+     */
+    public void testSetState() {
+        // Setup Select
+        Select select  = new Select("gender");
+        select.add(new Option("male"));
+        select.add(new Option("female"));
+
+        String expectedState = "female";
+
+        select.setState(expectedState);
+
+        // Perform tests
+        assertEquals(expectedState, select.getValue());
+        assertEquals(expectedState, select.getSelectedValues().get(0));
+    }
+
+    /**
+     * Test that Select.setState set the select value if multiple is true.
+     *
+     * CLK-715
+     */
+    public void testSetStateMultiple() {
+        // Setup Select
+        Select select  = new Select("gender");
+        select.setMultiple(true);
+        select.add(new Option("male"));
+        select.add(new Option("female"));
+
+        String[] expectedState = {"male", "female"};
+
+        select.setState(expectedState);
+
+        // Perform tests
+        assertEquals(expectedState[0], select.getValue());
+        assertTrue(Arrays.equals(expectedState, select.getSelectedValues().toArray()));
+    }
 }