/*******************************************************************************
* Copyright (c) 2010 EclipseSource and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
*******************************************************************************/
package org.eclipse.rap.warproducts.core.test;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import junit.framework.TestCase;
import org.eclipse.rap.warproducts.core.WebXMLGenerator;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class WebXMLGeneratorTest extends TestCase {
public void testDocumentStructure()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList webAppElement = document.getElementsByTagName( "web-app" );
assertNotNull( webAppElement );
Node node = webAppElement.item( 0 );
NamedNodeMap attributes = node.getAttributes();
assertEquals( 1, attributes.getLength() );
Node attribute = attributes.item( 0 );
assertEquals( "id", attribute.getNodeName() );
assertEquals( "WebApp", attribute.getTextContent() );
NodeList nodeList = node.getChildNodes();
assertEquals( 2, nodeList.getLength() );
Node servletElement = nodeList.item( 0 );
attributes = servletElement.getAttributes();
assertEquals( 1, attributes.getLength() );
attribute = attributes.item( 0 );
assertEquals( "id", attribute.getNodeName() );
assertEquals( "bridge", attribute.getTextContent() );
}
public void testAddCommandLineArgument()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String argument = "console 9999";
generator.addCommandLineArgument( argument );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "init-param" );
Node node = nodeList.item( 0 );
NodeList children = node.getChildNodes();
Node paramNameNode = children.item( 0 );
assertEquals( "param-name", paramNameNode.getNodeName() );
assertEquals( "commandline", paramNameNode.getTextContent() );
Node paramValueNode = children.item( 1 );
assertEquals( "param-value", paramValueNode.getNodeName() );
assertEquals( "-" + argument, paramValueNode.getTextContent() );
}
public void testAddCommandLineArgumentWithTwoArguments()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String argument1 = "console 9999";
String argument2 = "registryMultiLanguage";
generator.addCommandLineArgument( argument1 );
generator.addCommandLineArgument( argument2 );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "init-param" );
Node node = nodeList.item( 0 );
NodeList children = node.getChildNodes();
Node paramNameNode = children.item( 0 );
assertEquals( "param-name", paramNameNode.getNodeName() );
assertEquals( "commandline", paramNameNode.getTextContent() );
Node paramValueNode = children.item( 1 );
assertEquals( "param-value", paramValueNode.getNodeName() );
String expectedValue = "-" + argument1 + " -" + argument2;
assertEquals( expectedValue, paramValueNode.getTextContent() );
}
public void testAddInitParam()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String paramName = "extendedFrameworkExports";
String paramValue = "true";
generator.addInitParameter( paramName, paramValue );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "init-param" );
Node node = nodeList.item( 0 );
NodeList children = node.getChildNodes();
Node paramNameNode = children.item( 0 );
assertEquals( "param-name", paramNameNode.getNodeName() );
assertEquals( paramName, paramNameNode.getTextContent() );
Node paramValueNode = children.item( 1 );
assertEquals( "param-value", paramValueNode.getNodeName() );
assertEquals( paramValue, paramValueNode.getTextContent() );
}
public void testAddTwoInitParams()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String paramName = "extendedFrameworkExports";
String paramValue = "true";
String paramName2 = "frameworkLauncherClass";
String paramValue2 = "org.eclipse.equinox.servletbridge.FrameworkLauncher";
generator.addInitParameter( paramName, paramValue );
generator.addInitParameter( paramName2, paramValue2 );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "init-param" );
Node node = nodeList.item( 0 );
NodeList children = node.getChildNodes();
Node paramNameNode = children.item( 0 );
assertEquals( "param-name", paramNameNode.getNodeName() );
Node paramValueNode = children.item( 1 );
assertEquals( "param-value", paramValueNode.getNodeName() );
if( paramNameNode.getTextContent().equals( paramName ) ) {
assertEquals( paramValue, paramValueNode.getTextContent() );
} else {
assertEquals( paramValue2, paramValueNode.getTextContent() );
}
node = nodeList.item( 1 );
children = node.getChildNodes();
paramNameNode = children.item( 0 );
assertEquals( "param-name", paramNameNode.getNodeName() );
paramValueNode = children.item( 1 );
assertEquals( "param-value", paramValueNode.getNodeName() );
if( paramNameNode.getTextContent().equals( paramName ) ) {
assertEquals( paramValue, paramValueNode.getTextContent() );
} else {
assertEquals( paramValue2, paramValueNode.getTextContent() );
}
}
public void testSetServletName()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String servletName = "equinoxbridgeservlet";
generator.setServletName( servletName );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "servlet-name" );
Node node = nodeList.item( 0 );
assertEquals( servletName, node.getTextContent() );
}
public void testSetDisplayName()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String displayName = "Equinox Bridge Servlet";
generator.setDisplayName( displayName );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "display-name" );
Node node = nodeList.item( 0 );
assertEquals( displayName, node.getTextContent() );
}
public void testSetDescription()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );;
String description = "Equinox Bridge Servlet";
generator.setDescription( description );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "description" );
Node node = nodeList.item( 0 );
assertEquals( description, node.getTextContent() );
}
public void testSetServletClass()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String servletClass = "org.eclipse.equinox.servletbridge.BridgeServlet";
generator.setServletClass( servletClass );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "servlet-class" );
Node node = nodeList.item( 0 );
assertEquals( servletClass, node.getTextContent() );
}
public void testAddURLPattern()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String urlPattern = "/*";
generator.addURLPattern( urlPattern );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "servlet-mapping" );
Node mapping = nodeList.item( 0 );
NodeList children = mapping.getChildNodes();
Node servletName = children.item( 0 );
assertEquals( "servlet-name", servletName.getNodeName() );
assertEquals( "equinoxbridgeservlet", servletName.getTextContent() );
Node pattern = children.item( 1 );
assertEquals( "url-pattern", pattern.getNodeName() );
assertEquals( urlPattern, pattern.getTextContent() );
}
public void testAddTwoURLPatterns()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String defaultPattern = "/*";
String jspPattern = "/*.jsp";
generator.addURLPattern( defaultPattern );
generator.addURLPattern( jspPattern );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "servlet-mapping" );
Node mapping = nodeList.item( 0 );
NodeList children = mapping.getChildNodes();
Node servletName = children.item( 0 );
assertEquals( "servlet-name", servletName.getNodeName() );
assertEquals( "equinoxbridgeservlet", servletName.getTextContent() );
Node pattern = children.item( 1 );
assertEquals( "url-pattern", pattern.getNodeName() );
assertEquals( defaultPattern, pattern.getTextContent() );
mapping = nodeList.item( 1 );
children = mapping.getChildNodes();
servletName = children.item( 0 );
assertEquals( "servlet-name", servletName.getNodeName() );
assertEquals( "equinoxbridgeservlet", servletName.getTextContent() );
pattern = children.item( 1 );
assertEquals( "url-pattern", pattern.getNodeName() );
assertEquals( jspPattern, pattern.getTextContent() );
}
public void testAddCustomXMLToWebApp()
throws ParserConfigurationException, SAXException, IOException
{
WebXMLGenerator generator
= new WebXMLGenerator( "equinoxbridgeservlet", "/*" );
String customXml = "<session-config enable-cookies='false' " +
"enable-url-rewriting='true'/>";
generator.addXMLContentToWebApp( customXml );
String xml = generator.createWebXML();
Document document = getDocumentFromXML( xml );
NodeList nodeList = document.getElementsByTagName( "session-config" );
Node config = nodeList.item( 0 );
NamedNodeMap attributes = config.getAttributes();
assertEquals( 2, attributes.getLength() );
Node cookies = attributes.item( 0 );
assertEquals( "enable-cookies", cookies.getNodeName() );
assertEquals( "false", cookies.getTextContent() );
Node rewriting = attributes.item( 1 );
assertEquals( "enable-url-rewriting", rewriting.getNodeName() );
assertEquals( "true", rewriting.getTextContent() );
}
private Document getDocumentFromXML( final String xml )
throws ParserConfigurationException, SAXException, IOException
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
// eliminating whitespace
StringReader reader = new StringReader( xml.replaceAll( "\n", "" ) );
InputSource source = new InputSource( reader );
Document document = documentBuilder.parse( source );
document.getDocumentElement().normalize();
return document;
}
}