1 package org.apache.maven.reporting.exec;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import com.google.common.collect.Lists;
23 import org.apache.maven.DefaultMaven;
24 import org.apache.maven.Maven;
25 import org.apache.maven.RepositoryUtils;
26 import org.apache.maven.artifact.repository.ArtifactRepository;
27 import org.apache.maven.cli.MavenCli;
28 import org.apache.maven.execution.DefaultMavenExecutionRequest;
29 import org.apache.maven.execution.DefaultMavenExecutionResult;
30 import org.apache.maven.execution.MavenExecutionRequest;
31 import org.apache.maven.execution.MavenExecutionRequestPopulator;
32 import org.apache.maven.execution.MavenExecutionResult;
33 import org.apache.maven.execution.MavenSession;
34 import org.apache.maven.model.Build;
35 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
36 import org.apache.maven.project.MavenProject;
37 import org.apache.maven.repository.RepositorySystem;
38 import org.apache.maven.settings.Settings;
39 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
40 import org.apache.maven.settings.building.SettingsBuilder;
41 import org.apache.maven.settings.building.SettingsBuildingException;
42 import org.apache.maven.settings.building.SettingsBuildingRequest;
43 import org.codehaus.plexus.PlexusTestCase;
44 import org.codehaus.plexus.classworlds.realm.ClassRealm;
45 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
46 import org.codehaus.plexus.logging.Logger;
47 import org.sonatype.aether.RepositorySystemSession;
48 import org.sonatype.aether.artifact.Artifact;
49 import org.sonatype.aether.repository.RemoteRepository;
50 import org.sonatype.aether.repository.WorkspaceReader;
51 import org.sonatype.aether.repository.WorkspaceRepository;
52
53 import java.io.File;
54 import java.util.Collections;
55 import java.util.List;
56
57
58
59
60 public class TestDefaultMavenReportExecutor
61 extends PlexusTestCase
62 {
63
64 MavenExecutionRequest request = null;
65
66 ArtifactRepository localArtifactRepository;
67
68 public void testSimpleLookup()
69 throws Exception
70 {
71 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
72 assertNotNull( mavenReportExecutor );
73 }
74
75 public void testSimpleBuildReports()
76 throws Exception
77 {
78 ReportSet reportSet = new ReportSet();
79 reportSet.getReports().add( "test-javadoc" );
80 reportSet.getReports().add( "javadoc" );
81
82 List<MavenReportExecution> mavenReportExecutions = buildReports( reportSet );
83
84 assertNotNull( mavenReportExecutions );
85 assertEquals( 2, mavenReportExecutions.size() );
86 assertEquals( "testapidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
87 assertEquals( "apidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
88 }
89
90 public void testMultipleReportSets()
91 throws Exception
92 {
93 ReportSet reportSet = new ReportSet();
94 reportSet.getReports().add( "javadoc" );
95 ReportSet reportSet2 = new ReportSet();
96 reportSet2.getReports().add( "test-javadoc" );
97 reportSet2.getReports().add( "javadoc" );
98
99 List<MavenReportExecution> mavenReportExecutions = buildReports( reportSet, reportSet2 );
100
101 assertNotNull( mavenReportExecutions );
102 assertEquals( 3, mavenReportExecutions.size() );
103 assertEquals( "apidocs/index", mavenReportExecutions.get( 0 ).getMavenReport().getOutputName() );
104 assertEquals( "testapidocs/index", mavenReportExecutions.get( 1 ).getMavenReport().getOutputName() );
105 assertEquals( "apidocs/index", mavenReportExecutions.get( 2 ).getMavenReport().getOutputName() );
106 }
107
108 private List<MavenReportExecution> buildReports( ReportSet... javadocReportSets )
109 throws Exception
110 {
111 ClassLoader orig = Thread.currentThread().getContextClassLoader();
112 ClassRealm realm = getContainer().getContainerRealm();
113
114 Thread.currentThread().setContextClassLoader( realm );
115 try
116 {
117 MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest();
118
119 mavenReportExecutorRequest.setLocalRepository( getLocalArtifactRepository() );
120
121 MavenProject mavenProject = getMavenProject();
122
123 mavenReportExecutorRequest.setProject( mavenProject );
124
125 MavenSession mavenSession = getMavenSession( getLocalArtifactRepository(), mavenProject );
126 mavenSession.setCurrentProject( mavenProject );
127 mavenSession.setProjects( Lists.<MavenProject>newArrayList( mavenProject ) );
128 mavenReportExecutorRequest.setMavenSession( mavenSession );
129
130 ReportPlugin reportPlugin = new ReportPlugin();
131 reportPlugin.setGroupId( "org.apache.maven.plugins" );
132 reportPlugin.setArtifactId( "maven-javadoc-plugin" );
133 reportPlugin.setVersion( "2.7" );
134
135 for ( ReportSet reportSet : javadocReportSets )
136 {
137 reportPlugin.getReportSets().add( reportSet );
138 }
139
140 List<ReportPlugin> reportPlugins = Lists.newArrayList( reportPlugin );
141
142 mavenReportExecutorRequest.setReportPlugins( reportPlugins.toArray( new ReportPlugin[1] ) );
143
144 MavenReportExecutor mavenReportExecutor = lookup( MavenReportExecutor.class );
145
146 return mavenReportExecutor.buildMavenReports( mavenReportExecutorRequest );
147 }
148 finally
149 {
150 Thread.currentThread().setContextClassLoader( orig );
151 }
152 }
153
154 protected MavenSession getMavenSession( ArtifactRepository localRepository, final MavenProject mavenProject )
155 throws Exception
156 {
157 request = new DefaultMavenExecutionRequest();
158 request.setLocalRepository( localRepository );
159
160 request.setWorkspaceReader( new WorkspaceReader()
161 {
162 public WorkspaceRepository getRepository()
163 {
164 return new WorkspaceRepository();
165 }
166
167 public File findArtifact( Artifact artifact )
168 {
169 return null;
170 }
171
172 public List<String> findVersions( Artifact artifact )
173 {
174 return Collections.emptyList();
175 }
176 } );
177 final Settings settings = getSettings();
178
179 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateFromSettings( request, settings );
180
181 getContainer().lookup( MavenExecutionRequestPopulator.class ).populateDefaults( request );
182
183 request.setLocalRepository( getLocalArtifactRepository() );
184 request.setLocalRepositoryPath( getLocalArtifactRepository().getBasedir() );
185 request.setCacheNotFound( false );
186
187 request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );
188 getContainer().lookup( Logger.class ).setThreshold( 1 );
189
190 request.setSystemProperties( System.getProperties() );
191
192 MavenExecutionResult result = new DefaultMavenExecutionResult();
193
194 RepositorySystemSession repositorySystemSession = buildRepositorySystemSession( request );
195
196 MavenSession mavenSession = new MavenSession( getContainer(), repositorySystemSession, request, result )
197 {
198 @Override
199 public MavenProject getTopLevelProject()
200 {
201 return mavenProject;
202 }
203
204 @Override
205 public Settings getSettings()
206 {
207 return settings;
208 }
209
210 @Override
211 public List<MavenProject> getProjects()
212 {
213 return Lists.newArrayList( mavenProject );
214 }
215
216 @Override
217 public MavenProject getCurrentProject()
218 {
219 return mavenProject;
220 }
221
222 };
223 return mavenSession;
224 }
225
226 private ArtifactRepository getLocalArtifactRepository()
227 throws Exception
228 {
229 if ( localArtifactRepository != null )
230 {
231 return localArtifactRepository;
232 }
233 String localRepoPath =
234 System.getProperty( "localRepository", MavenCli.userMavenConfigurationHome.getPath() + "/repository" );
235
236 localArtifactRepository = lookup( RepositorySystem.class ).createLocalRepository( new File( localRepoPath ) );
237 return localArtifactRepository;
238 }
239
240 public Settings getSettings()
241 throws ComponentLookupException, SettingsBuildingException
242 {
243
244 SettingsBuildingRequest settingsBuildingRequest = new DefaultSettingsBuildingRequest();
245
246 settingsBuildingRequest.setGlobalSettingsFile( MavenCli.DEFAULT_GLOBAL_SETTINGS_FILE );
247
248 settingsBuildingRequest.setUserSettingsFile( MavenCli.DEFAULT_USER_SETTINGS_FILE );
249
250 settingsBuildingRequest.getSystemProperties().putAll( System.getProperties() );
251
252 Settings settings =
253 getContainer().lookup( SettingsBuilder.class ).build( settingsBuildingRequest ).getEffectiveSettings();
254
255 return settings;
256
257 }
258
259 protected MavenProject getMavenProject()
260 {
261 MavenProjectStub mavenProjectStub = new MavenProjectStub()
262 {
263 @Override
264 public List<RemoteRepository> getRemotePluginRepositories()
265 {
266 if ( super.getRemotePluginRepositories() == null )
267 {
268 return RepositoryUtils.toRepos( request.getRemoteRepositories() );
269 }
270 return super.getRemotePluginRepositories();
271 }
272
273 @Override
274 public List<ArtifactRepository> getRemoteArtifactRepositories()
275 {
276 if ( super.getRemotePluginRepositories() == null )
277 {
278 return request.getRemoteRepositories();
279 }
280 return super.getRemoteArtifactRepositories();
281 }
282
283 @Override
284 public String getName()
285 {
286 return "foo";
287 }
288
289 @Override
290 public String getVersion()
291 {
292 return "1.0-SNAPSHOT";
293 }
294
295 @Override
296 public boolean isExecutionRoot()
297 {
298 return true;
299 }
300
301 @Override
302 public List<String> getCompileSourceRoots()
303 {
304 return Lists.newArrayList( "src/main/java" );
305 }
306
307 @Override
308 public List<String> getTestCompileSourceRoots()
309 {
310 return Lists.newArrayList( "src/test/java" );
311 }
312 };
313
314 mavenProjectStub.setPackaging( "jar" );
315
316 Build build = new Build();
317
318 build.setOutputDirectory( "target" );
319
320 build.setSourceDirectory( "src/main/java" );
321
322 build.setTestSourceDirectory( "src/test/java" );
323
324 mavenProjectStub.setBuild( build );
325
326 return mavenProjectStub;
327 }
328
329 private RepositorySystemSession buildRepositorySystemSession( MavenExecutionRequest request )
330 throws ComponentLookupException
331 {
332 DefaultMaven defaultMaven = (DefaultMaven) getContainer().lookup( Maven.class );
333
334 return defaultMaven.newRepositorySession( request );
335 }
336
337 }