/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed 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 com.android.ide.common.res2;
import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class NodeUtilsTest extends TestCase {
public void testBasicAttributes() throws Exception {
Document document = createDocument();
// create two nodes
Node node1 = document.createElement("N1");
Node node2 = document.createElement("N2");
NodeUtils.addAttribute(document, node1, null, "foo", "bar");
NodeUtils.addAttribute(document, node2, null, "foo", "bar");
assertTrue(NodeUtils.compareAttributes(node1.getAttributes(), node2.getAttributes()));
NodeUtils.addAttribute(document, node1, null, "foo2", "bar2");
assertFalse(NodeUtils.compareAttributes(node1.getAttributes(), node2.getAttributes()));
NodeUtils.addAttribute(document, node2, null, "foo2", "bar");
assertFalse(NodeUtils.compareAttributes(node1.getAttributes(), node2.getAttributes()));
}
public void testNamespaceAttributes() throws Exception {
Document document = createDocument();
// create two nodes
Node node1 = document.createElement("N1");
Node node2 = document.createElement("N2");
NodeUtils.addAttribute(document, node1, "http://some.uri/", "foo", "bar");
NodeUtils.addAttribute(document, node2, "http://some.uri/", "foo", "bar");
assertTrue(NodeUtils.compareAttributes(node1.getAttributes(), node2.getAttributes()));
NodeUtils.addAttribute(document, node1, "http://some.uri/", "foo2", "bar2");
NodeUtils.addAttribute(document, node2, "http://some.other.uri/", "foo2", "bar2");
assertFalse(NodeUtils.compareAttributes(node1.getAttributes(), node2.getAttributes()));
}
public void testNodesWithChildrenNodes() throws Exception {
Document document = createDocument();
// create two nodes
Node node1 = document.createElement("some-node");
Node node2 = document.createElement("some-node");
Node child1a = document.createElement("child1");
Node child1b = document.createElement("child2");
node1.appendChild(child1a);
node1.appendChild(child1b);
Node child2a = document.createElement("child1");
Node child2b = document.createElement("child2");
node2.appendChild(child2a);
node2.appendChild(child2b);
assertTrue(NodeUtils.compareElementNode(node1, node2, true));
}
public void testNodesWithChildrenNodesInWrongOrder() throws Exception {
Document document = createDocument();
// create two nodes
Node node1 = document.createElement("some-node");
Node node2 = document.createElement("some-node");
Node child1a = document.createElement("child1");
Node child1b = document.createElement("child2");
node1.appendChild(child1a);
node1.appendChild(child1b);
Node child2a = document.createElement("child2");
Node child2b = document.createElement("child1");
node2.appendChild(child2a);
node2.appendChild(child2b);
assertFalse(NodeUtils.compareElementNode(node1, node2, true));
}
public void testNodesWithChildrenNodesInOtherOrder() throws Exception {
Document document = createDocument();
// create two nodes
Node node1 = document.createElement("some-node");
Node node2 = document.createElement("some-node");
Node child1a = document.createElement("child1");
Node child1b = document.createElement("child2");
node1.appendChild(child1a);
node1.appendChild(child1b);
Node child2a = document.createElement("child2");
Node child2b = document.createElement("child1");
node2.appendChild(child2a);
node2.appendChild(child2b);
assertTrue(NodeUtils.compareElementNode(node1, node2, false));
}
public void testAdoptNode() throws Exception {
Document document = createDocument();
Node rootNode = document.createElement("root");
document.appendChild(rootNode);
// create a single s
Node node = document.createElement("some-node");
// add some children
Node child1 = document.createElement("child1");
Node child2 = document.createElement("child2");
node.appendChild(child1).appendChild(child2);
Node cdata = document.createCDATASection("some <random> text");
child2.appendChild(cdata);
// add some attributes
NodeUtils.addAttribute(document, node, null, "foo", "bar");
NodeUtils.addAttribute(document, node, "http://some.uri", "foo2", "bar2");
NodeUtils.addAttribute(document, child1, "http://some.other.uri", "blah", "test");
NodeUtils.addAttribute(document, child2, "http://another.uri", "blah", "test");
// create the other document to receive the adopted node. It must have a root node.
Document document2 = createDocument();
rootNode = document2.createElement("root");
document2.appendChild(rootNode);
assertTrue(NodeUtils.compareElementNode(node, NodeUtils.adoptNode(document2, node), true));
}
public void testDuplicateNode() throws Exception {
Document document = createDocument();
Node rootNode = document.createElement("root");
document.appendChild(rootNode);
// create a single s
Node node = document.createElement("some-node");
// add some children
Node child1 = document.createElement("child1");
Node child2 = document.createElement("child2");
node.appendChild(child1).appendChild(child2);
Node cdata = document.createCDATASection("some <random> text");
child2.appendChild(cdata);
// add some attributes
NodeUtils.addAttribute(document, node, null, "foo", "bar");
NodeUtils.addAttribute(document, node, "http://some.uri", "foo2", "bar2");
NodeUtils.addAttribute(document, child1, "http://some.other.uri", "blah", "test");
NodeUtils.addAttribute(document, child2, "http://another.uri", "blah", "test");
// create the other document to receive the adopted node. It must have a root node.
Document document2 = createDocument();
rootNode = document2.createElement("root");
document2.appendChild(rootNode);
assertTrue(NodeUtils.compareElementNode(
node,
NodeUtils.duplicateNode(document2, node),
false));
}
private static Document createDocument() throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false);
factory.setIgnoringComments(true);
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
return builder.newDocument();
}
}