Package org.codehaus.dna.impl

Source Code of org.codehaus.dna.impl.ConfigurationUtilTestCase

/*
* Copyright (C) The DNA Group. All rights reserved.
*
* This software is published under the terms of the DNA
* Software License version 1.1, a copy of which has been included
* with this distribution in the LICENSE.txt file.
*/
package org.codehaus.dna.impl;

import java.io.StringReader;
import java.lang.reflect.Proxy;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.sax.SAXResult;
import junit.framework.TestCase;

import org.codehaus.dna.Configuration;
import org.codehaus.dna.impl.ConfigurationUtil;
import org.codehaus.dna.impl.DefaultConfiguration;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;

public class ConfigurationUtilTestCase
    extends TestCase
{
    private static final String DOC_FACTORY = "javax.xml.parsers.DocumentBuilderFactory";

    public void testToElementWithBasicConfiguration()
        throws Exception
    {
        final String name = "meep";
        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
        final Element element = ConfigurationUtil.toElement( configuration );
        assertEquals( "element.getNodeName()", name, element.getNodeName() );

        final NodeList nodeList = element.getChildNodes();
        assertEquals( "nodeList.getLength()", 0, nodeList.getLength() );

        final NamedNodeMap attributes = element.getAttributes();
        assertEquals( "attributes.getLength()", 0, attributes.getLength() );
    }

    public void testToElementWithConfigurationWithValue()
        throws Exception
    {
        final String name = "meep";
        final String value = "blah";
        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
        configuration.setValue( value );
        final Element element = ConfigurationUtil.toElement( configuration );
        assertEquals( "element.getNodeName()", name, element.getNodeName() );

        final NodeList nodeList = element.getChildNodes();
        assertEquals( "nodeList.getLength()", 1, nodeList.getLength() );
        final Node node = nodeList.item( 0 );
        assertEquals( "element[0].value", value, node.getNodeValue() );

        final NamedNodeMap attributes = element.getAttributes();
        assertEquals( "attributes.getLength()", 0, attributes.getLength() );
    }

    public void testToElementWithConfigurationWithAttributes()
        throws Exception
    {
        final String name = "meep";
        final String key = "key";
        final String value = "value";

        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
        configuration.setAttribute( key, value );

        final Element element = ConfigurationUtil.toElement( configuration );
        assertEquals( "element.getNodeName()", name, element.getNodeName() );

        final NodeList nodeList = element.getChildNodes();
        assertEquals( "nodeList.getLength()", 0, nodeList.getLength() );

        final NamedNodeMap attributes = element.getAttributes();
        assertEquals( "attributes.getLength()", 1, attributes.getLength() );
        final Node node = attributes.item( 0 );
        assertEquals( "attribute[0].name", key, node.getNodeName() );
        assertEquals( "attribute[0].value", value, node.getNodeValue() );
    }

    public void testToElementWithConfigurationWithChildren()
        throws Exception
    {
        final String name = "meep";
        final String childName = "moop";

        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );
        final DefaultConfiguration child = new DefaultConfiguration( childName, "", "" );
        configuration.addChild( child );

        final Element element = ConfigurationUtil.toElement( configuration );
        assertEquals( "element.getNodeName()", name, element.getNodeName() );

        final NodeList nodeList = element.getChildNodes();
        assertEquals( "nodeList.getLength()", 1, nodeList.getLength() );
        final Node node = nodeList.item( 0 );
        assertEquals( "element[0].name", childName, node.getNodeName() );

        final NamedNodeMap attributes = element.getAttributes();
        assertEquals( "attributes.getLength()", 0, attributes.getLength() );

    }

    public void testToElementWithSevereError()
        throws Exception
    {
        final String name = "meep";
        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );

        final String property = System.getProperty( DOC_FACTORY );
        try
        {
            System.setProperty( "javax.xml.parsers.DocumentBuilderFactory",
                                "I dont exist!!!" );
            ConfigurationUtil.toElement( configuration );
        }
        catch( final IllegalStateException ise )
        {
            return;
        }
        finally
        {
            if( null != property )
            {
                System.setProperty( DOC_FACTORY, property );
            }
            else
            {
                System.getProperties().remove( DOC_FACTORY );
            }
        }
        fail( "Expected to fail to create element as " +
              "invlaid document factory property" );
    }

    public void testToConfigurationFromBasicElement()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final Element element = document.createElement( name );
        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
    }

    public void testToConfigurationFromElementWithValue()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final String value = "text";
        final Element element = document.createElement( name );
        final Text text = document.createTextNode( value );
        element.appendChild( text );
        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
        assertEquals( "configuration.getValue()",
                      value,
                      configuration.getValue() );
    }

    public void testToConfigurationFromElementWithMultipleValueFragments()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final String value = "text";
        final Element element = document.createElement( name );
        final Text text = document.createTextNode( value );
        element.appendChild( text );
        final Text text2 = document.createTextNode( value );
        element.appendChild( text2 );
        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
        assertEquals( "configuration.getValue()",
                      value + value,
                      configuration.getValue() );
    }

    public void testToConfigurationFromElementWithInternalComment()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final Element element = document.createElement( name );
        final Comment comment = document.createComment( "comment" );
        element.appendChild( comment );
        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
        assertEquals( "configuration.getValue()",
                      null,
                      configuration.getValue( null ) );
    }

    public void testToConfigurationFromElementWithAttributes()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final String key = "key";
        final String value = "value";
        final Element element = document.createElement( name );
        element.setAttribute( key, value );
        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
        assertEquals( "configuration.getAttributeNames().length",
                      1,
                      configuration.getAttributeNames().length );
        assertEquals( "configuration.getAttribute( key )",
                      value,
                      configuration.getAttribute( key ) );
    }

    public void testToConfigurationFromElementWithChildren()
        throws Exception
    {
        final Document document = createDocument();
        final String name = "meep";
        final String childName = "lilmeep";
        final Element element = document.createElement( name );
        final Element childElement = document.createElement( childName );
        element.appendChild( childElement );

        final Configuration configuration = ConfigurationUtil.toConfiguration( element );

        assertEquals( "configuration.getName()", name, configuration.getName() );
        assertEquals( "configuration.getPath()",
                      ConfigurationUtil.ROOT_PATH,
                      configuration.getPath() );
        assertEquals( "configuration.getLocation()",
                      "dom-gen",
                      configuration.getLocation() );
        assertEquals( "configuration.getAttributeNames().length",
                      0,
                      configuration.getAttributeNames().length );
        assertEquals( "configuration.getChildren().length",
                      1,
                      configuration.getChildren().length );
        final Configuration child = configuration.getChildren()[ 0 ];
        assertEquals( "child.name", childName, child.getName() );
        assertEquals( "child.getPath()", "meep", child.getPath() );
    }

    public void testSerializeToResult()
        throws Exception
    {
        final String name = "meep";
        final DefaultConfiguration configuration = new DefaultConfiguration( name, "", "" );

        final MockInvocationRecorder recorder = new MockInvocationRecorder();
        recorder.addInvocation( SAXMethods.START_DOCUMENT,
                                new Object[ 0 ],
                                null );
        recorder.addInvocation( SAXMethods.START_ELEMENT,
                                new Object[]{"", name, name,
                                             MockSAXConfigurationSerializer.ATTRIBUTES},
                                null );
        recorder.addInvocation( SAXMethods.END_ELEMENT,
                                new Object[]{"", name, name},
                                null );
        recorder.addInvocation( SAXMethods.END_DOCUMENT,
                                new Object[ 0 ],
                                null );

        final ContentHandler handler = (ContentHandler)
            Proxy.newProxyInstance( getClass().getClassLoader(),
                                    new Class[]{ContentHandler.class},
                                    recorder );

        final SAXResult result = new SAXResult( handler );

        ConfigurationUtil.serializeToResult( result, configuration );
    }

    public void testBuildFromXML()
        throws Exception
    {
        final String data = "<element/>";
        final InputSource input = new InputSource();
        input.setCharacterStream( new StringReader( data ) );
        final Configuration configuration = ConfigurationUtil.buildFromXML( input );
        assertEquals( "configuration.name", "element", configuration.getName() );
        assertEquals( "configuration.path", "", configuration.getPath() );
        assertEquals( "configuration.location", "", configuration.getLocation() );
    }

    private Document createDocument() throws ParserConfigurationException
    {
        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        final DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.newDocument();
    }

    public void testGeneratePathNameFromRootForRoot()
        throws Exception
    {
        final String path =
            ConfigurationUtil.generatePathName( "", "" );
        assertEquals( "", path );
    }

    public void testGeneratePathNameFromRoot()
        throws Exception
    {
        final String path =
            ConfigurationUtil.generatePathName( "", "element" );

        assertEquals( "element", path );
    }

    public void testGeneratePathNameFromNonRoot()
        throws Exception
    {
        final String path =
            ConfigurationUtil.generatePathName( "element", "child" );

        assertEquals( "element/child", path );
    }

    public void testEqualsOnEmptyConfigurations()
        throws Exception
    {
        final String name = "x";
        final DefaultConfiguration configuration1 = new DefaultConfiguration( name, "", "" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( name, "", "" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", true, equal );
    }

    public void testEqualsWithDifferentNames()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "y", "", "" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithAttributes()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setAttribute( "key", "value" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setAttribute( "key", "value" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", true, equal );
    }

    public void testEqualsWithDifferentNumberOfAttributes()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setAttribute( "key", "value" );
        configuration1.setAttribute( "key2", "value" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setAttribute( "key", "value" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithDifferentAttributeNames()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setAttribute( "key1", "value" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setAttribute( "key2", "value" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithDifferentAttributeValues()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setAttribute( "key", "value1" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setAttribute( "key", "value2" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithChild()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" );
        configuration1.addChild( child1 );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration child2 = new DefaultConfiguration( "x", "", "" );
        configuration2.addChild( child2 );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", true, equal );
    }

    public void testEqualsWithDifferentChildCount()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" );
        configuration1.addChild( child1 );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithDifferentChildren()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration child1 = new DefaultConfiguration( "x", "", "" );
        configuration1.addChild( child1 );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration child2 = new DefaultConfiguration( "y", "", "" );
        configuration2.addChild( child2 );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithContent()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setValue( "content" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setValue( "content" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", true, equal );
    }

    public void testEqualsWithDifferentContent()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        configuration1.setValue( "content1" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setValue( "content2" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }

    public void testEqualsWithContentOnOne()
        throws Exception
    {
        final DefaultConfiguration configuration1 = new DefaultConfiguration( "x", "", "" );
        final DefaultConfiguration configuration2 = new DefaultConfiguration( "x", "", "" );
        configuration2.setValue( "content2" );

        final boolean equal =
            ConfigurationUtil.equals( configuration1, configuration2 );
        assertEquals( "config1 == config2", false, equal );
    }
}
TOP

Related Classes of org.codehaus.dna.impl.ConfigurationUtilTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.