package org.springframework.roo.support.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Arrays; import java.util.List; import javax.xml.parsers.DocumentBuilder; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.springframework.roo.support.util.WebXmlUtils.WebXmlParam; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Unit tests for {@link WebXmlUtils} * * @author Stefan Schmidt * @since 1.1.1 */ public class WebXmlUtilsTest { private static Document webXml; @BeforeClass public static void setUp() throws Exception { final DocumentBuilder builder = XmlUtils.getDocumentBuilder(); webXml = builder.newDocument(); webXml.appendChild(webXml.createElement("web-app")); } @Test public void testSetDisplayName() { WebXmlUtils.setDisplayName("display", webXml, null); final Element displayElement = XmlUtils.findFirstElement("display-name", webXml.getDocumentElement()); assertNotNull(displayElement); assertEquals("display", displayElement.getTextContent()); } @Test public void testSetDescription() { WebXmlUtils.setDescription("test desc", webXml, null); final Element descriptionElement = XmlUtils.findFirstElement("description", webXml.getDocumentElement()); assertNotNull(descriptionElement); assertEquals("test desc", descriptionElement.getTextContent()); } @Test public void testAddContextParam() { WebXmlUtils.addContextParam(new WebXmlUtils.WebXmlParam("key", "value"), webXml, null); final Element contextParamElement = XmlUtils.findFirstElement("context-param", webXml.getDocumentElement()); assertNotNull(contextParamElement); assertEquals(2, contextParamElement.getChildNodes().getLength()); assertEquals("key", XmlUtils.findFirstElement("param-name", contextParamElement) .getTextContent()); assertEquals("value", XmlUtils.findFirstElement("param-value", contextParamElement) .getTextContent()); } @Test public void testAddFilter() { WebXmlUtils.addFilter("filter1", String.class.getName(), "/*", webXml, null, new WebXmlUtils.WebXmlParam("key", "value"), new WebXmlUtils.WebXmlParam("key2", "value2")); final Element filterElement = XmlUtils.findFirstElement("filter", webXml.getDocumentElement()); assertNotNull(filterElement); assertEquals("filter1", XmlUtils.findFirstElement("filter-name", filterElement) .getTextContent()); assertEquals(String.class.getName(), XmlUtils.findFirstElement("filter-class", filterElement) .getTextContent()); final Element filterMapping = XmlUtils.findFirstElement("filter-mapping", webXml.getDocumentElement()); assertNotNull(filterMapping); assertEquals("filter1", XmlUtils.findFirstElement("filter-name", filterMapping) .getTextContent()); assertEquals("/*", XmlUtils.findFirstElement("url-pattern", filterMapping).getTextContent()); final List<Element> initParams = XmlUtils.findElements("init-param", filterElement); assertEquals(2, initParams.size()); assertEquals(2, initParams.get(0).getChildNodes().getLength()); assertEquals("key", XmlUtils.findFirstElement("param-name", initParams.get(0)).getTextContent()); assertEquals("value", XmlUtils.findFirstElement("param-value", initParams.get(0)) .getTextContent()); assertEquals("key2", XmlUtils.findFirstElement("param-name", initParams.get(1)) .getTextContent()); assertEquals("value2", XmlUtils.findFirstElement("param-value", initParams.get(1)) .getTextContent()); } @Test public void testAddFilterAtPositionWithDispatcher() { WebXmlUtils.addFilterAtPosition(WebXmlUtils.FilterPosition.BEFORE, null, "filter1", "filter2", Object.class.getName(), "/test", webXml, null, null, Arrays.asList( WebXmlUtils.Dispatcher.ERROR, WebXmlUtils.Dispatcher.INCLUDE, WebXmlUtils.Dispatcher.FORWARD, WebXmlUtils.Dispatcher.REQUEST)); final Element filterElement = XmlUtils.findFirstElement("filter", webXml.getDocumentElement()); assertNotNull(filterElement); assertEquals("filter2", XmlUtils.findFirstElement("filter-name", filterElement) .getTextContent()); assertEquals(Object.class.getName(), XmlUtils.findFirstElement("filter-class", filterElement) .getTextContent()); final Element filterMapping = XmlUtils.findFirstElement("filter-mapping", webXml.getDocumentElement()); assertNotNull(filterMapping); assertEquals("filter2", XmlUtils.findFirstElement("filter-name", filterMapping) .getTextContent()); assertEquals("/test", XmlUtils.findFirstElement("url-pattern", filterMapping).getTextContent()); final List<Element> dispatchers = XmlUtils.findElements("dispatcher", filterMapping); assertEquals(4, dispatchers.size()); assertEquals(WebXmlUtils.Dispatcher.ERROR.name(), dispatchers.get(0).getTextContent()); assertEquals(WebXmlUtils.Dispatcher.INCLUDE.name(), dispatchers.get(1).getTextContent()); assertEquals(WebXmlUtils.Dispatcher.FORWARD.name(), dispatchers.get(2).getTextContent()); assertEquals(WebXmlUtils.Dispatcher.REQUEST.name(), dispatchers.get(3).getTextContent()); } @Test public void testAddFilterAtPosition() { WebXmlUtils.addFilterAtPosition(WebXmlUtils.FilterPosition.BETWEEN, "filter2", "filter1", "filter3", Integer.class.getName(), "/test2", webXml, null, (WebXmlParam[]) null); final List<Element> filterElements = XmlUtils.findElements("filter", webXml.getDocumentElement()); assertEquals(3, filterElements.size()); assertEquals("filter2", XmlUtils.findFirstElement("filter-name", filterElements.get(0)) .getTextContent()); assertEquals("filter3", XmlUtils.findFirstElement("filter-name", filterElements.get(1)) .getTextContent()); assertEquals("filter1", XmlUtils.findFirstElement("filter-name", filterElements.get(2)) .getTextContent()); assertEquals(Integer.class.getName(), XmlUtils.findFirstElement("filter-class", filterElements.get(1)).getTextContent()); final List<Element> filterMappings = XmlUtils.findElements("filter-mapping", webXml.getDocumentElement()); assertEquals(3, filterMappings.size()); assertEquals("filter2", XmlUtils.findFirstElement("filter-name", filterMappings.get(0)) .getTextContent()); assertEquals("filter3", XmlUtils.findFirstElement("filter-name", filterMappings.get(1)) .getTextContent()); assertEquals("filter1", XmlUtils.findFirstElement("filter-name", filterMappings.get(2)) .getTextContent()); assertEquals("/test2", XmlUtils.findFirstElement("url-pattern", filterMappings.get(1)) .getTextContent()); } @Test public void testAddListener() { WebXmlUtils.addListener(String.class.getName(), webXml, null); final Element listenerElement = XmlUtils.findFirstElement("listener", webXml.getDocumentElement()); assertNotNull(listenerElement); assertEquals(String.class.getName(), XmlUtils.findFirstElement("listener-class", listenerElement).getTextContent()); } @Test public void testAddServlet() { WebXmlUtils.addServlet("servlet1", Object.class.getName(), "/servlet1", 1, webXml, null, new WebXmlUtils.WebXmlParam("key1", "value1"), new WebXmlUtils.WebXmlParam("key2", "value2")); final Element servletElement = XmlUtils.findFirstElement("servlet", webXml.getDocumentElement()); assertNotNull(servletElement); assertEquals("servlet1", XmlUtils.findFirstElement("servlet-name", servletElement) .getTextContent()); assertEquals(Object.class.getName(), XmlUtils.findFirstElement("servlet-class", servletElement) .getTextContent()); final Element servletMapping = XmlUtils.findFirstElement("servlet-mapping", webXml.getDocumentElement()); assertNotNull(servletMapping); assertEquals("servlet1", XmlUtils.findFirstElement("servlet-name", servletMapping) .getTextContent()); assertEquals("/servlet1", XmlUtils.findFirstElement("url-pattern", servletMapping) .getTextContent()); final List<Element> initParams = XmlUtils.findElements("init-param", servletElement); assertEquals(2, initParams.size()); assertEquals(2, initParams.get(0).getChildNodes().getLength()); assertEquals("key1", XmlUtils.findFirstElement("param-name", initParams.get(0)) .getTextContent()); assertEquals("value1", XmlUtils.findFirstElement("param-value", initParams.get(0)) .getTextContent()); assertEquals("key2", XmlUtils.findFirstElement("param-name", initParams.get(1)) .getTextContent()); assertEquals("value2", XmlUtils.findFirstElement("param-value", initParams.get(1)) .getTextContent()); } @Test public void testSetSessionTimeout() { WebXmlUtils.setSessionTimeout(1000, webXml, null); final Element timeElement = XmlUtils.findFirstElement("session-config/session-timeout", webXml.getDocumentElement()); assertNotNull(timeElement); assertEquals("1000", timeElement.getTextContent()); } @Test public void testAddWelcomeFile() { WebXmlUtils.addWelcomeFile("/welcome", webXml, null); final Element welcomeFileElement = XmlUtils.findFirstElement("welcome-file-list/welcome-file", webXml.getDocumentElement()); assertNotNull(welcomeFileElement); assertEquals("/welcome", welcomeFileElement.getTextContent()); } @Test public void testAddExceptionType() { WebXmlUtils.addExceptionType(IllegalStateException.class.getName(), "/illegal", webXml, null); final Element errorPageElement = XmlUtils.findFirstElement("error-page", webXml.getDocumentElement()); assertNotNull(errorPageElement); assertEquals(2, errorPageElement.getChildNodes().getLength()); assertEquals(IllegalStateException.class.getName(), XmlUtils.findFirstElement("exception-type", errorPageElement).getTextContent()); assertEquals("/illegal", XmlUtils.findFirstElement("location", errorPageElement) .getTextContent()); } @Ignore @Test public void testAddErrorCode() { WebXmlUtils.addErrorCode(404, "/404", webXml, null); final Element errorPageElement = (Element) webXml.getDocumentElement().getChildNodes() .item(webXml.getDocumentElement().getChildNodes().getLength() - 1); assertNotNull(errorPageElement); assertEquals(2, errorPageElement.getChildNodes().getLength()); assertEquals("404", XmlUtils.findFirstElement("error-code", errorPageElement).getTextContent()); assertEquals("/404", XmlUtils.findFirstElement("location", errorPageElement).getTextContent()); } @Test public void testAddSecurityConstraint() { WebXmlUtils.addSecurityConstraint("displayName", Arrays .asList(new WebXmlUtils.WebResourceCollection("web-resource-name", "description", Arrays .asList("/", "/2"), Arrays.asList("POST", "GET"))), Arrays.asList("user", "supervisor"), "transportGuarantee", webXml, null); final Element securityConstraintElement = XmlUtils.findFirstElement("security-constraint", webXml.getDocumentElement()); assertNotNull(securityConstraintElement); assertEquals("displayName", XmlUtils .findFirstElement("display-name", securityConstraintElement).getTextContent()); final Element webResourceCollection = XmlUtils.findFirstElement("web-resource-collection", securityConstraintElement); assertNotNull(webResourceCollection); assertEquals("web-resource-name", XmlUtils.findFirstElement("web-resource-name", webResourceCollection).getTextContent()); assertEquals(2, XmlUtils.findElements("url-pattern", webResourceCollection).size()); assertEquals(2, XmlUtils.findElements("http-method", webResourceCollection).size()); final Element authConstraint = XmlUtils.findFirstElement("auth-constraint", securityConstraintElement); assertNotNull(authConstraint); assertEquals(2, authConstraint.getChildNodes().getLength()); final Element userDataConstraint = XmlUtils.findFirstElement("user-data-constraint", securityConstraintElement); assertNotNull(userDataConstraint); assertEquals("transportGuarantee", userDataConstraint.getElementsByTagName("transport-guarantee").item(0).getTextContent()); } }