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 }