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
24
25
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 }