Author: musachy
Date: Sat Dec 13 06:58:16 2008
New Revision: 726216

URL: http://svn.apache.org/viewvc?rev=726216&view=rev
Log:
Add test, and support for options in select tag

Added:
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
   (with props)
Modified:
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/TagHandler.java
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/XHTMLTagSerializer.java
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SelectHandler.java
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTestCase.java
    
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
   (contents, props changed)

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/TagHandler.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/TagHandler.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/TagHandler.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/TagHandler.java
 Sat Dec 13 06:58:16 2008
@@ -32,4 +32,5 @@
     void start(String name, Attributes a) throws IOException;
     void end(String name) throws IOException;
     void characters(String text) throws IOException;
+    void characters(String text, boolean encode) throws IOException;
 }

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/XHTMLTagSerializer.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/XHTMLTagSerializer.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/XHTMLTagSerializer.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/XHTMLTagSerializer.java
 Sat Dec 13 06:58:16 2008
@@ -24,13 +24,18 @@
 import java.io.Writer;
 
 import org.apache.struts2.components.template.TemplateRenderingContext;
+import com.opensymphony.xwork2.util.TextUtils;
 
 public class XHTMLTagSerializer implements TagSerializer {
 
     private Writer writer;
     
     public void characters(String text) throws IOException {
-        writer.write(text);
+        characters(text, true);
+    }
+
+    public void characters(String text, boolean encode) throws IOException {
+        writer.write(encode ? TextUtils.htmlEncode(text) : text);
     }
 
     public void end(String name) throws IOException {

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
 Sat Dec 13 06:58:16 2008
@@ -40,10 +40,13 @@
     protected boolean altSyntax;
 
     public void characters(String text) throws IOException {
+        characters(text, true);
+    }
+
+    public void characters(String text, boolean encode) throws IOException {
         if (nextTagHandler != null) {
-            nextTagHandler.characters(text);
+            nextTagHandler.characters(text, encode);
         }
-
     }
 
     public void end(String name) throws IOException {

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SelectHandler.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SelectHandler.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SelectHandler.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SelectHandler.java
 Sat Dec 13 06:58:16 2008
@@ -29,6 +29,9 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Map;
+import java.util.List;
+
+import com.opensymphony.xwork2.util.ValueStack;
 
 public class SelectHandler extends AbstractTagHandler implements TagGenerator {
     private Writer writer;
@@ -40,22 +43,22 @@
     }
 
     public void generate() throws IOException {
-        Map<String,Object> params = context.getParameters();
+        Map<String, Object> params = context.getParameters();
         Attributes a = new Attributes();
 
         Object value = params.get("nameValue");
 
         a.addDefaultToEmpty("name", params.get("name"))
-         .addIfExists("size", params.get("size"))
-         .addIfExists("value", value, false)
-         .addIfTrue("disabled", params.get("disabled"))
-         .addIfTrue("readonly", params.get("readonly"))
-         .addIfTrue("multiple", params.get("multiple"))
-         .addIfExists("tabindex", params.get("tagindex"))
-         .addIfExists("id", params.get("id"))
-         .addIfExists("class", params.get("cssClass"))
-         .addIfExists("style", params.get("cssStyle"))
-         .addIfExists("title", params.get("title"));
+                .addIfExists("size", params.get("size"))
+                .addIfExists("value", value, false)
+                .addIfTrue("disabled", params.get("disabled"))
+                .addIfTrue("readonly", params.get("readonly"))
+                .addIfTrue("multiple", params.get("multiple"))
+                .addIfExists("tabindex", params.get("tagindex"))
+                .addIfExists("id", params.get("id"))
+                .addIfExists("class", params.get("cssClass"))
+                .addIfExists("style", params.get("cssStyle"))
+                .addIfExists("title", params.get("title"));
         super.start("select", a);
 
         //options
@@ -68,17 +71,37 @@
             writeOption(headerKey, headerValue, selected);
         }
 
+        List list = (List) params.get("list");
+        String listKey = (String) params.get("listKey");
+        String listValue = (String) params.get("listValue");
+        ValueStack stack = this.context.getStack();
+        if (list != null) {
+            for (Object item : list) {
+                stack.push(item);
+
+                //key
+                Object itemKey = findValue(listKey != null ? listKey : "top");
+                String itemKeyStr = itemKey != null ? itemKey.toString() : "";
+                //value
+                Object itemValue = findValue(listValue != null ? listValue : 
"top");
+                String itemValueStr = itemValue != null ? itemValue.toString() 
: "";
+
+                boolean selected = ContainUtil.contains(value, 
params.get(itemKey));
+                writeOption(itemKeyStr, itemValueStr, selected);
+
+                stack.pop();
+            }
+        }
+
         super.end("select");
     }
 
     private void writeOption(String value, String text, boolean selected) 
throws IOException {
-        writer.write("<option value=\"");
-        writer.write(TextUtil.escapeHTML(value));
-        writer.write("\"");
-        if (selected)
-            writer.write(" selected=\"selected\" ");
-        writer.write(">");        
-        writer.write(TextUtil.escapeHTML(text));
-        writer.write("</option>");
+        Attributes attrs = new Attributes();
+        attrs.addIfExists("value", value)
+                .addIfTrue("selected", selected);
+        start("option", attrs);
+        characters(text);
+        end("option");
     }
 }

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTestCase.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTestCase.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTestCase.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTestCase.java
 Sat Dec 13 06:58:16 2008
@@ -95,6 +95,10 @@
         EasyMock.expect(stack.findValue(expr, toClass)).andReturn(returnVal);
     }
 
+     protected void expectFind(String expr, Object returnVal) {
+        EasyMock.expect(stack.findValue(expr)).andReturn(returnVal);
+    }
+
     protected void setUpStack() {
         //TODO setup a config with stack and all..for real
     }

Added: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java?rev=726216&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
 (added)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
 Sat Dec 13 06:58:16 2008
@@ -0,0 +1,42 @@
+/*
+ * $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.views.java.simple;
+
+public class Bean {
+    private int intField;
+    private String stringField;
+
+    public int getIntField() {
+        return intField;
+    }
+
+    public void setIntField(int intField) {
+        this.intField = intField;
+    }
+
+    public String getStringField() {
+        return stringField;
+    }
+
+    public void setStringField(String stringField) {
+        this.stringField = stringField;
+    }
+}

Propchange: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/Bean.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java?rev=726216&r1=726215&r2=726216&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
 (original)
+++ 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
 Sat Dec 13 06:58:16 2008
@@ -1,50 +1,95 @@
-package org.apache.struts2.views.java.simple;
-
-import org.apache.struts2.components.TextField;
-import org.apache.struts2.components.Select;
-import org.easymock.EasyMock;
-import com.opensymphony.xwork2.util.ValueStack;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class SelectTest  extends AbstractTestCase {
-
-     public void testRenderSelectWithHeader() {
-        SelectEx tag = new SelectEx(stack, request, response);
-
-        tag.setList("%{{'key0', 'key1'}}");
-        tag.setHeaderKey("%{'key0'}");
-        tag.setHeaderValue("%{'val'}");
-
-        tag.processParams();
-        map.putAll(tag.getParameters());
-        theme.renderTag("select", context);
-        String output = writer.getBuffer().toString();
-        String expected = s("<select name=''><option 
value='key0'>val</option></select>");
-        assertEquals(expected, output);
-    }
-
-    @Override
-    protected void setUpStack() {
-        super.setUpStack();
-
-        expectFind("'key0'", String.class, "key0");
-        expectFind("'val'", String.class, "val");
-    }
-
-    class SelectEx extends Select {
-        public SelectEx(ValueStack stack, HttpServletRequest request, 
HttpServletResponse response) {
-            super(stack, request, response);
-        }
-
-        public void processParams() {
-            //these methods are protected
-            evaluateParams();
-        }
-
-        public boolean altSyntax() {
-            return true;
-        }
-    }
-}
+/*
+ * $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.views.java.simple;
+
+import org.apache.struts2.components.TextField;
+import org.apache.struts2.components.Select;
+import org.easymock.EasyMock;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+public class SelectTest extends AbstractTestCase {
+    private Bean bean1;
+
+    public void testRenderSelectWithHeader() {
+        SelectEx tag = new SelectEx(stack, request, response);
+
+        tag.setList("%{{'key0', 'key1'}}");
+        tag.setHeaderKey("%{'key0'}");
+        tag.setHeaderValue("%{'val'}");
+
+        tag.processParams();
+        map.putAll(tag.getParameters());
+        theme.renderTag("select", context);
+        String output = writer.getBuffer().toString();
+        String expected = s("<select name=''><option 
value='key0'>val</option></select>");
+        assertEquals(expected, output);
+    }
+
+    public void testRenderSelectWithOptions() {
+        SelectEx tag = new SelectEx(stack, request, response);
+
+        tag.setList("%{list}");
+        tag.setListKey("intField");
+        tag.setListValue("stringField");
+
+        tag.processParams();
+        map.putAll(tag.getParameters());
+        theme.renderTag("select", context);
+        String output = writer.getBuffer().toString();
+        String expected = s("<select name=''><option 
value='1'>val</option></select>");
+        assertEquals(expected, output);
+    }
+
+    @Override
+    protected void setUpStack() {
+        super.setUpStack();
+        bean1 = new Bean();
+        bean1.setIntField(1);
+        bean1.setStringField("val");
+
+
+        expectFind("'key0'", String.class, "key0");
+        expectFind("'val'", String.class, "val");
+        expectFind("list", Arrays.asList(bean1));
+
+        expectFind("intField", 1);
+        expectFind("stringField", "val");
+    }
+
+    class SelectEx extends Select {
+        public SelectEx(ValueStack stack, HttpServletRequest request, 
HttpServletResponse response) {
+            super(stack, request, response);
+        }
+
+        public void processParams() {
+            //these methods are protected
+            evaluateParams();
+        }
+
+        public boolean altSyntax() {
+            return true;
+        }
+    }
+}

Propchange: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
struts/sandbox/trunk/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SelectTest.java
------------------------------------------------------------------------------
    svn:keywords = Id


Reply via email to