1
2
3
4
5
6
7
8 package org.dom4j;
9
10 import junit.textui.TestRunner;
11
12 import java.util.Iterator;
13 import java.util.List;
14
15 /***
16 * A test harness to test the Iterator API in DOM4J
17 *
18 * @author <a href="mailto:jdoughty@jdoughty@cs.gmu.edu">Jonathan Doughty </a>
19 * @version $Revision: 1.4 $
20 */
21 public class IteratorTest extends AbstractTestCase {
22 private static final int NUMELE = 10;
23
24 protected Document iterDocument;
25
26 public static void main(String[] args) {
27 TestRunner.run(IteratorTest.class);
28 }
29
30 protected void setUp() throws Exception {
31 super.setUp();
32 iterDocument = DocumentHelper.createDocument();
33
34 Element root = iterDocument.addElement("root");
35
36 for (int i = 0; i < NUMELE; i++) {
37 root.addElement("iterator test").addAttribute("instance",
38 Integer.toString(i));
39 }
40 }
41
42
43
44 public void testElementCount() throws Exception {
45 Element root = iterDocument.getRootElement();
46 assertTrue("Has root element", root != null);
47
48 List elements = root.elements("iterator test");
49 int elementSize = elements.size();
50 assertTrue("Root has " + elementSize + " children", (elements != null)
51 && (elementSize == NUMELE));
52 }
53
54 public void testPlainIteration() throws Exception {
55 Element root = iterDocument.getRootElement();
56 List elements = root.elements("iterator test");
57 Iterator iter = root.elementIterator("iterator test");
58 int elementSize = elements.size();
59
60 int count = 0;
61
62 for (; iter.hasNext();) {
63 Element e = (Element) iter.next();
64 assertEquals("instance " + e.attribute("instance").getValue()
65 + " equals " + count, e.attribute("instance").getValue(),
66 Integer.toString(count));
67 count++;
68 }
69
70 assertTrue(elementSize + " elements iterated", count == elementSize);
71 }
72
73 public void testSkipAlternates() throws Exception {
74 Element root = iterDocument.getRootElement();
75 List elements = root.elements("iterator test");
76 Iterator iter = root.elementIterator("iterator test");
77 int elementSize = elements.size();
78 int count = 0;
79
80 for (; iter.hasNext();) {
81 Element e = (Element) iter.next();
82 assertEquals("instance " + e.attribute("instance").getValue()
83 + " equals " + (count * 2), e.attribute("instance")
84 .getValue(), Integer.toString(count * 2));
85 iter.next();
86 count++;
87 }
88
89 assertTrue((elementSize / 2) + " alternate elements iterated",
90 count == (elementSize / 2));
91 }
92
93 public void testNoHasNext() throws Exception {
94 Element root = iterDocument.getRootElement();
95 List elements = root.elements("iterator test");
96 Iterator iter = root.elementIterator("iterator test");
97 int elementSize = elements.size();
98 int count = 0;
99 Element e = null;
100
101 for (; count < elementSize;) {
102 e = (Element) iter.next();
103 assertEquals("instance " + e.attribute("instance").getValue()
104 + " equals " + count, e.attribute("instance").getValue(),
105 Integer.toString(count));
106 System.out.println("instance " + e.attribute("instance").getValue()
107 + " equals " + count);
108 count++;
109 }
110
111 try {
112 e = (Element) iter.next();
113
114 if (e != null) {
115
116 assertTrue("no more elements,value instead is "
117 + e.attribute("instance").getValue(), e == null);
118 }
119 } catch (Exception exp) {
120 assertTrue("Real iterators throw NoSuchElementException",
121 exp instanceof java.util.NoSuchElementException);
122 }
123 }
124
125 public void testExtraHasNexts() throws Exception {
126 Element root = iterDocument.getRootElement();
127 List elements = root.elements("iterator test");
128 Iterator iter = root.elementIterator("iterator test");
129 int elementSize = elements.size();
130 int count = 0;
131
132 for (; iter.hasNext();) {
133 Element e = (Element) iter.next();
134 assertEquals("instance " + e.attribute("instance").getValue()
135 + " equals " + count, e.attribute("instance").getValue(),
136 Integer.toString(count));
137 iter.hasNext();
138 count++;
139 }
140
141 assertTrue(elementSize + " elements iterated with extra hasNexts",
142 count == elementSize);
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
179
180
181