View Javadoc
1   /*
2    * Copyright 2014 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * You may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.codehaus.gmavenplus.mojo;
18  
19  import org.apache.maven.artifact.Artifact;
20  import org.apache.maven.execution.MavenSession;
21  import org.apache.maven.model.Model;
22  import org.apache.maven.plugin.MojoExecution;
23  import org.apache.maven.project.MavenProject;
24  import org.codehaus.gmavenplus.util.ClassWrangler;
25  import org.junit.Before;
26  import org.junit.Test;
27  import org.mockito.Mock;
28  import org.mockito.MockitoAnnotations;
29  import org.mockito.Spy;
30  
31  import java.util.List;
32  import java.util.Properties;
33  
34  import static org.junit.Assert.*;
35  import static org.mockito.Mockito.*;
36  
37  
38  /**
39   * Unit tests for the AbstractToolsMojo class.
40   *
41   * @author Keegan Witt
42   */
43  public class AbstractToolsMojoTest {
44      private TestMojo testMojo;
45      @Spy
46      private Properties properties;
47      @Mock
48      private MavenProject project;
49      @Mock
50      private MavenSession session;
51      @Mock
52      private List<Artifact> pluginArtifacts;
53      @Mock
54      private MojoExecution mojoExecution;
55      @Mock
56      private ClassWrangler classWrangler;
57  
58      @Before
59      public void setup() throws Exception {
60          MockitoAnnotations.openMocks(this);
61          testMojo = new TestMojo();
62          testMojo.project = project;
63          testMojo.session = session;
64          testMojo.pluginArtifacts = pluginArtifacts;
65          testMojo.mojoExecution = mojoExecution;
66          testMojo.classWrangler = classWrangler;
67          Class<?> antBuilderClass;
68          try {
69              antBuilderClass = Class.forName("groovy.ant.AntBuilder");
70          } catch (ClassNotFoundException e) {
71              antBuilderClass = Class.forName("groovy.util.AntBuilder");
72          }
73  
74          doReturn(antBuilderClass).when(classWrangler).getClass(anyString());
75      }
76  
77      @Test
78      public void testInitializeProperties() {
79          testMojo.initializeProperties();
80  
81          assertNotNull(testMojo.properties.get("project"));
82          assertNotNull(testMojo.properties.get("session"));
83          assertNotNull(testMojo.properties.get("pluginArtifacts"));
84          assertNotNull(testMojo.properties.get("mojoExecution"));
85      }
86  
87      @Test
88      public void testInitializePropertiesNull() {
89          testMojo.project = null;
90          testMojo.session = null;
91          testMojo.pluginArtifacts = null;
92          testMojo.mojoExecution = mojoExecution;
93  
94          testMojo.initializeProperties();
95  
96          verify(properties, never()).put(eq("project"), any(MavenProject.class));
97          verify(properties, never()).put(eq("session"), any(MavenSession.class));
98          verify(properties, never()).put(eq("pluginArtifacts"), anyList());
99          verify(properties, never()).put(eq("mojoExecution"), any(MojoExecution.class));
100     }
101 
102     @Test
103     public void testInitializePropertiesAlreadyInProps() {
104         testMojo.properties = properties;
105 
106         testMojo.initializeProperties();
107         testMojo.initializeProperties();
108 
109         verify(properties, times(1)).put(eq("project"), any(MavenProject.class));
110         verify(properties, times(1)).put(eq("session"), any(MavenSession.class));
111         verify(properties, times(1)).put(eq("pluginArtifacts"), anyList());
112         verify(properties, times(1)).put(eq("mojoExecution"), any(MojoExecution.class));
113     }
114 
115     @Test
116     public void testAddAllProjectProperties() {
117         Properties projectProperties = new Properties();
118         projectProperties.put("foo", "bar");
119         Model model = new Model();
120         model.setProperties(projectProperties);
121         testMojo.project = new MavenProject(model);
122         testMojo.bindAllProjectProperties = true;
123 
124         testMojo.initializeProperties();
125 
126         assertEquals("bar", testMojo.properties.get("foo"));
127     }
128 
129     @Test
130     public void testAddAllSessionUserProperties() {
131         MavenSession session = mock(MavenSession.class);
132         Properties sessionProperties = new Properties();
133         sessionProperties.put("foo", "bar");
134         doReturn(sessionProperties).when(session).getUserProperties();
135         testMojo.session = session;
136         testMojo.bindAllSessionUserProperties = true;
137 
138         testMojo.initializeProperties();
139 
140         assertEquals("bar", testMojo.properties.get("foo"));
141     }
142 
143     @Test
144     public void testBindAllProjectPropertiesAndBindSessionUserOverridePropertiesWhenEmpty() {
145         MavenSession session = mock(MavenSession.class);
146         Properties projectProperties = new Properties();
147         projectProperties.put("foo", "bar");
148         doReturn(new Properties()).when(session).getUserProperties();
149         doReturn(projectProperties).when(project).getProperties();
150         testMojo.session = session;
151         testMojo.bindAllProjectProperties = true;
152         testMojo.bindSessionUserOverrideProperties = true;
153 
154         testMojo.initializeProperties();
155     }
156 
157     @Test
158     public void testSessionPropertiesOverrideProjectPropertiesAndIncludesOthers() {
159         Properties projectProperties = new Properties();
160         projectProperties.put("foo", "bar");
161         Model model = new Model();
162         model.setProperties(projectProperties);
163         testMojo.project = new MavenProject(model);
164         MavenSession session = mock(MavenSession.class);
165         Properties sessionProperties = new Properties();
166         sessionProperties.put("foo", "baz");
167         sessionProperties.put("bar", "foo");
168         doReturn(sessionProperties).when(session).getUserProperties();
169         testMojo.session = session;
170         testMojo.bindAllProjectProperties = true;
171         testMojo.bindAllSessionUserProperties = true;
172 
173         testMojo.initializeProperties();
174         assertEquals("baz", testMojo.properties.get("foo"));
175         assertEquals("foo", testMojo.properties.get("bar"));
176     }
177 
178     @Test
179     public void testSessionPropertiesOverrideProjectProperties() {
180         Properties projectProperties = new Properties();
181         projectProperties.put("foo", "bar");
182         Model model = new Model();
183         model.setProperties(projectProperties);
184         testMojo.project = new MavenProject(model);
185         MavenSession session = mock(MavenSession.class);
186         Properties sessionProperties = new Properties();
187         sessionProperties.put("foo", "baz");
188         sessionProperties.put("bar", "foo");
189         doReturn(sessionProperties).when(session).getUserProperties();
190         testMojo.session = session;
191         testMojo.bindAllProjectProperties = true;
192         testMojo.bindSessionUserOverrideProperties = true;
193 
194         testMojo.initializeProperties();
195         assertEquals("baz", testMojo.properties.get("foo"));
196         assertNull(testMojo.properties.get("bar"));
197     }
198 
199     protected static class TestMojo extends AbstractToolsMojo {
200         @Override
201         public void execute() {
202         }
203     }
204 
205 }