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 if (JavaVersion.JAVA_VERSION.isAtLeast("23")) {
99 assertTrue(set.contains("resource-files/stylesheet.css"));
100 } else {
101 assertTrue(set.contains("stylesheet.css"));
102 }
103 JavaVersion javadocVersion = (JavaVersion) getVariableValueFromObject(mojo, "javadocRuntimeVersion");
104 if (javadocVersion.isBefore("1.7")) {
105 assertTrue(set.contains("resources/inherit.gif"));
106 } else if (javadocVersion.isBefore("1.8")) {
107 assertTrue(set.contains("resources/background.gif") );
108 } else {
109
110 assertFalse(set.contains("resources"));
111 }
112
113 assertTrue(set.contains("javadocjar/def/package-use.html"));
114 assertTrue(set.contains("javadocjar/def/package-tree.html"));
115 assertTrue(set.contains("javadocjar/def/package-summary.html"));
116
117 if (JavaVersion.JAVA_SPECIFICATION_VERSION.isBefore("11")) {
118 assertTrue(set.contains("javadocjar/def/package-frame.html"));
119 }
120 assertTrue(set.contains("javadocjar/def/class-use/AppSample.html"));
121 assertTrue(set.contains("index.html"));
122 assertTrue(set.contains("javadocjar/def/App.html"));
123 assertTrue(set.contains("javadocjar/def/AppSample.html"));
124 assertTrue(set.contains("javadocjar/def/class-use/App.html"));
125
126 assertFalse(set.contains(AbstractJavadocMojo.ARGFILE_FILE_NAME));
127 assertFalse(set.contains(AbstractJavadocMojo.FILES_FILE_NAME));
128 assertFalse(set.contains(AbstractJavadocMojo.OPTIONS_FILE_NAME));
129 assertFalse(set.contains(AbstractJavadocMojo.PACKAGES_FILE_NAME));
130
131
132 generatedFile = new File(
133 getBasedir(), "target/test/unit/javadocjar-default/target/site/apidocs/javadocjar/def/App.html");
134 assertThat(generatedFile).exists();
135
136 generatedFile = new File(
137 getBasedir(), "target/test/unit/javadocjar-default/target/site/apidocs/javadocjar/def/AppSample.html");
138 assertThat(generatedFile).exists();
139 }
140
141 public void testContinueIfFailOnErrorIsFalse() throws Exception {
142 File testPom = new File(
143 getBasedir(),
144 "src/test/resources/unit/javadocjar-failonerror/javadocjar-failonerror-plugin-config.xml");
145 JavadocJarMojo mojo = lookupMojo(testPom);
146 mojo.execute();
147
148
149 File generatedFile = new File(
150 getBasedir(), "target/test/unit/javadocjar-failonerror/target/javadocjar-failonerror-javadoc.jar");
151 assertThat(generatedFile).exists();
152 }
153
154 public void testIncludeMavenDescriptorWhenExplicitlyConfigured() throws Exception {
155 File testPom = new File(
156 getBasedir(), "src/test/resources/unit/javadocjar-archive-config/javadocjar-archive-config.xml");
157 JavadocJarMojo mojo = lookupMojo(testPom);
158 mojo.execute();
159
160
161 File generatedFile = new File(
162 getBasedir(),
163 "target/test/unit/javadocjar-archive-config/target/javadocjar-archive-config-javadoc.jar");
164 assertThat(generatedFile).exists();
165
166
167 ZipFile jar = new ZipFile(generatedFile);
168 Set<String> set = new HashSet<>();
169 for (Enumeration<? extends ZipEntry> entries = jar.entries(); entries.hasMoreElements(); ) {
170 ZipEntry entry = entries.nextElement();
171 set.add(entry.getName());
172 }
173 jar.close();
174
175 assertThat(set)
176 .contains(
177 "META-INF/",
178 "META-INF/maven/",
179 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/",
180 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/",
181 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.xml",
182 "META-INF/maven/org.apache.maven.plugins.maven-javadoc-plugin.unit/javadocjar-archive-config/pom.properties");
183 }
184
185 public void testStale() throws Exception {
186 File testPom = new File(getBasedir(), "src/test/resources/unit/stale-test/stale-test-plugin-config.xml");
187 JavadocJarMojo mojo = lookupMojo(testPom);
188 BufferingLog log = new BufferingLog();
189 mojo.setLog(log);
190
191 Thread.sleep(500);
192
193 new File(getBasedir(), "target/test/unit/stale-test/target/maven-javadoc-plugin-stale-data.txt").delete();
194 mojo.execute();
195 assertThat(log.getMessages()).contains("[DEBUG] No previous run data found, generating javadoc.");
196
197 Thread.sleep(500);
198
199 log.getMessages().clear();
200 mojo.execute();
201 assertThat(log.getMessages()).contains("[DEBUG] Skipping javadoc generation, everything is up to date.");
202 }
203
204 private static class BufferingLog implements Log {
205 private final List<String> messages = new ArrayList<>();
206
207 public List<String> getMessages() {
208 return messages;
209 }
210
211 @Override
212 public boolean isDebugEnabled() {
213 return true;
214 }
215
216 @Override
217 public void debug(CharSequence charSequence) {
218 debug(charSequence, null);
219 }
220
221 @Override
222 public void debug(CharSequence charSequence, Throwable throwable) {
223 message("DEBUG", charSequence, throwable);
224 }
225
226 @Override
227 public void debug(Throwable throwable) {
228 debug(null, throwable);
229 }
230
231 @Override
232 public boolean isInfoEnabled() {
233 return true;
234 }
235
236 @Override
237 public void info(CharSequence charSequence) {
238 info(charSequence, null);
239 }
240
241 @Override
242 public void info(CharSequence charSequence, Throwable throwable) {
243 message("INFO", charSequence, throwable);
244 }
245
246 @Override
247 public void info(Throwable throwable) {
248 info(null, throwable);
249 }
250
251 @Override
252 public boolean isWarnEnabled() {
253 return true;
254 }
255
256 @Override
257 public void warn(CharSequence charSequence) {
258 warn(charSequence, null);
259 }
260
261 @Override
262 public void warn(CharSequence charSequence, Throwable throwable) {
263 message("WARN", charSequence, throwable);
264 }
265
266 @Override
267 public void warn(Throwable throwable) {
268 warn(null, throwable);
269 }
270
271 @Override
272 public boolean isErrorEnabled() {
273 return true;
274 }
275
276 @Override
277 public void error(CharSequence charSequence) {
278 error(charSequence, null);
279 }
280
281 @Override
282 public void error(CharSequence charSequence, Throwable throwable) {
283 message("ERROR", charSequence, throwable);
284 }
285
286 @Override
287 public void error(Throwable throwable) {
288 error(null, throwable);
289 }
290
291 private void message(String level, CharSequence message, Throwable throwable) {
292 messages.add("[" + level + "]" + (message != null ? " " + message : "")
293 + (throwable != null ? " " + throwable : ""));
294 }
295 }
296 }