1
2
3
4
5
6
7
8 package org.dom4j;
9
10 import junit.textui.TestRunner;
11
12 import java.util.Comparator;
13
14 import org.dom4j.dom.DOMDocument;
15 import org.dom4j.dom.DOMDocumentFactory;
16 import org.dom4j.util.NodeComparator;
17
18 /***
19 * A test harness to test the clone() methods on Nodes
20 *
21 * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
22 * @version $Revision: 1.6 $
23 */
24 public class CloneTest extends AbstractTestCase {
25 private Comparator comparator = new NodeComparator();
26
27 public static void main(String[] args) {
28 TestRunner.run(CloneTest.class);
29 }
30
31
32
33 public void testBug1148333() {
34 DOMDocumentFactory factory = (DOMDocumentFactory) DOMDocumentFactory
35 .getInstance();
36 DOMDocument doc = (DOMDocument) factory.createDocument();
37 Element el = doc.addElement("root");
38 el.addNamespace("pref2", "uri2");
39
40 DOMDocument clone = (DOMDocument) doc.cloneNode(true);
41
42 assertNotSame(doc, clone);
43 assertNodesEqual(doc, clone);
44 }
45
46 public void testElementWithNamespaceClone() {
47 Element element = DocumentFactory.getInstance()
48 .createElement("element");
49 element.addNamespace("prefix", "uri");
50 Element clone = (Element) element.clone();
51
52 assertNotSame(element, clone);
53 assertNodesEqual(element, clone);
54 }
55
56 public void testDocumentClone() throws Exception {
57 document.setName("doc1");
58
59 Document doc2 = (Document) document.clone();
60
61 assertNotSame(document, doc2);
62 assertNodesEqual(document, doc2);
63 }
64
65 public void testAddCloneToOtherElement() {
66 DocumentFactory factory = DocumentFactory.getInstance();
67 Document doc = factory.createDocument();
68 Element root = doc.addElement("root");
69 Element parent1 = root.addElement("parent");
70 Element child1 = parent1.addElement("child");
71
72 Element parent2 = (Element) parent1.clone();
73 root.add(parent2);
74
75 assertSame("parent not correct", root, parent2.getParent());
76 assertSame("document not correct", doc, parent2.getDocument());
77
78 Element child2 = parent2.element("child");
79
80 assertNotSame("child not cloned", child1, child2);
81 assertSame("parent not correct", parent2, child2.getParent());
82 assertSame("document not correct", doc, child2.getDocument());
83 }
84
85 public void testRootElementClone() throws Exception {
86 testElementClone(document.getRootElement());
87 }
88
89 public void testAuthorElementClone() throws Exception {
90 testElementClone((Element) document.selectSingleNode("//author"));
91 }
92
93 public void testRootCompare1() throws Exception {
94 Document doc2 = (Document) document.clone();
95 Element author = doc2.getRootElement();
96 author.addAttribute("foo", "bar");
97
98 assertTrue("Documents are not equal", comparator
99 .compare(document, doc2) != 0);
100 }
101
102 public void testRootCompare2() throws Exception {
103 Document doc2 = (Document) document.clone();
104 Element author = doc2.getRootElement();
105
106 author.addText("foo");
107
108 assertTrue("Documents are not equal", comparator
109 .compare(document, doc2) != 0);
110 }
111
112 public void testAuthorCompare1() throws Exception {
113 Document doc2 = (Document) document.clone();
114 Element author = (Element) doc2.selectSingleNode("//author");
115 author.addAttribute("name", "James Strachan");
116
117 assertTrue("Documents are not equal", comparator
118 .compare(document, doc2) != 0);
119 }
120
121 public void testAuthorCompare2() throws Exception {
122 Document doc2 = (Document) document.clone();
123 Element author = (Element) doc2.selectSingleNode("//author");
124
125 author.addText("foo");
126
127 assertTrue("Documents are not equal", comparator
128 .compare(document, doc2) != 0);
129 }
130
131 protected void testElementClone(Element element) throws Exception {
132 Element element2 = (Element) element.clone();
133
134 assertTrue("Returned a new Element", element2 != element);
135 assertNull("New element has no parent", element2.getParent());
136 assertNull("New element has no Document", element2.getDocument());
137
138 assertTrue("Element fragments are equal", comparator.compare(element,
139 element2) == 0);
140 }
141 }
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178