1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.javadoc;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.Enumeration;
24 import java.util.HashSet;
25 import java.util.List;
26 import java.util.Set;
27 import java.util.zip.ZipEntry;
28 import java.util.zip.ZipFile;
29
30 import org.apache.maven.execution.MavenSession;
31 import org.apache.maven.model.Plugin;
32 import org.apache.maven.plugin.MojoExecution;
33 import org.apache.maven.plugin.logging.Log;
34 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
35 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
36 import org.apache.maven.project.MavenProject;
37 import org.codehaus.plexus.languages.java.version.JavaVersion;
38 import org.eclipse.aether.DefaultRepositorySystemSession;
39 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
40 import org.eclipse.aether.repository.LocalRepository;
41
42 import static org.assertj.core.api.Assertions.assertThat;
43
44
45
46
47 public class JavadocJarTest extends AbstractMojoTestCase {
48
49 private JavadocJar lookupMojo(File testPom) throws Exception {
50 JavadocJar mojo = (JavadocJar) lookupMojo("jar", testPom);
51
52 MojoExecution mojoExec = new MojoExecution(new Plugin(), "javadoc", null);
53
54 setVariableValueToObject(mojo, "mojo", mojoExec);
55
56 MavenProject currentProject = new MavenProjectStub();
57 currentProject.setGroupId("GROUPID");
58 currentProject.setArtifactId("ARTIFACTID");
59
60 MavenSession session = newMavenSession(currentProject);
61 ((DefaultRepositorySystemSession) session.getRepositorySession())
62 .setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory()
63 .newInstance(
64 session.getRepositorySession(), new LocalRepository(new File("target/local-repo"))));
65 setVariableValueToObject(mojo, "session", session);
66
67 return mojo;
68 }
69
70
71
72
73
74
75 public void testDefaultConfig() throws Exception {
76 File testPom = new File(
77 getBasedir(), "src/test/resources/unit/javadocjar-default/javadocjar-default-plugin-config.xml");
78 JavadocJar mojo = lookupMojo(testPom);
79 mojo.execute();
80
81
82 File generatedFile =
83 new File(getBasedir(), "target/test/unit/javadocjar-default/target/javadocjar-default-javadoc.jar");
84 assertThat(generatedFile).exists();
85
86 Set<String> set = new HashSet<>();
87
88
89 try (ZipFile jar = new ZipFile(generatedFile)) {
90 for (Enumeration<? extends ZipEntry> entries = jar.entries(); entries.hasMoreElements(); ) {
91 ZipEntry entry = entries.nextElement();
92 set.add(entry.getName());
93 }
94 }
95
96 assertTrue(set.contains("stylesheet.css"));
97 JavaVersion javadocVersion = (JavaVersion) getVariableValueFromObject(mojo, "javadocRuntimeVersion");
98 if (javadocVersion.isBefore("1.7")) {
99 assertTrue(set.contains("resources/inherit.gif"));
100 } else if (javadocVersion.isBefore("1.8")) {
101 assertTrue(set.contains("resources/background.gif") );
102 } else {
103
104 assertFalse(set.contains("resources"));
105 }
106
107 assertTrue(set.contains("javadocjar/def/package-use.html"));
108 assertTrue(set.contains("javadocjar/def/package-tree.html"));
109 assertTrue(set.contains("javadocjar/def/package-summary.html"));
110
111 if (JavaVersion.JAVA_SPECIFICATION_VERSION.isBefore("11")) {
112 assertTrue(set.contains("javadocjar/def/package-frame.html"));
113 }
114 assertTrue(set.contains("javadocjar/def/class-use/AppSample.html"));
115 assertTrue(set.contains("index.html"));
116 assertTrue(set.contains("javadocjar/def/App.html"));
117 assertTrue(set.contains("javadocjar/def/AppSample.html"));
118 assertTrue(set.contains("javadocjar/def/class-use/App.html"));
119
120 assertFalse(set.contains(AbstractJavadocMojo.ARGFILE_FILE_NAME));
121 assertFalse(set.contains(AbstractJavadocMojo.FILES_FILE_NAME));
122 assertFalse(set.contains(AbstractJavadocMojo.OPTIONS_FILE_NAME));
123 assertFalse(set.contains(AbstractJavadocMojo.PACKAGES_FILE_NAME));
124
125
126 generatedFile = new File(
127 getBasedir(), "target/test/unit/javadocjar-default/target/site/apidocs/javadocjar/def/App.html");
128 assertThat(generatedFile).exists();
129
130 generatedFile = new File(
131 getBasedir(), "target/test/unit/javadocjar-default/target/site/apidocs/javadocjar/def/AppSample.html");
132 assertThat(generatedFile).exists();
133 }
134
135
136
137
138
139
140 public void testInvalidDestdir() throws Exception {
141 File testPom = new File(
142 getBasedir(),
143 "src/test/resources/unit/javadocjar-invalid-destdir/javadocjar-invalid-destdir-plugin-config.xml");
144 JavadocJar mojo = lookupMojo(testPom);
145 mojo.execute();
146
147
148 File generatedFile = new File(
149 getBasedir(),
150 "target/test/unit/javadocjar-invalid-destdir/target/javadocjar-invalid-destdir-javadoc.jar");
151 assertThat(generatedFile).doesNotExist();
152 }
153
154 public void testContinueIfFailOnErrorIsFalse() throws Exception {
155 File testPom = new File(
156 getBasedir(),
157 "src/test/resources/unit/javadocjar-failonerror/javadocjar-failonerror-plugin-config.xml");
158 JavadocJar mojo = lookupMojo(testPom);
159 mojo.execute();
160
161
162 File generatedFile = new File(
163 getBasedir(), "target/test/unit/javadocjar-failonerror/target/javadocjar-failonerror-javadoc.jar");
164 assertThat(generatedFile).exists();
165 }
166
167 public void testIncludeMavenDescriptorWhenExplicitlyConfigured() throws Exception {
168 File testPom = new File(
169 getBasedir(), "src/test/resources/unit/javadocjar-archive-config/javadocjar-archive-config.xml");
170 JavadocJar mojo = lookupMojo(testPom);
171 mojo.execute();
172
173
174 File generatedFile = new File(
175 getBasedir(),
176 "target/test/unit/javadocjar-archive-config/target/javadocjar-archive-config-javadoc.jar");
177 assertThat(generatedFile).exists();
178
179
180 ZipFile jar = new ZipFile(generatedFile);
181 Set<String> set = new HashSet<>();
182 for (Enumeration<? extends ZipEntry> entries = jar.entries(); entries.hasMoreElements(); ) {
183 ZipEntry entry = entries.nextElement();
184 set.add(entry.getName());
185 }
186 jar.close();
187
188 assertThat(set)
189 .contains(
190 "META-INF/",
191 "META-INF/maven/",
192 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/",
193 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/",
194 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.xml",
195 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.properties");
196 }
197
198 public void testStale() throws Exception {
199 File testPom = new File(getBasedir(), "src/test/resources/unit/stale-test/stale-test-plugin-config.xml");
200 JavadocJar mojo = lookupMojo(testPom);
201 BufferingLog log = new BufferingLog();
202 mojo.setLog(log);
203
204 Thread.sleep(500);
205
206 new File(getBasedir(), "target/test/unit/stale-test/target/maven-javadoc-plugin-stale-data.txt").delete();
207 mojo.execute();
208 assertThat(log.getMessages()).contains("[INFO] No previous run data found, generating javadoc.");
209
210 Thread.sleep(500);
211
212 log.getMessages().clear();
213 mojo.execute();
214 assertThat(log.getMessages()).contains("[INFO] Skipping javadoc generation, everything is up to date.");
215 }
216
217 private static class BufferingLog implements Log {
218 private final List<String> messages = new ArrayList<>();
219
220 public List<String> getMessages() {
221 return messages;
222 }
223
224 @Override
225 public boolean isDebugEnabled() {
226 return true;
227 }
228
229 @Override
230 public void debug(CharSequence charSequence) {
231 debug(charSequence, null);
232 }
233
234 @Override
235 public void debug(CharSequence charSequence, Throwable throwable) {
236 message("DEBUG", charSequence, throwable);
237 }
238
239 @Override
240 public void debug(Throwable throwable) {
241 debug(null, throwable);
242 }
243
244 @Override
245 public boolean isInfoEnabled() {
246 return true;
247 }
248
249 @Override
250 public void info(CharSequence charSequence) {
251 info(charSequence, null);
252 }
253
254 @Override
255 public void info(CharSequence charSequence, Throwable throwable) {
256 message("INFO", charSequence, throwable);
257 }
258
259 @Override
260 public void info(Throwable throwable) {
261 info(null, throwable);
262 }
263
264 @Override
265 public boolean isWarnEnabled() {
266 return true;
267 }
268
269 @Override
270 public void warn(CharSequence charSequence) {
271 warn(charSequence, null);
272 }
273
274 @Override
275 public void warn(CharSequence charSequence, Throwable throwable) {
276 message("WARN", charSequence, throwable);
277 }
278
279 @Override
280 public void warn(Throwable throwable) {
281 warn(null, throwable);
282 }
283
284 @Override
285 public boolean isErrorEnabled() {
286 return true;
287 }
288
289 @Override
290 public void error(CharSequence charSequence) {
291 error(charSequence, null);
292 }
293
294 @Override
295 public void error(CharSequence charSequence, Throwable throwable) {
296 message("ERROR", charSequence, throwable);
297 }
298
299 @Override
300 public void error(Throwable throwable) {
301 error(null, throwable);
302 }
303
304 private void message(String level, CharSequence message, Throwable throwable) {
305 messages.add("[" + level + "]" + (message != null ? " " + message : "")
306 + (throwable != null ? " " + throwable : ""));
307 }
308 }
309 }