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