1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.source;
20
21 import java.io.File;
22 import java.nio.file.Paths;
23 import java.util.Collections;
24
25 import org.apache.maven.api.Project;
26 import org.apache.maven.api.ProjectScope;
27 import org.apache.maven.api.di.Provides;
28 import org.apache.maven.api.plugin.testing.Basedir;
29 import org.apache.maven.api.plugin.testing.InjectMojo;
30 import org.apache.maven.api.plugin.testing.MojoParameter;
31 import org.apache.maven.api.plugin.testing.MojoTest;
32 import org.apache.maven.api.plugin.testing.stubs.SessionMock;
33 import org.apache.maven.api.services.ProjectManager;
34 import org.apache.maven.internal.impl.InternalSession;
35 import org.junit.jupiter.api.Test;
36
37 import static org.apache.maven.api.plugin.testing.MojoExtension.getBasedir;
38 import static org.junit.jupiter.api.Assertions.assertFalse;
39 import static org.mockito.ArgumentMatchers.any;
40 import static org.mockito.ArgumentMatchers.eq;
41 import static org.mockito.Mockito.mock;
42 import static org.mockito.Mockito.when;
43
44
45
46
47 @MojoTest
48 public class TestSourceJarMojoTest extends AbstractSourcePluginTestCase {
49
50 @Test
51 @InjectMojo(goal = "test-jar")
52 @Basedir("${basedir}/target/test-classes/unit/project-001")
53 @MojoParameter(name = "classifier", value = "test-sources")
54 public void testDefaultConfiguration(AbstractSourceJarMojo mojo) throws Exception {
55 mojo.execute();
56
57 File target = new File(getBasedir(), "target");
58 assertTestSourceArchive(target, "project-001");
59 assertJarContent(getTestSourceArchive(target, "project-001"), new String[] {
60 "test-default-configuration.properties",
61 "foo/project001/AppTest.java",
62 "foo/project001/",
63 "foo/",
64 "META-INF/MANIFEST.MF",
65 "META-INF/",
66 "META-INF/maven/",
67 "META-INF/maven/source/",
68 "META-INF/maven/source/maven-source-plugin-test-project-001/",
69 "META-INF/maven/source/maven-source-plugin-test-project-001/pom.properties",
70 "META-INF/maven/source/maven-source-plugin-test-project-001/pom.xml"
71 });
72 }
73
74 @Test
75 @InjectMojo(goal = "test-jar")
76 @Basedir("${basedir}/target/test-classes/unit/project-003")
77 @MojoParameter(name = "classifier", value = "test-sources")
78 public void testExcludes(AbstractSourceJarMojo mojo) throws Exception {
79 mojo.execute();
80
81 File target = new File(getBasedir(), "target");
82 assertTestSourceArchive(target, "project-003");
83 assertJarContent(getTestSourceArchive(target, "project-003"), new String[] {
84 "test-default-configuration.properties",
85 "foo/project003/AppTest.java",
86 "foo/project003/",
87 "foo/",
88 "META-INF/MANIFEST.MF",
89 "META-INF/",
90 "META-INF/maven/",
91 "META-INF/maven/source/",
92 "META-INF/maven/source/maven-source-plugin-test-project-003/",
93 "META-INF/maven/source/maven-source-plugin-test-project-003/pom.properties",
94 "META-INF/maven/source/maven-source-plugin-test-project-003/pom.xml"
95 });
96 }
97
98 @Test
99 @InjectMojo(goal = "test-jar")
100 @Basedir("${basedir}/target/test-classes/unit/project-005")
101 @MojoParameter(name = "classifier", value = "test-sources")
102 public void testNoSources(AbstractSourceJarMojo mojo) throws Exception {
103 mojo.execute();
104
105
106 final File expectedFile = getTestTargetDir("project-005");
107 assertFalse(
108 expectedFile.exists(),
109 "Test source archive should not have been created[" + expectedFile.getAbsolutePath() + "]");
110 }
111
112 @Test
113 @InjectMojo(goal = "test-jar")
114 @Basedir("${basedir}/target/test-classes/unit/project-010")
115 @MojoParameter(name = "classifier", value = "test-sources")
116 public void testIncludeMavenDescriptorWhenExplicitlyConfigured(AbstractSourceJarMojo mojo) throws Exception {
117 mojo.execute();
118
119 File target = new File(getBasedir(), "target");
120 assertTestSourceArchive(target, "project-010");
121 assertJarContent(getTestSourceArchive(target, "project-010"), new String[] {
122 "test-default-configuration.properties",
123 "foo/project010/AppTest.java",
124 "foo/project010/",
125 "foo/",
126 "META-INF/MANIFEST.MF",
127 "META-INF/",
128 "META-INF/maven/",
129 "META-INF/maven/source/",
130 "META-INF/maven/source/maven-source-plugin-test-project-010/",
131 "META-INF/maven/source/maven-source-plugin-test-project-010/pom.xml",
132 "META-INF/maven/source/maven-source-plugin-test-project-010/pom" + ".properties"
133 });
134 }
135
136 @Provides
137 InternalSession createSession() {
138 InternalSession session = SessionMock.getMockSession("target/local-repo");
139 ProjectManager projectManager = mock(ProjectManager.class);
140 when(session.getService(ProjectManager.class)).thenReturn(projectManager);
141 when(projectManager.getCompileSourceRoots(any(), eq(ProjectScope.TEST))).thenAnswer(iom -> {
142 Project p = iom.getArgument(0, Project.class);
143 return Collections.singletonList(
144 Paths.get(getBasedir()).resolve(p.getModel().getBuild().getTestSourceDirectory()));
145 });
146 when(projectManager.getResources(any(), eq(ProjectScope.TEST))).thenAnswer(iom -> {
147 Project p = iom.getArgument(0, Project.class);
148 return p.getBuild().getTestResources().stream()
149 .map(r -> r.withDirectory(
150 Paths.get(getBasedir()).resolve(r.getDirectory()).toString()))
151 .toList();
152 });
153 return session;
154 }
155 }