/*
* $Id: TestModuleConfig.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.config;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.commons.digester.Digester;
import java.io.InputStream;
/**
* Unit tests for the <code>org.apache.struts.config</code> package.
*
* @version $Rev: 471754 $ $Date: 2005-03-01 20:26:14 -0500 (Tue, 01 Mar 2005)
* $
*/
public class TestModuleConfig extends TestCase {
// ----------------------------------------------------- Instance Variables
/**
* The ModuleConfig we are testing.
*/
protected ModuleConfig config = null;
// ----------------------------------------------------------- Constructors
/**
* Construct a new instance of this test case.
*
* @param name Name of the test case
*/
public TestModuleConfig(String name) {
super(name);
}
// --------------------------------------------------------- Public Methods
/**
* Set up instance variables required by this test case.
*/
public void setUp() {
ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();
config = factoryObject.createModuleConfig("");
}
/**
* Return the tests included in this test suite.
*/
public static Test suite() {
return (new TestSuite(TestModuleConfig.class));
}
/**
* Tear down instance variables required by this test case.
*/
public void tearDown() {
config = null;
}
// ------------------------------------------------ Individual Test Methods
private void parseConfig(String publicId, String entityURL,
String strutsConfig) {
// Prepare a Digester for parsing a struts-config.xml file
Digester digester = new Digester();
digester.push(config);
digester.setNamespaceAware(true);
digester.setValidating(true);
digester.addRuleSet(new ConfigRuleSet());
digester.register(publicId,
this.getClass().getResource(entityURL).toString());
// Parse the test struts-config.xml file
try {
InputStream input =
this.getClass().getResourceAsStream(strutsConfig);
assertNotNull("Got an input stream for " + strutsConfig, input);
digester.parse(input);
input.close();
} catch (Throwable t) {
t.printStackTrace(System.out);
fail("Parsing threw exception: " + t);
}
}
/**
* Test parsing of a struts-config.xml file.
*/
public void testParse() {
testParseBase("-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
"/org/apache/struts/resources/struts-config_1_2.dtd",
"/org/apache/struts/config/struts-config.xml");
}
public void testParse1_1() {
testParseBase("-//Apache Software Foundation//DTD Struts Configuration 1.1//EN",
"/org/apache/struts/resources/struts-config_1_1.dtd",
"/org/apache/struts/config/struts-config-1.1.xml");
}
public void testParseBase(String publicId, String entityURL,
String strutsConfig) {
parseConfig(publicId, entityURL, strutsConfig);
// Perform assertion tests on the parsed information
FormBeanConfig[] fbcs = config.findFormBeanConfigs();
assertNotNull("Found our form bean configurations", fbcs);
assertEquals("Found three form bean configurations", 3, fbcs.length);
ForwardConfig[] fcs = config.findForwardConfigs();
assertNotNull("Found our forward configurations", fcs);
assertEquals("Found three forward configurations", 3, fcs.length);
ActionConfig logon = config.findActionConfig("/logon");
assertNotNull("Found logon action configuration", logon);
assertEquals("Found correct logon configuration", "logonForm",
logon.getName());
}
/**
* Tests a struts-config.xml that contains a custom mapping and property.
*/
public void testCustomMappingParse() {
// Prepare a Digester for parsing a struts-config.xml file
testCustomMappingParseBase("-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
"/org/apache/struts/resources/struts-config_1_2.dtd",
"/org/apache/struts/config/struts-config-custom-mapping.xml");
}
/**
* Tests a struts-config.xml that contains a custom mapping and property.
*/
public void testCustomMappingParse1_1() {
// Prepare a Digester for parsing a struts-config.xml file
testCustomMappingParseBase("-//Apache Software Foundation//DTD Struts Configuration 1.1//EN",
"/org/apache/struts/resources/struts-config_1_1.dtd",
"/org/apache/struts/config/struts-config-custom-mapping-1.1.xml");
}
/**
* Tests a struts-config.xml that contains a custom mapping and property.
*/
private void testCustomMappingParseBase(String publicId, String entityURL,
String strutsConfig) {
parseConfig(publicId, entityURL, strutsConfig);
// Perform assertion tests on the parsed information
CustomMappingTest map =
(CustomMappingTest) config.findActionConfig("/editRegistration");
assertNotNull("Cannot find editRegistration mapping", map);
assertTrue("The custom mapping attribute has not been set",
map.getPublic());
}
/**
* Test order of action mappings defined perserved.
*/
public void testPreserveActionMappingsOrder() {
parseConfig("-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
"/org/apache/struts/resources/struts-config_1_2.dtd",
"/org/apache/struts/config/struts-config.xml");
String[] paths =
new String[] {
"/editRegistration", "/editSubscription", "/logoff", "/logon",
"/saveRegistration", "/saveSubscription", "/tour"
};
ActionConfig[] actions = config.findActionConfigs();
for (int x = 0; x < paths.length; x++) {
assertTrue("Action config out of order:" + actions[x].getPath(),
paths[x].equals(actions[x].getPath()));
}
}
}