blob: 2fb53450d604879c4060b9cc9cc12c8c6f81472e [file] [log] [blame]
/*
* 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.OMFactory;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.impl.dom.factory.OMDOMFactory;
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 {
protected OMFactory getOMFactory() {
return new OMDOMFactory();
}
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());
}
});
}
}