KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > dom4j > ContentTest


1 /*
2  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
3  *
4  * This software is open source.
5  * See the bottom of this file for the licence.
6  */

7
8 package org.dom4j;
9
10 import junit.textui.TestRunner;
11
12 import java.util.Iterator JavaDoc;
13 import java.util.List JavaDoc;
14
15 /**
16  * A test harness to test the content API in DOM4J
17  *
18  * @author <a HREF="mailto:james.strachan@metastuff.com">James Strachan </a>
19  * @version $Revision: 1.3 $
20  */

21 public class ContentTest extends AbstractTestCase {
22     protected DocumentFactory factory = new DocumentFactory();
23
24     public static void main(String JavaDoc[] args) {
25         TestRunner.run(ContentTest.class);
26     }
27
28     // Test case(s)
29
// -------------------------------------------------------------------------
30
public void testRoot() throws Exception JavaDoc {
31         Element root = document.getRootElement();
32         assertTrue("Has root element", root != null);
33
34         List JavaDoc authors = root.elements("author");
35         assertTrue("Root has children", (authors != null)
36                 && (authors.size() == 2));
37
38         Element author1 = (Element) authors.get(0);
39         Element author2 = (Element) authors.get(1);
40
41         assertTrue("Author1 is James", author1.attributeValue("name").equals(
42                 "James"));
43         assertTrue("Author2 is Bob", author2.attributeValue("name").equals(
44                 "Bob"));
45
46         testGetAttributes(author1);
47         testGetAttributes(author2);
48     }
49
50     public void testContent() throws Exception JavaDoc {
51         Element root = document.getRootElement();
52         assertTrue("Has root element", root != null);
53
54         List JavaDoc content = root.content();
55         assertTrue("Root has content", (content != null)
56                 && (content.size() >= 2));
57
58         boolean iterated = false;
59
60         for (Iterator JavaDoc iter = content.iterator(); iter.hasNext();) {
61             Object JavaDoc object = iter.next();
62             assertTrue("Content object is a node", object instanceof Node);
63             iterated = true;
64         }
65
66         assertTrue("Iteration completed", iterated);
67     }
68
69     public void testGetNode() throws Exception JavaDoc {
70         Element root = document.getRootElement();
71         assertTrue("Has root element", root != null);
72
73         int count = root.nodeCount();
74         assertTrue("Root has correct node count", count == 2);
75
76         boolean iterated = false;
77
78         for (int i = 0; i < count; i++) {
79             Node node = root.node(i);
80             assertTrue("Valid node returned from node()", node != null);
81             iterated = true;
82         }
83
84         assertTrue("Iteration completed", iterated);
85     }
86
87     public void testGetXPathNode() throws Exception JavaDoc {
88         Element root = document.getRootElement();
89         assertTrue("Has root element", root != null);
90
91         int count = root.nodeCount();
92         assertTrue("Root has correct node count", count == 2);
93
94         boolean iterated = false;
95
96         for (int i = 0; i < count; i++) {
97             Node node = root.getXPathResult(i);
98             assertTrue("Valid node returned from node()", node != null);
99             assertTrue("Node supports the parent relationship", node
100                     .supportsParent());
101             iterated = true;
102         }
103
104         assertTrue("Iteration completed", iterated);
105     }
106
107     public void testOrderOfPI() throws Exception JavaDoc {
108         Document document = factory.createDocument();
109         document.addProcessingInstruction("xml-stylesheet",
110                 "type=\"text/xsl\" HREF=\"...\"");
111         document.addElement("root");
112
113         List JavaDoc list = document.content();
114
115         assertNotNull(list);
116         assertEquals(2, list.size());
117
118         Object JavaDoc pi = list.get(0);
119         Object JavaDoc root = list.get(1);
120
121         assertTrue("First element is not a PI",
122                 pi instanceof ProcessingInstruction);
123         assertTrue("Second element is an element", root instanceof Element);
124
125         String JavaDoc xml = "<?xml version=\"1.0\" ?>\n"
126                 + "<?xml-stylesheet type=\"text/xsl\" HREF=\"foo\" ?>\n"
127                 + "<root/>";
128         document = DocumentHelper.parseText(xml);
129
130         list = document.content();
131
132         assertNotNull(list);
133         assertEquals(2, list.size());
134         pi = list.get(0);
135         root = list.get(1);
136
137         assertTrue("First element is not a PI",
138                 pi instanceof ProcessingInstruction);
139         assertTrue("Second element is an element", root instanceof Element);
140     }
141
142     public void testAddingInTheMiddle() throws Exception JavaDoc {
143         Document doc = factory.createDocument();
144         Element root = doc.addElement("html");
145         Element header = root.addElement("header");
146         Element footer = root.addElement("footer");
147
148         // now lets add <foo> in between header & footer
149
List JavaDoc list = root.content();
150         Element foo = factory.createElement("foo");
151         list.add(1, foo);
152
153         // assertions
154
assertTrue(list.size() == 3);
155         assertTrue(list.get(0) == header);
156         assertTrue(list.get(1) == foo);
157         assertTrue(list.get(2) == footer);
158     }
159
160     public void testAddAtIndex() throws Exception JavaDoc {
161         Document doc = factory.createDocument();
162         Element root = doc.addElement("html");
163         Element header = root.addElement("header");
164         Element body = root.addElement("body");
165
166         Element foo = factory.createElement("foo");
167         Element bar = factory.createElement("bar");
168
169         List JavaDoc content = header.content();
170         content.add(0, foo);
171         content.add(0, bar);
172
173         assertEquals("foo", header.node(1).getName());
174         assertEquals("bar", header.node(0).getName());
175
176         foo = factory.createElement("foo");
177         bar = factory.createElement("bar");
178
179         content = body.content();
180         content.add(0, foo);
181         content.add(1, bar);
182
183         assertEquals("foo", body.node(0).getName());
184         assertEquals("bar", body.node(1).getName());
185     }
186
187     public void testAddAtIndex2() throws Exception JavaDoc {
188         Document doc = factory.createDocument();
189         Element parent = doc.addElement("parent");
190         Element child = parent.addElement("child");
191         Element anotherChild = factory.createElement("child2");
192
193         List JavaDoc elements = parent.elements();
194         int index = elements.indexOf(child);
195
196         assertEquals(0, index);
197
198         elements.add(1, anotherChild);
199         elements = parent.elements();
200         assertEquals(child, elements.get(0));
201         assertEquals(anotherChild, elements.get(1));
202     }
203
204     // Implementation methods
205
// -------------------------------------------------------------------------
206
protected void testGetAttributes(Element author) throws Exception JavaDoc {
207         String JavaDoc definedName = "name";
208         String JavaDoc undefinedName = "undefined-attribute-name";
209         String JavaDoc defaultValue = "** Default Value **";
210
211         String JavaDoc value = author.attributeValue(definedName, defaultValue);
212         assertTrue("Defined value doesn't return specified default value",
213                 value != defaultValue);
214
215         value = author.attributeValue(undefinedName, defaultValue);
216         assertTrue("Undefined value returns specified default value",
217                 value == defaultValue);
218     }
219 }
220
221 /*
222  * Redistribution and use of this software and associated documentation
223  * ("Software"), with or without modification, are permitted provided that the
224  * following conditions are met:
225  *
226  * 1. Redistributions of source code must retain copyright statements and
227  * notices. Redistributions must also contain a copy of this document.
228  *
229  * 2. Redistributions in binary form must reproduce the above copyright notice,
230  * this list of conditions and the following disclaimer in the documentation
231  * and/or other materials provided with the distribution.
232  *
233  * 3. The name "DOM4J" must not be used to endorse or promote products derived
234  * from this Software without prior written permission of MetaStuff, Ltd. For
235  * written permission, please contact dom4j-info@metastuff.com.
236  *
237  * 4. Products derived from this Software may not be called "DOM4J" nor may
238  * "DOM4J" appear in their names without prior written permission of MetaStuff,
239  * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
240  *
241  * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
242  *
243  * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
244  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
245  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
246  * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
247  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
248  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
249  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
250  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
251  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
252  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
253  * POSSIBILITY OF SUCH DAMAGE.
254  *
255  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
256  */

257
Popular Tags