1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.tools.plugin.generator;
20
21 import java.io.File;
22 import java.lang.reflect.Constructor;
23 import java.nio.file.Files;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
27
28 import org.apache.maven.model.Build;
29 import org.apache.maven.plugin.descriptor.DuplicateParameterException;
30 import org.apache.maven.plugin.descriptor.MojoDescriptor;
31 import org.apache.maven.plugin.descriptor.Parameter;
32 import org.apache.maven.plugin.descriptor.PluginDescriptor;
33 import org.apache.maven.plugin.logging.Log;
34 import org.apache.maven.plugin.logging.SystemStreamLog;
35 import org.apache.maven.project.MavenProject;
36 import org.apache.maven.tools.plugin.DefaultPluginToolsRequest;
37 import org.codehaus.plexus.component.repository.ComponentDependency;
38 import org.codehaus.plexus.util.FileUtils;
39 import org.junit.jupiter.api.Disabled;
40 import org.junit.jupiter.api.Test;
41
42
43
44
45 public abstract class AbstractGeneratorTestCase {
46 protected Generator generator;
47
48 protected String basedir = System.getProperty("basedir");
49
50 @Test
51 public void generator() throws Exception {
52 setupGenerator();
53
54 MojoDescriptor mojoDescriptor = new MojoDescriptor();
55 mojoDescriptor.setGoal("testGoal");
56 mojoDescriptor.setImplementation("org.apache.maven.tools.plugin.generator.TestMojo");
57 mojoDescriptor.setDependencyResolutionRequired("compile");
58 mojoDescriptor.setSince("mojoSince");
59
60 List<Parameter> params = new ArrayList<>();
61
62 Parameter param = new Parameter();
63 param.setExpression("${project.build.directory}");
64 param.setDefaultValue("</markup-must-be-escaped>");
65 param.setName("dir");
66 param.setRequired(true);
67 param.setType("java.lang.String");
68 param.setDescription("Test parameter description");
69 param.setAlias("some.alias");
70 param.setSince("paramDirSince");
71 params.add(param);
72
73 param = new Parameter();
74 param.setName("withoutSince");
75 param.setType("java.lang.String");
76 params.add(param);
77
78 mojoDescriptor.setParameters(params);
79
80 PluginDescriptor pluginDescriptor = new PluginDescriptor();
81 mojoDescriptor.setPluginDescriptor(pluginDescriptor);
82
83 pluginDescriptor.addMojo(mojoDescriptor);
84
85 pluginDescriptor.setArtifactId("maven-unitTesting-plugin");
86 pluginDescriptor.setGoalPrefix("test");
87
88 ComponentDependency dependency = new ComponentDependency();
89 dependency.setGroupId("testGroup");
90 dependency.setArtifactId("testArtifact");
91 dependency.setVersion("0.0.0");
92
93 pluginDescriptor.setDependencies(Collections.singletonList(dependency));
94
95 File destinationDirectory =
96 Files.createTempDirectory("testGenerator-outDir").toFile();
97 destinationDirectory.mkdir();
98
99 MavenProject mavenProject = new MavenProject();
100 mavenProject.setGroupId("foo");
101 mavenProject.setArtifactId("bar");
102 Build build = new Build();
103 build.setDirectory(basedir + "/target");
104 build.setOutputDirectory(basedir + "/target");
105 mavenProject.setBuild(build);
106 extendPluginDescriptor(pluginDescriptor);
107 generator.execute(destinationDirectory, new DefaultPluginToolsRequest(mavenProject, pluginDescriptor));
108
109 validate(destinationDirectory, false);
110
111 FileUtils.deleteDirectory(destinationDirectory);
112 }
113
114 @Test
115 @Disabled
116 public void generatorV4() throws Exception {
117 setupGenerator();
118
119 MojoDescriptor mojoDescriptor = new MojoDescriptor();
120 mojoDescriptor.setGoal("testGoal");
121 mojoDescriptor.setImplementation("org.apache.maven.tools.plugin.generator.TestMojo");
122 mojoDescriptor.setDependencyResolutionRequired("compile");
123 mojoDescriptor.setSince("mojoSince");
124
125 List<Parameter> params = new ArrayList<>();
126
127 Parameter param = new Parameter();
128 param.setExpression("${project.build.directory}");
129 param.setDefaultValue("</markup-must-be-escaped>");
130 param.setName("dir");
131 param.setRequired(true);
132 param.setType("java.lang.String");
133 param.setDescription("Test parameter description");
134 param.setAlias("some.alias");
135 param.setSince("paramDirSince");
136 params.add(param);
137
138 param = new Parameter();
139 param.setName("withoutSince");
140 param.setType("java.lang.String");
141 params.add(param);
142
143 mojoDescriptor.setParameters(params);
144
145 PluginDescriptor pluginDescriptor = new PluginDescriptor();
146 mojoDescriptor.setPluginDescriptor(pluginDescriptor);
147
148 pluginDescriptor.addMojo(mojoDescriptor);
149
150 pluginDescriptor.setArtifactId("maven-unitTesting-plugin");
151 pluginDescriptor.setGoalPrefix("test");
152
153 ComponentDependency dependency = new ComponentDependency();
154 dependency.setGroupId("testGroup");
155 dependency.setArtifactId("testArtifact");
156 dependency.setVersion("0.0.0");
157
158 pluginDescriptor.setDependencies(Collections.singletonList(dependency));
159
160 File destinationDirectory =
161 Files.createTempDirectory("testGenerator-outDir").toFile();
162 destinationDirectory.mkdir();
163
164 MavenProject mavenProject = new MavenProject();
165 mavenProject.setGroupId("foo");
166 mavenProject.setArtifactId("bar");
167 Build build = new Build();
168 build.setDirectory(basedir + "/target");
169 build.setOutputDirectory(basedir + "/target");
170 mavenProject.setBuild(build);
171 extendPluginDescriptor(pluginDescriptor);
172 DefaultPluginToolsRequest request = new DefaultPluginToolsRequest(mavenProject, pluginDescriptor);
173 pluginDescriptor.setRequiredMavenVersion("4.0.0");
174 generator.execute(destinationDirectory, request);
175
176 validate(destinationDirectory, true);
177
178 FileUtils.deleteDirectory(destinationDirectory);
179 }
180
181 protected void extendPluginDescriptor(PluginDescriptor pluginDescriptor) throws DuplicateParameterException {
182
183 }
184
185
186
187
188
189 protected void setupGenerator() throws Exception {
190 String generatorClassName = getClass().getName();
191
192 generatorClassName = generatorClassName.substring(0, generatorClassName.length() - 4);
193
194 try {
195 Class<?> generatorClass =
196 Thread.currentThread().getContextClassLoader().loadClass(generatorClassName);
197
198 Log log = new SystemStreamLog();
199 try {
200 Constructor<?> constructor = generatorClass.getConstructor(Log.class);
201 generator = (Generator) constructor.newInstance(log);
202 } catch (NoSuchMethodException ignore) {
203 generator = (Generator) generatorClass.newInstance();
204 }
205 } catch (Exception e) {
206 throw new Exception("Cannot find " + generatorClassName
207 + "! Make sure your test case is named in the form ${generatorClassName}Test "
208 + "or override the setupPlugin() method to instantiate the mojo yourself.");
209 }
210 }
211
212
213
214
215
216 protected void validate(File destinationDirectory, boolean isV4) throws Exception {
217
218 }
219 }