1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.lifecycle.internal;
20
21 import javax.inject.Inject;
22
23 import java.lang.reflect.Field;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.List;
27
28 import org.apache.maven.execution.AbstractExecutionListener;
29 import org.apache.maven.execution.DefaultMavenExecutionRequest;
30 import org.apache.maven.execution.DefaultMavenExecutionResult;
31 import org.apache.maven.execution.MavenExecutionRequest;
32 import org.apache.maven.execution.MavenSession;
33 import org.apache.maven.lifecycle.LifecycleExecutionException;
34 import org.apache.maven.lifecycle.internal.stub.MojoExecutorStub;
35 import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
36 import org.apache.maven.plugin.MojoExecution;
37 import org.apache.maven.project.MavenProject;
38 import org.codehaus.plexus.PlexusContainer;
39 import org.codehaus.plexus.testing.PlexusTest;
40 import org.eclipse.aether.DefaultRepositorySystemSession;
41 import org.junit.jupiter.api.Test;
42
43 import static org.junit.jupiter.api.Assertions.assertEquals;
44 import static org.junit.jupiter.api.Assertions.assertNull;
45
46 @PlexusTest
47 class LifecycleModuleBuilderTest {
48 @Inject
49 PlexusContainer container;
50
51 @Test
52 void testCurrentProject() throws Exception {
53 List<MavenProject> currentProjects = new ArrayList<>();
54 MojoExecutorStub mojoExecutor = new MojoExecutorStub() {
55 @Override
56 public void execute(MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex)
57 throws LifecycleExecutionException {
58 super.execute(session, mojoExecutions, projectIndex);
59 currentProjects.add(session.getCurrentProject());
60 }
61 };
62
63 final DefaultMavenExecutionResult defaultMavenExecutionResult = new DefaultMavenExecutionResult();
64 MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
65 mavenExecutionRequest.setExecutionListener(new AbstractExecutionListener());
66 mavenExecutionRequest.setGoals(Arrays.asList("clean"));
67 final MavenSession session = new MavenSession(
68 null, new DefaultRepositorySystemSession(), mavenExecutionRequest, defaultMavenExecutionResult);
69 final ProjectDependencyGraphStub dependencyGraphStub = new ProjectDependencyGraphStub();
70 session.setProjectDependencyGraph(dependencyGraphStub);
71 session.setProjects(dependencyGraphStub.getSortedProjects());
72
73 LifecycleModuleBuilder moduleBuilder = container.lookup(LifecycleModuleBuilder.class);
74 set(moduleBuilder, "mojoExecutor", mojoExecutor);
75
76 LifecycleStarter ls = container.lookup(LifecycleStarter.class);
77 ls.execute(session);
78
79 assertNull(session.getCurrentProject());
80 assertEquals(
81 Arrays.asList(
82 ProjectDependencyGraphStub.A,
83 ProjectDependencyGraphStub.B,
84 ProjectDependencyGraphStub.C,
85 ProjectDependencyGraphStub.X,
86 ProjectDependencyGraphStub.Y,
87 ProjectDependencyGraphStub.Z),
88 currentProjects);
89 }
90
91 static void set(Object obj, String field, Object v) throws NoSuchFieldException, IllegalAccessException {
92 Field f = obj.getClass().getDeclaredField(field);
93 f.setAccessible(true);
94 f.set(obj, v);
95 }
96 }