Package org.apache.axiom.om.impl.dom

Source Code of org.apache.axiom.om.impl.dom.ElementImplTest

/*
* 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.axiom.om.impl.dom;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMElementTestBase;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.impl.dom.factory.OMDOMFactory;
import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

public class ElementImplTest extends OMElementTestBase {
    public ElementImplTest() {
        super(new OMDOMMetaFactory());
    }

    public void testSerialize() throws Exception {
        OMDOMFactory factory = new OMDOMFactory();
        String localName = "TestLocalName";
        String namespace = "http://ws.apache.org/axis2/ns";
        String prefix = "axis2";
        String tempText = "The quick brown fox jumps over the lazy dog";
        String textToAppend = " followed by another";

        OMElement elem = factory.createOMElement(localName, namespace, prefix);
        OMText textNode = factory.createOMText(elem, tempText);

        ((Text) textNode).appendData(textToAppend);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        elem.serialize(baos);
        String xml = new String(baos.toByteArray());
        assertEquals("Incorrect serialized xml", 0, xml.indexOf("<axis2:TestLocalName"));
    }

    public void testAppendChild() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                String elementName = "TestElem";
                String childElemName = "TestChildElem";
                String childTextValue = "text value of the child text node";
       
                //Apending am Element node
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element elem = doc.createElement(elementName);
                Element childElem = doc.createElement(childElemName);
       
                elem.appendChild(childElem);
       
                Element addedChild = (Element) elem.getFirstChild();
                assertNotNull("Child Element node missing", addedChild);
                assertEquals("Incorre node object", childElem, addedChild);
       
                elem = doc.createElement(elementName);
                Text text = doc.createTextNode(childTextValue);
                elem.appendChild(text);
       
                Text addedTextnode = (Text) elem.getFirstChild();
                assertNotNull("Child Text node missing", addedTextnode);
                assertEquals("Incorrect node object", text, addedTextnode);
            }
        });
    }
   
    public void testRemoveSingleChild() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                DocumentBuilder builder = dbf.newDocumentBuilder();
                Element element = builder.parse(new InputSource(new StringReader(
                        "<root><a/></root>"))).getDocumentElement();
                element.removeChild(element.getFirstChild());
                assertNull(element.getFirstChild());
                assertNull(element.getLastChild());
            }
        });
    }
   
    // Regression test for WSCOMMONS-435
    public void testRemoveFirstChild() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                DocumentBuilder builder = dbf.newDocumentBuilder();
                Element element = builder.parse(new InputSource(new StringReader(
                        "<root><a/><b/><c/></root>"))).getDocumentElement();
                element.removeChild(element.getFirstChild());
                Node firstChild = element.getFirstChild();
                assertNotNull(firstChild);
                assertEquals("b", firstChild.getNodeName());
            }
        });
    }

    public void testRemoveLastChild() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                DocumentBuilder builder = dbf.newDocumentBuilder();
                Element element = builder.parse(new InputSource(new StringReader(
                        "<root><a/><b/><c/></root>"))).getDocumentElement();
                element.removeChild(element.getLastChild());
                Node lastChild = element.getLastChild();
                assertNotNull(lastChild);
                assertEquals("b", lastChild.getNodeName());
            }
        });
    }
   
    /** Testing the NodeList returned with the elements's children */
    public void testGetElementsByTagName() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                String childElementLN = "Child";
       
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element docElem = doc.getDocumentElement();
                assertNull("The document element shoudl be null", docElem);
       
                docElem = doc.createElement("Test");
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
                docElem.appendChild(doc.createElement(childElementLN));
       
                NodeList list = docElem.getElementsByTagName(childElementLN);
       
                assertEquals("Incorrect number of child elements", 7, list.getLength());
            }
        });
    }

    public void testGetElementsByTagNameWithNamespaces() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element root = doc.createElementNS("urn:ns1", "ns1:root");
                for (int i=0; i<3; i++) {
                    root.appendChild(doc.createElementNS("urn:ns2", "ns2:child"));
                }
                assertEquals(3, root.getElementsByTagName("ns2:child").getLength());
                assertEquals(0, root.getElementsByTagName("child").getLength());
            }
        });
    }
   
    public void testGetElementsByTagNameWithWildcard() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element root = doc.createElement("root");
                for (int i=0; i<3; i++) {
                    root.appendChild(doc.createElement("child" + i));
                }
                assertEquals(3, root.getElementsByTagName("*").getLength());
            }
        });
    }
   
    public void testGetElementsByTagNameNS() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                String childElementQN = "test:Child";
                String childElementLN = "Child";
                String childElementNS = "http://ws.apache.org/ns/axis2/dom";
       
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element docElem = doc.getDocumentElement();
                assertNull("The document element shoudl be null", docElem);
       
                docElem = doc.createElementNS("http://test.org", "test:Test");
       
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
                docElem.appendChild(doc.createElementNS(childElementNS, childElementQN));
       
                NodeList list = docElem.getElementsByTagNameNS(childElementNS, childElementLN);
       
                assertEquals("Incorrect number of child elements", 7, list.getLength());
            }
        });
    }

    public void testGetElementsByTagNameRecursive() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc =
                        dbf.newDocumentBuilder().parse(getTestResource("xml/numbers.xml"));
                Element element = doc.getDocumentElement();
                NodeList list = element.getElementsByTagName("nr");
                assertEquals(10, list.getLength());
            }
        });
    }
   
    public void testGetNamespaceURIWithNoNamespace() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc = dbf.newDocumentBuilder().newDocument();
                Element element = doc.createElement("test");
                assertNull(element.getNamespaceURI());
                element = doc.createElementNS(null, "test");
                assertNull(element.getNamespaceURI());
                element = doc.createElementNS("", "test");
                assertNull(element.getNamespaceURI());
            }
        });
    }
   
    public void testGetTextContent() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc = dbf.newDocumentBuilder().parse(new InputSource(
                        new StringReader("<a>1<!--c--><b>2</b>3</a>")));
                assertEquals("123", doc.getDocumentElement().getTextContent());
            }
        });
    }
   
    public void testSetTextContent() throws Exception {
        DOMTestUtil.execute(new DOMTestUtil.Test() {
            public void execute(DocumentBuilderFactory dbf) throws Exception {
                Document doc = dbf.newDocumentBuilder().parse(new InputSource(
                        new StringReader("<a>1<!--c--><b>2</b>3</a>")));
                Element element = doc.getDocumentElement();
                element.setTextContent("test");
                Node firstChild = element.getFirstChild();
                assertTrue(firstChild instanceof Text);
                assertEquals("test", firstChild.getNodeValue());
                assertNull(firstChild.getNextSibling());
            }
        });
    }
}
TOP

Related Classes of org.apache.axiom.om.impl.dom.ElementImplTest

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.