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 JavadocJarMojoTest extends AbstractMojoTestCase {
48
49 private JavadocJarMojo lookupMojo(File testPom) throws Exception {
50 JavadocJarMojo mojo = (JavadocJarMojo) 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 JavadocJarMojo 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 public void testContinueIfFailOnErrorIsFalse() throws Exception {
139 File testPom = new File(
140 getBasedir(),
141 "src/test/resources/unit/javadocjar-failonerror/javadocjar-failonerror-plugin-config.xml");
142 JavadocJarMojo mojo = lookupMojo(testPom);
143 mojo.execute();
144
145
146 File generatedFile = new File(
147 getBasedir(), "target/test/unit/javadocjar-failonerror/target/javadocjar-failonerror-javadoc.jar");
148 assertThat(generatedFile).exists();
149 }
150
151 public void testIncludeMavenDescriptorWhenExplicitlyConfigured() throws Exception {
152 File testPom = new File(
153 getBasedir(), "src/test/resources/unit/javadocjar-archive-config/javadocjar-archive-config.xml");
154 JavadocJarMojo mojo = lookupMojo(testPom);
155 mojo.execute();
156
157
158 File generatedFile = new File(
159 getBasedir(),
160 "target/test/unit/javadocjar-archive-config/target/javadocjar-archive-config-javadoc.jar");
161 assertThat(generatedFile).exists();
162
163
164 ZipFile jar = new ZipFile(generatedFile);
165 Set<String> set = new HashSet<>();
166 for (Enumeration<? extends ZipEntry> entries = jar.entries(); entries.hasMoreElements(); ) {
167 ZipEntry entry = entries.nextElement();
168 set.add(entry.getName());
169 }
170 jar.close();
171
172 assertThat(set)
173 .contains(
174 "META-INF/",
175 "META-INF/maven/",
176 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/",
177 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/",
178 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.xml",
179 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.properties");
180 }
181
182 public void testStale() throws Exception {
183 File testPom = new File(getBasedir(), "src/test/resources/unit/stale-test/stale-test-plugin-config.xml");
184 JavadocJarMojo mojo = lookupMojo(testPom);
185 BufferingLog log = new BufferingLog();
186 mojo.setLog(log);
187
188 Thread.sleep(500);
189
190 new File(getBasedir(), "target/test/unit/stale-test/target/maven-javadoc-plugin-stale-data.txt").delete();
191 mojo.execute();
192 assertThat(log.getMessages()).contains("[INFO] No previous run data found, generating javadoc.");
193
194 Thread.sleep(500);
195
196 log.getMessages().clear();
197 mojo.execute();
198 assertThat(log.getMessages()).contains("[INFO] Skipping javadoc generation, everything is up to date.");
199 }
200
201 private static class BufferingLog implements Log {
202 private final List<String> messages = new ArrayList<>();
203
204 public List<String> getMessages() {
205 return messages;
206 }
207
208 @Override
209 public boolean isDebugEnabled() {
210 return true;
211 }
212
213 @Override
214 public void debug(CharSequence charSequence) {
215 debug(charSequence, null);
216 }
217
218 @Override
219 public void debug(CharSequence charSequence, Throwable throwable) {
220 message("DEBUG", charSequence, throwable);
221 }
222
223 @Override
224 public void debug(Throwable throwable) {
225 debug(null, throwable);
226 }
227
228 @Override
229 public boolean isInfoEnabled() {
230 return true;
231 }
232
233 @Override
234 public void info(CharSequence charSequence) {
235 info(charSequence, null);
236 }
237
238 @Override
239 public void info(CharSequence charSequence, Throwable throwable) {
240 message("INFO", charSequence, throwable);
241 }
242
243 @Override
244 public void info(Throwable throwable) {
245 info(null, throwable);
246 }
247
248 @Override
249 public boolean isWarnEnabled() {
250 return true;
251 }
252
253 @Override
254 public void warn(CharSequence charSequence) {
255 warn(charSequence, null);
256 }
257
258 @Override
259 public void warn(CharSequence charSequence, Throwable throwable) {
260 message("WARN", charSequence, throwable);
261 }
262
263 @Override
264 public void warn(Throwable throwable) {
265 warn(null, throwable);
266 }
267
268 @Override
269 public boolean isErrorEnabled() {
270 return true;
271 }
272
273 @Override
274 public void error(CharSequence charSequence) {
275 error(charSequence, null);
276 }
277
278 @Override
279 public void error(CharSequence charSequence, Throwable throwable) {
280 message("ERROR", charSequence, throwable);
281 }
282
283 @Override
284 public void error(Throwable throwable) {
285 error(null, throwable);
286 }
287
288 private void message(String level, CharSequence message, Throwable throwable) {
289 messages.add("[" + level + "]" + (message != null ? " " + message : "")
290 + (throwable != null ? " " + throwable : ""));
291 }
292 }
293 }