1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.io.File;
26 import java.nio.file.Files;
27 import java.util.concurrent.atomic.AtomicReference;
28
29 import org.apache.maven.artifact.Artifact;
30 import org.apache.maven.artifact.DefaultArtifact;
31 import org.apache.maven.execution.MavenExecutionRequest;
32 import org.apache.maven.execution.MavenExecutionResult;
33 import org.apache.maven.execution.MavenSession;
34 import org.apache.maven.impl.resolver.MavenWorkspaceReader;
35 import org.apache.maven.project.MavenProject;
36 import org.apache.maven.project.MavenProjectHelper;
37 import org.junit.jupiter.api.Test;
38
39 import static java.util.Arrays.asList;
40 import static org.junit.jupiter.api.Assertions.assertEquals;
41 import static org.junit.jupiter.api.Assertions.assertNotNull;
42 import static org.junit.jupiter.api.Assertions.assertTrue;
43
44 class DefaultMavenTest extends AbstractCoreMavenComponentTestCase {
45 @Singleton
46 @Named("WsrClassCatcher")
47 private static final class WsrClassCatcher extends AbstractMavenLifecycleParticipant {
48 private final AtomicReference<Class<?>> wsrClassRef = new AtomicReference<>(null);
49
50 @Override
51 public void afterProjectsRead(MavenSession session) throws MavenExecutionException {
52 wsrClassRef.set(session.getRepositorySession().getWorkspaceReader().getClass());
53 }
54 }
55
56 @Inject
57 private Maven maven;
58
59 @Override
60 protected String getProjectsDirectory() {
61 return "src/test/projects/default-maven";
62 }
63
64 @Test
65 void testEnsureResolverSessionHasMavenWorkspaceReader() throws Exception {
66 WsrClassCatcher wsrClassCatcher =
67 (WsrClassCatcher) getContainer().lookup(AbstractMavenLifecycleParticipant.class, "WsrClassCatcher");
68 Maven maven = getContainer().lookup(Maven.class);
69 MavenExecutionRequest request =
70 createMavenExecutionRequest(getProject("simple")).setGoals(asList("validate"));
71
72 MavenExecutionResult result = maven.execute(request);
73 assertNotNull(result);
74
75 Class<?> wsrClass = wsrClassCatcher.wsrClassRef.get();
76 assertNotNull(wsrClass, "wsr cannot be null");
77 assertTrue(MavenWorkspaceReader.class.isAssignableFrom(wsrClass), String.valueOf(wsrClass));
78 }
79
80 @Test
81 void testThatErrorDuringProjectDependencyGraphCreationAreStored() throws Exception {
82 MavenExecutionRequest request =
83 createMavenExecutionRequest(getProject("cyclic-reference")).setGoals(asList("validate"));
84
85 MavenExecutionResult result = maven.execute(request);
86
87 assertEquals(ProjectCycleException.class, result.getExceptions().get(0).getClass());
88 }
89
90 @Test
91 void testMavenProjectNoDuplicateArtifacts() throws Exception {
92 MavenProjectHelper mavenProjectHelper = getContainer().lookup(MavenProjectHelper.class);
93 MavenProject mavenProject = new MavenProject();
94 mavenProject.setArtifact(new DefaultArtifact("g", "a", "1.0", Artifact.SCOPE_TEST, "jar", "", null));
95 File artifactFile = Files.createTempFile("foo", "tmp").toFile();
96 try {
97 mavenProjectHelper.attachArtifact(mavenProject, "java-source", artifactFile);
98 assertEquals(1, mavenProject.getAttachedArtifacts().size());
99 mavenProjectHelper.attachArtifact(mavenProject, "java-source", artifactFile);
100 assertEquals(1, mavenProject.getAttachedArtifacts().size());
101 } finally {
102 Files.deleteIfExists(artifactFile.toPath());
103 }
104 }
105 }