View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.doxia.siterenderer;
20  
21  import java.util.Iterator;
22  
23  import org.htmlunit.html.HtmlAnchor;
24  import org.htmlunit.html.HtmlDefinitionDescription;
25  import org.htmlunit.html.HtmlDefinitionList;
26  import org.htmlunit.html.HtmlDefinitionTerm;
27  import org.htmlunit.html.HtmlElement;
28  import org.htmlunit.html.HtmlHeading1;
29  import org.htmlunit.html.HtmlHeading2;
30  import org.htmlunit.html.HtmlListItem;
31  import org.htmlunit.html.HtmlMain;
32  import org.htmlunit.html.HtmlOrderedList;
33  import org.htmlunit.html.HtmlPage;
34  import org.htmlunit.html.HtmlParagraph;
35  import org.htmlunit.html.HtmlSection;
36  import org.htmlunit.html.HtmlUnorderedList;
37  
38  import static org.junit.jupiter.api.Assertions.assertEquals;
39  import static org.junit.jupiter.api.Assertions.assertFalse;
40  import static org.junit.jupiter.api.Assertions.assertNotNull;
41  
42  /**
43   *
44   * @author ltheussl
45   */
46  public class NestedItemsVerifier extends AbstractVerifier {
47      /** {@inheritDoc} */
48      public void verify(String file) throws Exception {
49          HtmlPage page = htmlPage(file);
50          assertNotNull(page);
51  
52          HtmlElement element = page.getHtmlElementById("contentBox");
53          assertNotNull(element);
54          HtmlMain main = (HtmlMain) element;
55          assertNotNull(main);
56  
57          Iterator<HtmlElement> elementIterator = main.getHtmlElementDescendants().iterator();
58  
59          // ----------------------------------------------------------------------
60          // Verify link
61          // ----------------------------------------------------------------------
62  
63          HtmlSection section = (HtmlSection) elementIterator.next();
64          assertNotNull(section);
65  
66          HtmlAnchor anchor = (HtmlAnchor) elementIterator.next();
67          assertNotNull(anchor);
68          assertEquals("List_Section", anchor.getAttribute("id"));
69          HtmlHeading1 h1 = (HtmlHeading1) elementIterator.next();
70          assertNotNull(h1);
71          assertEquals("List Section", h1.asNormalizedText().trim());
72  
73          // ----------------------------------------------------------------------
74          // Unordered lists
75          // ----------------------------------------------------------------------
76  
77          section = (HtmlSection) elementIterator.next();
78          assertNotNull(section);
79  
80          anchor = (HtmlAnchor) elementIterator.next();
81          assertNotNull(anchor);
82          assertEquals("Unordered_lists", anchor.getAttribute("id"));
83          HtmlHeading2 h2 = (HtmlHeading2) elementIterator.next();
84          assertNotNull(h2);
85          assertEquals("Unordered lists", h2.asNormalizedText().trim());
86  
87          HtmlParagraph p = (HtmlParagraph) elementIterator.next();
88          assertNotNull(p);
89          assertEquals(
90                  "Below is an unordered list, followed by six paragraphs.",
91                  p.asNormalizedText().trim());
92  
93          HtmlUnorderedList ul = (HtmlUnorderedList) elementIterator.next();
94          assertNotNull(ul);
95  
96          HtmlListItem li = (HtmlListItem) elementIterator.next();
97          assertNotNull(li);
98          assertEquals("Item 1.", li.getFirstChild().asNormalizedText().trim());
99  
100         ul = (HtmlUnorderedList) elementIterator.next();
101         assertNotNull(ul);
102 
103         li = (HtmlListItem) elementIterator.next();
104         assertNotNull(li);
105         p = (HtmlParagraph) elementIterator.next();
106         assertNotNull(p);
107         assertEquals("Item 11.", p.getFirstChild().asNormalizedText().trim());
108         li = (HtmlListItem) elementIterator.next();
109         assertNotNull(li);
110         p = (HtmlParagraph) elementIterator.next();
111         assertNotNull(p);
112         assertEquals("Item 12.", p.getFirstChild().asNormalizedText().trim());
113         li = (HtmlListItem) elementIterator.next();
114         assertNotNull(li);
115         assertEquals("Item 13.", li.getFirstChild().asNormalizedText().trim());
116         li = (HtmlListItem) elementIterator.next();
117         assertNotNull(li);
118         assertEquals("Item 14.", li.getFirstChild().asNormalizedText().trim());
119         li = (HtmlListItem) elementIterator.next();
120         assertNotNull(li);
121         assertEquals("Item 2.", li.getFirstChild().asNormalizedText().trim());
122         li = (HtmlListItem) elementIterator.next();
123         assertNotNull(li);
124         assertEquals("Item 3.", li.getFirstChild().asNormalizedText().trim());
125         li = (HtmlListItem) elementIterator.next();
126         assertNotNull(li);
127         assertEquals("Item 4.", li.getFirstChild().asNormalizedText().trim());
128 
129         ul = (HtmlUnorderedList) elementIterator.next();
130         assertNotNull(ul);
131 
132         li = (HtmlListItem) elementIterator.next();
133         assertNotNull(li);
134         assertEquals("Item 41.", li.getFirstChild().asNormalizedText().trim());
135         li = (HtmlListItem) elementIterator.next();
136         assertNotNull(li);
137         assertEquals("Item 42.", li.getFirstChild().asNormalizedText().trim());
138         li = (HtmlListItem) elementIterator.next();
139         assertNotNull(li);
140         assertEquals("Item 43.", li.getFirstChild().asNormalizedText().trim());
141         li = (HtmlListItem) elementIterator.next();
142         assertNotNull(li);
143         assertEquals("Item 44.", li.getFirstChild().asNormalizedText().trim());
144 
145         p = (HtmlParagraph) elementIterator.next();
146         assertNotNull(p);
147         assertEquals("Paragraph 1 below list.", p.asNormalizedText().trim());
148         p = (HtmlParagraph) elementIterator.next();
149         assertNotNull(p);
150         assertEquals("Paragraph 2 below list.", p.asNormalizedText().trim());
151         p = (HtmlParagraph) elementIterator.next();
152         assertNotNull(p);
153         assertEquals("Paragraph 3 below list.", p.asNormalizedText().trim());
154         p = (HtmlParagraph) elementIterator.next();
155         assertNotNull(p);
156         assertEquals("Paragraph 4 below list.", p.asNormalizedText().trim());
157         p = (HtmlParagraph) elementIterator.next();
158         assertNotNull(p);
159         assertEquals("Paragraph 5 below list.", p.asNormalizedText().trim());
160         p = (HtmlParagraph) elementIterator.next();
161         assertNotNull(p);
162         assertEquals("Paragraph 6 below list.", p.asNormalizedText().trim());
163 
164         // ----------------------------------------------------------------------
165         // Ordered lists
166         // ----------------------------------------------------------------------
167 
168         section = (HtmlSection) elementIterator.next();
169         assertNotNull(section);
170 
171         anchor = (HtmlAnchor) elementIterator.next();
172         assertNotNull(anchor);
173         assertEquals("Ordered_lists", anchor.getAttribute("id"));
174         h2 = (HtmlHeading2) elementIterator.next();
175         assertNotNull(h2);
176         assertEquals("Ordered lists", h2.asNormalizedText().trim());
177 
178         p = (HtmlParagraph) elementIterator.next();
179         assertNotNull(p);
180         assertEquals(
181                 "Below is an ordered list, followed by six paragraphs.",
182                 p.asNormalizedText().trim());
183 
184         HtmlOrderedList ol = (HtmlOrderedList) elementIterator.next();
185         assertNotNull(ol);
186 
187         li = (HtmlListItem) elementIterator.next();
188         assertNotNull(li);
189         assertEquals("Item 1.", li.getFirstChild().asNormalizedText().trim());
190 
191         ol = (HtmlOrderedList) elementIterator.next();
192         assertNotNull(ol);
193 
194         li = (HtmlListItem) elementIterator.next();
195         assertNotNull(li);
196         assertEquals("Item 11.", li.getFirstChild().asNormalizedText().trim());
197         li = (HtmlListItem) elementIterator.next();
198         assertNotNull(li);
199         assertEquals("Item 12.", li.getFirstChild().asNormalizedText().trim());
200         li = (HtmlListItem) elementIterator.next();
201         assertNotNull(li);
202         assertEquals("Item 13.", li.getFirstChild().asNormalizedText().trim());
203         li = (HtmlListItem) elementIterator.next();
204         assertNotNull(li);
205         assertEquals("Item 14.", li.getFirstChild().asNormalizedText().trim());
206         li = (HtmlListItem) elementIterator.next();
207         assertNotNull(li);
208         assertEquals("Item 2.", li.getFirstChild().asNormalizedText().trim());
209         li = (HtmlListItem) elementIterator.next();
210         assertNotNull(li);
211         assertEquals("Item 3.", li.getFirstChild().asNormalizedText().trim());
212         li = (HtmlListItem) elementIterator.next();
213         assertNotNull(li);
214         assertEquals("Item 4.", li.getFirstChild().asNormalizedText().trim());
215 
216         ol = (HtmlOrderedList) elementIterator.next();
217         assertNotNull(ol);
218 
219         li = (HtmlListItem) elementIterator.next();
220         assertNotNull(li);
221         assertEquals("Item 41.", li.getFirstChild().asNormalizedText().trim());
222         li = (HtmlListItem) elementIterator.next();
223         assertNotNull(li);
224         assertEquals("Item 42.", li.getFirstChild().asNormalizedText().trim());
225         li = (HtmlListItem) elementIterator.next();
226         assertNotNull(li);
227         assertEquals("Item 43.", li.getFirstChild().asNormalizedText().trim());
228         li = (HtmlListItem) elementIterator.next();
229         assertNotNull(li);
230         assertEquals("Item 44.", li.getFirstChild().asNormalizedText().trim());
231 
232         p = (HtmlParagraph) elementIterator.next();
233         assertNotNull(p);
234         assertEquals("Paragraph 1 below list.", p.asNormalizedText().trim());
235         p = (HtmlParagraph) elementIterator.next();
236         assertNotNull(p);
237         assertEquals("Paragraph 2 below list.", p.asNormalizedText().trim());
238         p = (HtmlParagraph) elementIterator.next();
239         assertNotNull(p);
240         assertEquals("Paragraph 3 below list.", p.asNormalizedText().trim());
241         p = (HtmlParagraph) elementIterator.next();
242         assertNotNull(p);
243         assertEquals("Paragraph 4 below list.", p.asNormalizedText().trim());
244         p = (HtmlParagraph) elementIterator.next();
245         assertNotNull(p);
246         assertEquals("Paragraph 5 below list.", p.asNormalizedText().trim());
247         p = (HtmlParagraph) elementIterator.next();
248         assertNotNull(p);
249         assertEquals("Paragraph 6 below list.", p.asNormalizedText().trim());
250 
251         // ----------------------------------------------------------------------
252         // Definition lists
253         // ----------------------------------------------------------------------
254 
255         section = (HtmlSection) elementIterator.next();
256         assertNotNull(section);
257 
258         anchor = (HtmlAnchor) elementIterator.next();
259         assertNotNull(anchor);
260         assertEquals("Definition_lists", anchor.getAttribute("id"));
261         h2 = (HtmlHeading2) elementIterator.next();
262         assertNotNull(h2);
263         assertEquals("Definition lists", h2.asNormalizedText().trim());
264 
265         p = (HtmlParagraph) elementIterator.next();
266         assertNotNull(p);
267         assertEquals(
268                 "Below is a definition list, followed by six paragraphs.",
269                 p.asNormalizedText().trim());
270 
271         HtmlDefinitionList dl = (HtmlDefinitionList) elementIterator.next();
272         assertNotNull(dl);
273 
274         HtmlDefinitionTerm dt = (HtmlDefinitionTerm) elementIterator.next();
275         assertNotNull(dt);
276         assertEquals("Term 1.", dt.getFirstChild().asNormalizedText().trim());
277         HtmlDefinitionDescription dd = (HtmlDefinitionDescription) elementIterator.next();
278         assertNotNull(dd);
279         assertEquals("Description 1.", dd.getFirstChild().asNormalizedText().trim());
280 
281         dt = (HtmlDefinitionTerm) elementIterator.next();
282         assertNotNull(dt);
283         assertEquals("Term 2.", dt.getFirstChild().asNormalizedText().trim());
284         dd = (HtmlDefinitionDescription) elementIterator.next();
285         assertNotNull(dd);
286         assertEquals("Description 2.", dd.getFirstChild().asNormalizedText().trim());
287 
288         dl = (HtmlDefinitionList) elementIterator.next();
289         assertNotNull(dl);
290         dt = (HtmlDefinitionTerm) elementIterator.next();
291         assertNotNull(dt);
292         assertEquals("Term 21.", dt.getFirstChild().asNormalizedText().trim());
293         dd = (HtmlDefinitionDescription) elementIterator.next();
294         assertNotNull(dd);
295         assertEquals("Description 21.", dd.getFirstChild().asNormalizedText().trim());
296 
297         p = (HtmlParagraph) elementIterator.next();
298         assertNotNull(p);
299         assertEquals("Paragraph 1 below list.", p.asNormalizedText().trim());
300         p = (HtmlParagraph) elementIterator.next();
301         assertNotNull(p);
302         assertEquals("Paragraph 2 below list.", p.asNormalizedText().trim());
303         p = (HtmlParagraph) elementIterator.next();
304         assertNotNull(p);
305         assertEquals("Paragraph 3 below list.", p.asNormalizedText().trim());
306         p = (HtmlParagraph) elementIterator.next();
307         assertNotNull(p);
308         assertEquals("Paragraph 4 below list.", p.asNormalizedText().trim());
309         p = (HtmlParagraph) elementIterator.next();
310         assertNotNull(p);
311         assertEquals("Paragraph 5 below list.", p.asNormalizedText().trim());
312         p = (HtmlParagraph) elementIterator.next();
313         assertNotNull(p);
314         assertEquals("Paragraph 6 below list.", p.asNormalizedText().trim());
315 
316         assertFalse(elementIterator.hasNext());
317     }
318 }