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