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