/*
* $Id: TestDynaActionFormClass.java 471754 2006-11-06 14:55:09Z husted $
*
* 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.struts.action;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.struts.config.FormBeanConfig;
import org.apache.struts.config.FormPropertyConfig;
/**
* Suite of unit tests for the <code>org.apache.struts.action.DynaActionFormClass</code>
* class.
*/
public class TestDynaActionFormClass extends TestCase {
/**
* The set of <code>FormPropertyConfig</code> objects to use when creating
* our <code>FormBeanConfig</code>.
*/
protected static final FormPropertyConfig[] dynaProperties =
{
new FormPropertyConfig("booleanProperty", "boolean", "true", "true"),
new FormPropertyConfig("booleanSecond", "boolean", "true", "true"),
new FormPropertyConfig("doubleProperty", "double", "321.0", "GET"),
new FormPropertyConfig("floatProperty", "float", "123.0",
"POST, HEAD"),
new FormPropertyConfig("intArray", "int[]",
"{ 0, 10,20, \"30\" '40' }"),
new FormPropertyConfig("intIndexed", "int[]",
" 0 100, 200, 300, 400 "),
new FormPropertyConfig("intProperty", "int", "123"),
new FormPropertyConfig("listIndexed", "java.util.List", null),
new FormPropertyConfig("longProperty", "long", "321"),
new FormPropertyConfig("mappedProperty", "java.util.Map", null),
new FormPropertyConfig("mappedIntProperty", "java.util.Map", null),
// new FormPropertyConfig("nullProperty", "java.lang.String", null),
new FormPropertyConfig("shortProperty", "short", "987"),
new FormPropertyConfig("stringArray", "java.lang.String[]",
"{ 'String 0', 'String 1', 'String 2', 'String 3', 'String 4'}"),
new FormPropertyConfig("stringIndexed", "java.lang.String[]",
"{ 'String 0', 'String 1', 'String 2', 'String 3', 'String 4'}"),
new FormPropertyConfig("stringProperty", "java.lang.String",
"This is a string"),
};
// ----------------------------------------------------- Instance Variables
/**
* The <code>FormBeanConfig</code> structure for the form bean we will be
* creating.
*/
protected FormBeanConfig beanConfig = null;
/**
* The <code>DynaActionFormClass</code> to use for testing.
*/
protected DynaActionFormClass dynaClass = null;
/**
* Defines the testcase name for JUnit.
*
* @param theName the testcase's name.
*/
public TestDynaActionFormClass(String theName) {
super(theName);
}
/**
* Start the tests.
*
* @param theArgs the arguments. Not used
*/
public static void main(String[] theArgs) {
junit.awtui.TestRunner.main(new String[] {
TestDynaActionFormClass.class.getName()
});
}
/**
* @return a test suite (<code>TestSuite</code>) that includes all methods
* starting with "test"
*/
public static Test suite() {
// All methods starting with "test" will be executed in the test suite.
return new TestSuite(TestDynaActionFormClass.class);
}
// ----------------------------------------------------- Setup and Teardown
public void setUp() {
// Construct a FormBeanConfig to be used
beanConfig = new FormBeanConfig();
beanConfig.setName("dynaForm");
beanConfig.setType("org.apache.struts.action.DynaActionForm");
// Add relevant property definitions
for (int i = 0; i < dynaProperties.length; i++) {
beanConfig.addFormPropertyConfig(dynaProperties[i]);
}
// Construct a corresponding DynaActionFormClass
dynaClass = new DynaActionFormClass(beanConfig);
}
public void tearDown() {
dynaClass = null;
beanConfig = null;
}
// -------------------------------------------------- Verify FormBeanConfig
// Check for ability to add a property before and after freezing
public void testConfigAdd() {
FormPropertyConfig prop = null;
// Before freezing
prop = beanConfig.findFormPropertyConfig("fooProperty");
assertNull("fooProperty not found", prop);
beanConfig.addFormPropertyConfig(new FormPropertyConfig("fooProperty",
"java.lang.String", ""));
prop = beanConfig.findFormPropertyConfig("fooProperty");
assertNotNull("fooProperty found", prop);
// after freezing
beanConfig.freeze();
prop = beanConfig.findFormPropertyConfig("barProperty");
assertNull("barProperty not found", prop);
try {
beanConfig.addFormPropertyConfig(new FormPropertyConfig(
"barProperty", "java.lang.String", ""));
fail("barProperty add not prevented");
} catch (IllegalStateException e) {
; // Expected result
}
}
// Check basic FormBeanConfig properties
public void testConfigCreate() {
assertTrue("dynamic is correct", beanConfig.getDynamic());
assertEquals("name is correct", "dynaForm", beanConfig.getName());
assertEquals("type is correct",
"org.apache.struts.action.DynaActionForm", beanConfig.getType());
}
// Check attempts to add a duplicate property name
public void testConfigDuplicate() {
FormPropertyConfig prop = null;
assertNull("booleanProperty is found", prop);
try {
beanConfig.addFormPropertyConfig(new FormPropertyConfig(
"booleanProperty", "java.lang.String", ""));
fail("Adding duplicate property not prevented");
} catch (IllegalArgumentException e) {
; // Expected result
}
}
// Check the configured FormPropertyConfig element initial values
public void testConfigInitialValues() {
assertEquals("booleanProperty value", Boolean.TRUE,
beanConfig.findFormPropertyConfig("booleanProperty").initial());
assertEquals("booleanSecond value", Boolean.TRUE,
beanConfig.findFormPropertyConfig("booleanSecond").initial());
assertEquals("doubleProperty value", new Double(321.0),
beanConfig.findFormPropertyConfig("doubleProperty").initial());
assertEquals("floatProperty value", new Float((float) 123.0),
beanConfig.findFormPropertyConfig("floatProperty").initial());
assertEquals("intProperty value", new Integer(123),
beanConfig.findFormPropertyConfig("intProperty").initial());
// FIXME - listIndexed
assertEquals("longProperty value", new Long(321),
beanConfig.findFormPropertyConfig("longProperty").initial());
// FIXME - mappedProperty
// FIXME - mappedIntProperty
// assertNull("nullProperty value",
// beanConfig.findFormPropertyConfig("nullProperty").initial());
assertEquals("shortProperty value", new Short((short) 987),
beanConfig.findFormPropertyConfig("shortProperty").initial());
// FIXME - stringArray
// FIXME - stringIndexed
assertEquals("stringProperty value", "This is a string",
beanConfig.findFormPropertyConfig("stringProperty").initial());
}
// Check the configured FormPropertyConfig element properties
public void testConfigProperties() {
for (int i = 0; i < dynaProperties.length; i++) {
FormPropertyConfig dynaProperty =
beanConfig.findFormPropertyConfig(dynaProperties[i].getName());
assertNotNull("Found dynaProperty " + dynaProperties[i].getName(),
dynaProperty);
assertEquals("dynaProperty name for " + dynaProperties[i].getName(),
dynaProperties[i].getName(), dynaProperty.getName());
assertEquals("dynaProperty type for " + dynaProperties[i].getName(),
dynaProperties[i].getType(), dynaProperty.getType());
assertEquals("dynaProperty initial for "
+ dynaProperties[i].getName(), dynaProperties[i].getInitial(),
dynaProperty.getInitial());
}
}
// Check for ability to remove a property before and after freezing
public void testConfigRemove() {
FormPropertyConfig prop = null;
// Before freezing
prop = beanConfig.findFormPropertyConfig("booleanProperty");
assertNotNull("booleanProperty found", prop);
beanConfig.removeFormPropertyConfig(prop);
prop = beanConfig.findFormPropertyConfig("booleanProperty");
assertNull("booleanProperty not deleted", prop);
// after freezing
beanConfig.freeze();
prop = beanConfig.findFormPropertyConfig("booleanSecond");
assertNotNull("booleanSecond found", prop);
try {
beanConfig.removeFormPropertyConfig(prop);
fail("booleanSecond remove not prevented");
} catch (IllegalStateException e) {
; // Expected result
}
}
// --------------------------------------------- Create DynaActionFormClass
// Test basic DynaActionFormClass name and properties
public void testClassCreate() {
assertEquals("name", "dynaForm", dynaClass.getName());
for (int i = 0; i < dynaProperties.length; i++) {
DynaProperty prop =
dynaClass.getDynaProperty(dynaProperties[i].getName());
assertNotNull("Found property " + dynaProperties[i].getName());
assertEquals("Class for property " + dynaProperties[i].getName(),
dynaProperties[i].getTypeClass(), prop.getType());
}
}
}