View Javadoc
1   package org.codehaus.gmavenplus.mojo;
2   
3   import org.apache.maven.artifact.Artifact;
4   import org.apache.maven.execution.MavenSession;
5   import org.apache.maven.model.Model;
6   import org.apache.maven.plugin.MojoExecution;
7   import org.apache.maven.project.MavenProject;
8   import org.codehaus.gmavenplus.util.ClassWrangler;
9   import org.junit.Before;
10  import org.junit.Test;
11  import org.mockito.Mock;
12  import org.mockito.MockitoAnnotations;
13  import org.mockito.Spy;
14  
15  import java.util.List;
16  import java.util.Properties;
17  
18  import static org.junit.Assert.*;
19  import static org.mockito.Mockito.*;
20  
21  
22  /**
23   * Unit tests for the AbstractToolsMojo class.
24   *
25   * @author Keegan Witt
26   */
27  public class AbstractToolsMojoTest {
28      private TestMojo testMojo;
29      @Spy
30      private Properties properties;
31      @Mock
32      private MavenProject project;
33      @Mock
34      private MavenSession session;
35      @Mock
36      private List<Artifact> pluginArtifacts;
37      @Mock
38      private MojoExecution mojoExecution;
39      @Mock
40      private ClassWrangler classWrangler;
41  
42      @Before
43      public void setup() throws Exception {
44          MockitoAnnotations.openMocks(this);
45          testMojo = new TestMojo();
46          testMojo.project = project;
47          testMojo.session = session;
48          testMojo.pluginArtifacts = pluginArtifacts;
49          testMojo.mojoExecution = mojoExecution;
50          testMojo.classWrangler = classWrangler;
51          Class<?> antBuilderClass;
52          try {
53              antBuilderClass = Class.forName("groovy.ant.AntBuilder");
54          } catch (ClassNotFoundException e) {
55              antBuilderClass = Class.forName("groovy.util.AntBuilder");
56          }
57  
58          doReturn(antBuilderClass).when(classWrangler).getClass(anyString());
59      }
60  
61      @Test
62      public void testInitializeProperties() {
63          testMojo.initializeProperties();
64  
65          assertNotNull(testMojo.properties.get("project"));
66          assertNotNull(testMojo.properties.get("session"));
67          assertNotNull(testMojo.properties.get("pluginArtifacts"));
68          assertNotNull(testMojo.properties.get("mojoExecution"));
69      }
70  
71      @Test
72      public void testInitializePropertiesNull() {
73          testMojo.project = null;
74          testMojo.session = null;
75          testMojo.pluginArtifacts = null;
76          testMojo.mojoExecution = mojoExecution;
77  
78          testMojo.initializeProperties();
79  
80          verify(properties, never()).put(eq("project"), any(MavenProject.class));
81          verify(properties, never()).put(eq("session"), any(MavenSession.class));
82          verify(properties, never()).put(eq("pluginArtifacts"), anyList());
83          verify(properties, never()).put(eq("mojoExecution"), any(MojoExecution.class));
84      }
85  
86      @Test
87      public void testInitializePropertiesAlreadyInProps() {
88          testMojo.properties = properties;
89  
90          testMojo.initializeProperties();
91          testMojo.initializeProperties();
92  
93          verify(properties, times(1)).put(eq("project"), any(MavenProject.class));
94          verify(properties, times(1)).put(eq("session"), any(MavenSession.class));
95          verify(properties, times(1)).put(eq("pluginArtifacts"), anyList());
96          verify(properties, times(1)).put(eq("mojoExecution"), any(MojoExecution.class));
97      }
98  
99      @Test
100     public void testAddAllProjectProperties() {
101         Properties projectProperties = new Properties();
102         projectProperties.put("foo", "bar");
103         Model model = new Model();
104         model.setProperties(projectProperties);
105         testMojo.project = new MavenProject(model);
106         testMojo.bindAllProjectProperties = true;
107 
108         testMojo.initializeProperties();
109 
110         assertEquals("bar", testMojo.properties.get("foo"));
111     }
112 
113     @Test
114     public void testAddAllSessionUserProperties() {
115         MavenSession session = mock(MavenSession.class);
116         Properties sessionProperties = new Properties();
117         sessionProperties.put("foo", "bar");
118         doReturn(sessionProperties).when(session).getUserProperties();
119         testMojo.session = session;
120         testMojo.bindAllSessionUserProperties = true;
121 
122         testMojo.initializeProperties();
123 
124         assertEquals("bar", testMojo.properties.get("foo"));
125     }
126 
127     @Test
128     public void testBindAllProjectPropertiesAndBindSessionUserOverridePropertiesWhenEmpty() {
129         MavenSession session = mock(MavenSession.class);
130         Properties projectProperties = new Properties();
131         projectProperties.put("foo", "bar");
132         doReturn(new Properties()).when(session).getUserProperties();
133         doReturn(projectProperties).when(project).getProperties();
134         testMojo.session = session;
135         testMojo.bindAllProjectProperties = true;
136         testMojo.bindSessionUserOverrideProperties = true;
137 
138         testMojo.initializeProperties();
139     }
140 
141     @Test
142     public void testSessionPropertiesOverrideProjectPropertiesAndIncludesOthers() {
143         Properties projectProperties = new Properties();
144         projectProperties.put("foo", "bar");
145         Model model = new Model();
146         model.setProperties(projectProperties);
147         testMojo.project = new MavenProject(model);
148         MavenSession session = mock(MavenSession.class);
149         Properties sessionProperties = new Properties();
150         sessionProperties.put("foo", "baz");
151         sessionProperties.put("bar", "foo");
152         doReturn(sessionProperties).when(session).getUserProperties();
153         testMojo.session = session;
154         testMojo.bindAllProjectProperties = true;
155         testMojo.bindAllSessionUserProperties = true;
156 
157         testMojo.initializeProperties();
158         assertEquals("baz", testMojo.properties.get("foo"));
159         assertEquals("foo", testMojo.properties.get("bar"));
160     }
161 
162     @Test
163     public void testSessionPropertiesOverrideProjectProperties() {
164         Properties projectProperties = new Properties();
165         projectProperties.put("foo", "bar");
166         Model model = new Model();
167         model.setProperties(projectProperties);
168         testMojo.project = new MavenProject(model);
169         MavenSession session = mock(MavenSession.class);
170         Properties sessionProperties = new Properties();
171         sessionProperties.put("foo", "baz");
172         sessionProperties.put("bar", "foo");
173         doReturn(sessionProperties).when(session).getUserProperties();
174         testMojo.session = session;
175         testMojo.bindAllProjectProperties = true;
176         testMojo.bindSessionUserOverrideProperties = true;
177 
178         testMojo.initializeProperties();
179         assertEquals("baz", testMojo.properties.get("foo"));
180         assertNull(testMojo.properties.get("bar"));
181     }
182 
183     protected static class TestMojo extends AbstractToolsMojo {
184         @Override
185         public void execute() {
186         }
187     }
188 
189 }