1 package com.atlassian.maven.plugins.amps;
2
3 import junit.framework.TestCase;
4 import org.apache.maven.plugin.MojoExecutionException;
5 import org.apache.maven.plugin.MojoFailureException;
6 import org.apache.maven.project.MavenProject;
7 import org.apache.maven.model.Build;
8 import org.apache.maven.model.Plugin;
9
10 import java.lang.reflect.Field;
11
12 public class TestAbstractProductAwareMojo extends TestCase
13 {
14 public void testGetProductId() throws MojoExecutionException
15 {
16 assertEquals("foo", new SomeMojo("foo").getProductId());
17 }
18
19 public void testGetProductIdFromParam() throws MojoExecutionException, NoSuchFieldException, IllegalAccessException
20 {
21 SomeMojo mojo = new SomeMojo("foo");
22 setPrivateField(mojo, "product", "bar");
23 assertEquals("bar", mojo.getProductId());
24 }
25
26 public void testGetDefaultProductId() throws MojoExecutionException, NoSuchFieldException, IllegalAccessException
27 {
28 SomeMojo mojo = new SomeMojo(null);
29 assertEquals("refapp", mojo.getProductId());
30 }
31
32 private void setPrivateField(Object object, String fieldName, Object value)
33 throws IllegalAccessException
34 {
35 Field field = null;
36 Class clazz = object.getClass();
37 while (clazz != Object.class)
38 {
39 for (Field f : clazz.getDeclaredFields())
40 {
41 if (fieldName.equals(f.getName()))
42 {
43 field = f;
44 }
45 }
46 clazz = clazz.getSuperclass();
47 }
48
49
50 assertNotNull(field);
51
52 field.setAccessible(true);
53 field.set(object, value);
54 }
55
56 public void testGetProductIdFromProject() throws MojoExecutionException, NoSuchFieldException, IllegalAccessException
57 {
58 SomeMojo mojo = new SomeMojo(null);
59 MavenProject proj = new MavenProject();
60 Build build = new Build();
61 proj.setBuild(build);
62 Plugin plugin = new Plugin();
63 build.addPlugin(plugin);
64 plugin.setGroupId("com.atlassian.maven.plugins");
65 plugin.setArtifactId("maven-confluence-plugin");
66 setPrivateField(mojo, "project", proj);
67 assertEquals("confluence", mojo.getProductId());
68 }
69
70
71 public void testGetProductIdAndVersionFromProjectInformation() throws MojoExecutionException, NoSuchFieldException, IllegalAccessException
72 {
73 SomeMojo mojo = new SomeMojo(null);
74 MavenProject proj = new MavenProject();
75 Build build = new Build();
76 proj.setBuild(build);
77 Plugin plugin = new Plugin();
78 build.addPlugin(plugin);
79 plugin.setGroupId("com.atlassian.maven.plugins");
80 plugin.setArtifactId("maven-confluence-plugin");
81 plugin.setVersion("1.0");
82 setPrivateField(mojo, "project", proj);
83 assertEquals("confluence", mojo.getProductId());
84 assertEquals("1.0", mojo.getPluginInformation().getVersion());
85 assertEquals("confluence", mojo.getPluginInformation().getId());
86 }
87
88 public static class SomeMojo extends AbstractProductAwareMojo
89 {
90 private final String defaultProductId;
91
92 public SomeMojo(String defaultProductId)
93 {
94 this.defaultProductId = defaultProductId;
95 }
96
97 @Override
98 protected String getDefaultProductId() throws MojoExecutionException
99 {
100 return defaultProductId;
101 }
102
103 public void execute() throws MojoExecutionException, MojoFailureException
104 {
105 }
106 }
107 }