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.HtmlCode;
25  import org.htmlunit.html.HtmlDefinitionTerm;
26  import org.htmlunit.html.HtmlElement;
27  import org.htmlunit.html.HtmlHeading1;
28  import org.htmlunit.html.HtmlListItem;
29  import org.htmlunit.html.HtmlMain;
30  import org.htmlunit.html.HtmlOrderedList;
31  import org.htmlunit.html.HtmlPage;
32  import org.htmlunit.html.HtmlPreformattedText;
33  
34  import static org.junit.jupiter.api.Assertions.assertEquals;
35  import static org.junit.jupiter.api.Assertions.assertFalse;
36  import static org.junit.jupiter.api.Assertions.assertNotNull;
37  
38  /**
39   *
40   * @author ltheussl
41   */
42  @SuppressWarnings("MethodLength")
43  public class FaqVerifier extends AbstractVerifier {
44      /** {@inheritDoc} */
45      public void verify(String file) throws Exception {
46          HtmlPage page = htmlPage(file);
47          assertNotNull(page);
48  
49          HtmlElement element = page.getHtmlElementById("contentBox");
50          assertNotNull(element);
51          HtmlMain main = (HtmlMain) element;
52          assertNotNull(main);
53  
54          Iterator<HtmlElement> elementIterator = main.getHtmlElementDescendants().iterator();
55  
56          // ----------------------------------------------------------------------
57          //
58          // ----------------------------------------------------------------------
59  
60          elementIterator.next(); // section
61  
62          HtmlAnchor a = (HtmlAnchor) elementIterator.next();
63          assertEquals("top", a.getAttribute("id"));
64  
65          HtmlHeading1 h1 = (HtmlHeading1) elementIterator.next();
66          assertEquals("Often Asked Questions", h1.asNormalizedText().trim());
67  
68          elementIterator.next(); // p
69          element = elementIterator.next();
70          assertEquals("b", element.getTagName());
71          assertEquals("Contributing", element.asNormalizedText().trim());
72  
73          HtmlOrderedList ol = (HtmlOrderedList) elementIterator.next();
74          assertEquals(
75                  "One stupid question & a silly answer?",
76                  ol.getFirstElementChild().asNormalizedText().trim());
77  
78          HtmlListItem li = (HtmlListItem) elementIterator.next();
79          assertEquals(
80                  "One stupid question & a silly answer?",
81                  li.getFirstElementChild().asNormalizedText().trim());
82  
83          a = (HtmlAnchor) elementIterator.next();
84          assertEquals("#stupid-question", a.getAttribute("href"));
85  
86          element = elementIterator.next();
87          assertEquals("b", element.getTagName());
88          assertEquals("stupid", element.asNormalizedText().trim());
89  
90          elementIterator.next(); // p
91          element = elementIterator.next();
92          assertEquals("b", element.getTagName());
93          assertEquals("Using Maven", element.asNormalizedText().trim());
94  
95          ol = (HtmlOrderedList) elementIterator.next();
96          assertEquals(
97                  "How do I disable a report on my site?",
98                  ol.getFirstElementChild().asNormalizedText().trim());
99  
100         li = (HtmlListItem) elementIterator.next();
101         assertNotNull(li);
102         assertEquals(
103                 "How do I disable a report on my site?",
104                 li.getFirstElementChild().asNormalizedText().trim());
105 
106         a = (HtmlAnchor) elementIterator.next();
107         assertEquals("#disable-reports", a.getAttribute("href"));
108 
109         elementIterator.next(); // section
110 
111         a = (HtmlAnchor) elementIterator.next();
112         assertEquals("contributing", a.getAttribute("id"));
113 
114         h1 = (HtmlHeading1) elementIterator.next();
115         assertEquals("Contributing", h1.asNormalizedText().trim());
116 
117         elementIterator.next(); // dl
118 
119         a = (HtmlAnchor) elementIterator.next();
120         assertEquals("stupid-question", a.getAttribute("id"));
121 
122         HtmlDefinitionTerm dt = (HtmlDefinitionTerm) elementIterator.next();
123         assertEquals(
124                 "One stupid question & a silly answer?", dt.asNormalizedText().trim());
125 
126         element = elementIterator.next();
127         assertEquals("b", element.getTagName());
128         assertEquals("stupid", element.asNormalizedText().trim());
129 
130         elementIterator.next(); // dd
131 
132         elementIterator.next(); // p
133 
134         a = (HtmlAnchor) elementIterator.next();
135         assertEquals("#using", a.getAttribute("href"));
136         assertEquals("local link", a.asNormalizedText().trim());
137 
138         a = (HtmlAnchor) elementIterator.next();
139         assertEquals("./cdc.html", a.getAttribute("href"));
140         assertEquals("source document", a.asNormalizedText().trim());
141 
142         a = (HtmlAnchor) elementIterator.next();
143         assertEquals("http://maven.apache.org/?l=a&m=b", a.getAttribute("href"));
144         assertEquals("external link", a.asNormalizedText().trim());
145 
146         element = elementIterator.next();
147         assertEquals("i", element.getTagName());
148         assertEquals("italic", element.asNormalizedText().trim());
149 
150         element = elementIterator.next();
151         assertEquals("b", element.getTagName());
152         assertEquals("non-US-ASCII characters: àéèç", element.asNormalizedText().trim());
153 
154         elementIterator.next(); // p
155 
156         a = (HtmlAnchor) elementIterator.next();
157         assertEquals("#top", a.getAttribute("href"));
158         assertEquals("[top]", a.asNormalizedText().trim());
159 
160         elementIterator.next(); // section
161 
162         a = (HtmlAnchor) elementIterator.next();
163         assertEquals("using", a.getAttribute("id"));
164 
165         h1 = (HtmlHeading1) elementIterator.next();
166         assertEquals("Using Maven", h1.asNormalizedText().trim());
167 
168         elementIterator.next(); // dl
169 
170         a = (HtmlAnchor) elementIterator.next();
171         assertEquals("disable-reports", a.getAttribute("id"));
172 
173         dt = (HtmlDefinitionTerm) elementIterator.next();
174         assertEquals(
175                 "How do I disable a report on my site?",
176                 dt.getFirstChild().asNormalizedText().trim());
177 
178         elementIterator.next(); // dd
179 
180         elementIterator.next(); // p
181 
182         element = elementIterator.next();
183         assertEquals("code", element.getTagName());
184         assertEquals("<source></source>", element.asNormalizedText().trim());
185 
186         HtmlPreformattedText pre = (HtmlPreformattedText) elementIterator.next();
187         assertNotNull(pre);
188         HtmlCode code = (HtmlCode) elementIterator.next();
189         assertEquals("<source>1.5</source>", code.asNormalizedText().trim());
190 
191         elementIterator.next(); // p
192 
193         a = (HtmlAnchor) elementIterator.next();
194         assertEquals("#top", a.getAttribute("href"));
195         assertEquals("[top]", a.asNormalizedText().trim());
196 
197         assertFalse(elementIterator.hasNext());
198     }
199 }