Author: mcucchiara Date: Sat Aug 13 16:58:39 2011 New Revision: 1157393 URL: http://svn.apache.org/viewvc?rev=1157393&view=rev Log: * small improvements * removed duplicate code
Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java?rev=1157393&r1=1157392&r2=1157393&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/AbstractUITagTest.java Sat Aug 13 16:58:39 2011 @@ -24,12 +24,10 @@ package org.apache.struts2.views.jsp; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.commons.beanutils.BeanUtils; import org.apache.struts2.ServletActionContext; import org.apache.struts2.views.jsp.ui.AbstractUITag; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; @@ -100,7 +98,7 @@ public abstract class AbstractUITagTest * * @param map The map to place this instance in. */ - public void addToMap(Map map) { + public void addToMap(Map<String, PropertyHolder> map) { if (map != null) { map.put(this.name, this); } @@ -114,32 +112,17 @@ public abstract class AbstractUITagTest * TODO: Check how we can remove this crap again. * * @author <a href="mailto:gie...@it-neering.net">Rene Gielen</a> + * @deprecated use BeanUtils#setProperty */ public class BeanHelper { - Map propDescriptors; Object bean; public BeanHelper(Object bean) { this.bean = bean; - - try { - PropertyDescriptor[] pds; - pds = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors(); - propDescriptors = new HashMap(pds.length + 1, 1f); - for (int i = 0; i < pds.length; i ++) { - propDescriptors.put(pds[i].getName(), pds[i]); - } - } catch (IntrospectionException e) { - e.printStackTrace(); - } } public void set(String name, Object value) throws IllegalAccessException, InvocationTargetException { - PropertyDescriptor pd = (PropertyDescriptor) propDescriptors.get(name); - - if (pd != null) { - pd.getWriteMethod().invoke(bean, new Object[]{value}); - } + BeanUtils.setProperty(this.bean, name, value); } } @@ -153,8 +136,8 @@ public abstract class AbstractUITagTest * @return A Map of PropertyHolders values bound to {@link org.apache.struts2.views.jsp.AbstractUITagTest.PropertyHolder#getName()} * as key. */ - protected Map initializedGenericTagTestProperties() { - Map result = new HashMap(); + protected Map<String, PropertyHolder> initializedGenericTagTestProperties() { + Map<String, PropertyHolder> result = new HashMap<String, PropertyHolder>(); new PropertyHolder("name", "someName").addToMap(result); new PropertyHolder("id", "someId").addToMap(result); new PropertyHolder("cssClass", "cssClass1", "class=\"cssClass1\"").addToMap(result); @@ -193,7 +176,7 @@ public abstract class AbstractUITagTest * @param exclude Names of properties to exclude from particular test. * @throws Exception */ - public void verifyGenericProperties(AbstractUITag tag, String theme, Map propertiesToTest, String[] exclude) throws Exception { + public void verifyGenericProperties(AbstractUITag tag, String theme, Map<String, PropertyHolder> propertiesToTest, String[] exclude) throws Exception { if (tag != null && propertiesToTest != null) { List excludeList; if (exclude != null) { @@ -207,12 +190,9 @@ public abstract class AbstractUITagTest tag.setTheme(theme); } - BeanHelper beanHelper = new BeanHelper(tag); - Iterator it = propertiesToTest.values().iterator(); - while (it.hasNext()) { - PropertyHolder propertyHolder = (PropertyHolder) it.next(); - if (! excludeList.contains(propertyHolder.getName())) { - beanHelper.set(propertyHolder.getName(), propertyHolder.getValue()); + for (PropertyHolder propertyHolder : propertiesToTest.values()) { + if (!excludeList.contains(propertyHolder.getName())) { + BeanUtils.setProperty(tag, propertyHolder.getName(), propertyHolder.getValue()); } } tag.doStartTag(); @@ -222,13 +202,11 @@ public abstract class AbstractUITagTest LOG.info("AbstractUITagTest - [verifyGenericProperties]: Tag output is " + writerString); } - assertTrue("Freemarker error detected in tag output: " + writerString, writerString.indexOf(FREEMARKER_ERROR_EXPECTATION) == -1); + assertFalse("Freemarker error detected in tag output: " + writerString, writerString.contains(normalize(FREEMARKER_ERROR_EXPECTATION))); - it = propertiesToTest.values().iterator(); - while (it.hasNext()) { - PropertyHolder propertyHolder = (PropertyHolder) it.next(); - if (! excludeList.contains(propertyHolder.getName())) { - assertTrue("Expected to find: " + propertyHolder.getExpectation() + " in resulting String: " + writerString, writerString.indexOf(propertyHolder.getExpectation()) > -1); + for (PropertyHolder propertyHolder : propertiesToTest.values()) { + if (!excludeList.contains(propertyHolder.getName())) { + assertTrue("Expected to find: " + propertyHolder.getExpectation() + " in resulting String: " + writerString, writerString.contains(propertyHolder.getExpectation())); } } } @@ -238,9 +216,9 @@ public abstract class AbstractUITagTest * Do a generic verification that setting certain properties on a tag causes expected output regarding this * property. Which properties to test with which expectations will be determined by the Map retrieved by {@link #initializedGenericTagTestProperties()}. * - * @param tag The fresh created tag instance to test. - * @param theme The theme to use. If <tt>null</tt>, use configured default theme. - * @param exclude Names of properties to exclude from particular test. + * @param tag The fresh created tag instance to test. + * @param theme The theme to use. If <tt>null</tt>, use configured default theme. + * @param exclude Names of properties to exclude froObjectm particular test. * @throws Exception */ public void verifyGenericProperties(AbstractUITag tag, String theme, String[] exclude) throws Exception { @@ -266,19 +244,19 @@ public abstract class AbstractUITagTest * @throws Exception if the validation failed */ public void verify(URL url) throws Exception { - verify(url,null); + verify(url, null); } /** * Attempt to verify the contents of this.writer against the contents of the URL specified. verify() performs a * trim on both ends * - * @param url the HTML snippet that we want to validate against + * @param url the HTML snippet that we want to validate against * @param excluded * @throws Exception if the validation failed */ public void verify(URL url, String[] excluded) throws Exception { - if (url == null) { + if (url == null) { fail("unable to verify a null URL"); } else if (this.writer == null) { fail("AbstractJspWriter.writer not initialized. Unable to verify"); @@ -321,6 +299,17 @@ public abstract class AbstractUITagTest * space, tab, \r, and \n characters are converted to a single space character * * @param obj the object to be normalized. normalize will perform its operation on obj.toString().trim() ; + * @return the normalized string + */ + public static String normalize(Object obj) { + return normalize(obj, false); + } + + /** + * normalizes a string so that strings generated on different platforms can be compared. any group of one or more + * space, tab, \r, and \n characters are converted to a single space character + * + * @param obj the object to be normalized. normalize will perform its operation on obj.toString().trim() ; * @param appendSpace * @return the normalized string */