View Javadoc
1   package org.apache.maven.plugins.invoker;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
5    * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
7    * License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
8    * applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
9    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
10   * governing permissions and limitations under the License.
11   */
12  
13  import java.io.File;
14  import java.util.Arrays;
15  import java.util.Collections;
16  import java.util.Properties;
17  
18  import org.apache.maven.plugins.invoker.InvokerProperties;
19  import org.apache.maven.shared.invoker.DefaultInvocationRequest;
20  import org.apache.maven.shared.invoker.InvocationRequest;
21  
22  import junit.framework.TestCase;
23  
24  /**
25   * Tests the invoker properties facade.
26   *
27   * @author Benjamin Bentmann
28   */
29  public class InvokerPropertiesTest
30      extends TestCase
31  {
32  
33      public void testConstructorNullSafe()
34          throws Exception
35      {
36          InvokerProperties facade = new InvokerProperties( null );
37          assertNotNull( facade.getProperties() );
38      }
39  
40      public void testGetInvokerProperty()
41          throws Exception
42      {
43          Properties props = new Properties();
44          InvokerProperties facade = new InvokerProperties( props );
45  
46          assertNull( facade.get( "undefined-key", 0 ) );
47  
48          props.setProperty( "key", "value" );
49          assertEquals( "value", facade.get( "key", 1 ) );
50  
51          props.setProperty( "key.1", "another-value" );
52          assertEquals( "another-value", facade.get( "key", 1 ) );
53          assertEquals( "value", facade.get( "key", 2 ) );
54      }
55  
56      public void testGetJobName()
57          throws Exception
58      {
59          Properties props = new Properties();
60          final String jobName = "Build Job name";
61          props.put( "invoker.name", jobName );
62          InvokerProperties facade = new InvokerProperties( props );
63  
64          assertEquals( jobName, facade.getJobName() );
65      }
66  
67      public void testIsExpectedResult()
68          throws Exception
69      {
70          Properties props = new Properties();
71          InvokerProperties facade = new InvokerProperties( props );
72  
73          assertTrue( facade.isExpectedResult( 0, 0 ) );
74          assertFalse( facade.isExpectedResult( 1, 0 ) );
75  
76          props.setProperty( "invoker.buildResult", "success" );
77          assertTrue( facade.isExpectedResult( 0, 0 ) );
78          assertFalse( facade.isExpectedResult( 1, 0 ) );
79  
80          props.setProperty( "invoker.buildResult", "failure" );
81          assertFalse( facade.isExpectedResult( 0, 0 ) );
82          assertTrue( facade.isExpectedResult( 1, 0 ) );
83      }
84  
85      public void testConfigureRequestGoals()
86          throws Exception
87      {
88          Properties props = new Properties();
89          InvokerProperties facade = new InvokerProperties( props );
90  
91          InvocationRequest request = new DefaultInvocationRequest();
92  
93          request.setGoals( Collections.singletonList( "test" ) );
94          facade.configureInvocation( request, 0 );
95          assertEquals( Collections.singletonList( "test" ), request.getGoals() );
96  
97          props.setProperty( "invoker.goals", "verify" );
98          facade.configureInvocation( request, 0 );
99          assertEquals( Collections.singletonList( "verify" ), request.getGoals() );
100 
101         props.setProperty( "invoker.goals", "   " );
102         facade.configureInvocation( request, 0 );
103         assertEquals( Arrays.asList( new String[0] ), request.getGoals() );
104 
105         props.setProperty( "invoker.goals", "  clean , test   verify  " );
106         facade.configureInvocation( request, 0 );
107         assertEquals( Arrays.asList( new String[] { "clean", "test", "verify" } ), request.getGoals() );
108 
109         props.setProperty( "invoker.goals", "" );
110         facade.configureInvocation( request, 0 );
111         assertEquals( Arrays.asList( new String[0] ), request.getGoals() );
112     }
113 
114     public void testConfigureRequestProfiles()
115         throws Exception
116     {
117         Properties props = new Properties();
118         InvokerProperties facade = new InvokerProperties( props );
119 
120         InvocationRequest request = new DefaultInvocationRequest();
121 
122         request.setProfiles( Collections.singletonList( "test" ) );
123         facade.configureInvocation( request, 0 );
124         assertEquals( Collections.singletonList( "test" ), request.getProfiles() );
125 
126         props.setProperty( "invoker.profiles", "verify" );
127         facade.configureInvocation( request, 0 );
128         assertEquals( Collections.singletonList( "verify" ), request.getProfiles() );
129 
130         props.setProperty( "invoker.profiles", "   " );
131         facade.configureInvocation( request, 0 );
132         assertEquals( Arrays.asList( new String[0] ), request.getProfiles() );
133 
134         props.setProperty( "invoker.profiles", "  clean , test   verify  ," );
135         facade.configureInvocation( request, 0 );
136         assertEquals( Arrays.asList( new String[] { "clean", "test", "verify" } ), request.getProfiles() );
137 
138         props.setProperty( "invoker.profiles", "" );
139         facade.configureInvocation( request, 0 );
140         assertEquals( Arrays.asList( new String[0] ), request.getProfiles() );
141     }
142 
143     public void testConfigureRequestProject()
144         throws Exception
145     {
146         Properties props = new Properties();
147         InvokerProperties facade = new InvokerProperties( props );
148 
149         InvocationRequest request = new DefaultInvocationRequest();
150 
151         File tempPom = File.createTempFile( "maven-invoker-plugin-test", ".pom" );
152         File tempDir = tempPom.getParentFile();
153 
154         request.setBaseDirectory( tempDir );
155         facade.configureInvocation( request, 0 );
156         assertEquals( tempDir, request.getBaseDirectory() );
157         assertEquals( null, request.getPomFile() );
158 
159         props.setProperty( "invoker.project", tempPom.getName() );
160         request.setBaseDirectory( tempDir );
161         facade.configureInvocation( request, 0 );
162         assertEquals( tempDir, request.getBaseDirectory() );
163         assertEquals( tempPom, request.getPomFile() );
164 
165         props.setProperty( "invoker.project", "" );
166         request.setBaseDirectory( tempDir );
167         facade.configureInvocation( request, 0 );
168         assertEquals( tempDir, request.getBaseDirectory() );
169         assertEquals( null, request.getPomFile() );
170 
171         tempPom.delete();
172     }
173 
174     public void testConfigureRequestMavenOpts()
175         throws Exception
176     {
177         Properties props = new Properties();
178         InvokerProperties facade = new InvokerProperties( props );
179 
180         InvocationRequest request = new DefaultInvocationRequest();
181 
182         request.setMavenOpts( "default" );
183         facade.configureInvocation( request, 0 );
184         assertEquals( "default", request.getMavenOpts() );
185 
186         props.setProperty( "invoker.mavenOpts", "-Xmx512m" );
187         facade.configureInvocation( request, 0 );
188         assertEquals( "-Xmx512m", request.getMavenOpts() );
189     }
190 
191     public void testConfigureRequestFailureBehavior()
192         throws Exception
193     {
194         Properties props = new Properties();
195         InvokerProperties facade = new InvokerProperties( props );
196 
197         InvocationRequest request = new DefaultInvocationRequest();
198 
199         request.setReactorFailureBehavior( InvocationRequest.ReactorFailureBehavior.FailAtEnd );
200         facade.configureInvocation( request, 0 );
201         assertEquals( InvocationRequest.ReactorFailureBehavior.FailAtEnd, request.getReactorFailureBehavior() );
202 
203         props.setProperty( "invoker.failureBehavior", InvocationRequest.ReactorFailureBehavior.FailNever.getLongOption() );
204         facade.configureInvocation( request, 0 );
205         assertEquals( "fail-never", request.getReactorFailureBehavior().getLongOption() );
206     }
207 
208     public void testConfigureRequestRecursion()
209         throws Exception
210     {
211         Properties props = new Properties();
212         InvokerProperties facade = new InvokerProperties( props );
213 
214         InvocationRequest request = new DefaultInvocationRequest();
215 
216         request.setRecursive( true );
217         facade.configureInvocation( request, 0 );
218         assertTrue( request.isRecursive() );
219         request.setRecursive( false );
220         facade.configureInvocation( request, 0 );
221         assertFalse( request.isRecursive() );
222 
223         props.setProperty( "invoker.nonRecursive", "true" );
224         facade.configureInvocation( request, 0 );
225         assertFalse( request.isRecursive() );
226 
227         props.setProperty( "invoker.nonRecursive", "false" );
228         facade.configureInvocation( request, 0 );
229         assertTrue( request.isRecursive() );
230     }
231 
232     public void testConfigureRequestOffline()
233         throws Exception
234     {
235         Properties props = new Properties();
236         InvokerProperties facade = new InvokerProperties( props );
237 
238         InvocationRequest request = new DefaultInvocationRequest();
239 
240         request.setOffline( true );
241         facade.configureInvocation( request, 0 );
242         assertTrue( request.isOffline() );
243         request.setOffline( false );
244         facade.configureInvocation( request, 0 );
245         assertFalse( request.isOffline() );
246 
247         props.setProperty( "invoker.offline", "true" );
248         facade.configureInvocation( request, 0 );
249         assertTrue( request.isOffline() );
250 
251         props.setProperty( "invoker.offline", "false" );
252         facade.configureInvocation( request, 0 );
253         assertFalse( request.isOffline() );
254     }
255 
256     public void testIsInvocationDefined()
257         throws Exception
258     {
259         Properties props = new Properties();
260         InvokerProperties facade = new InvokerProperties( props );
261 
262         assertFalse( facade.isInvocationDefined( 1 ) );
263 
264         props.setProperty( "invoker.goals", "install" );
265         assertFalse( facade.isInvocationDefined( 1 ) );
266 
267         props.setProperty( "invoker.goals.2", "install" );
268         assertFalse( facade.isInvocationDefined( 1 ) );
269         assertTrue( facade.isInvocationDefined( 2 ) );
270         assertFalse( facade.isInvocationDefined( 3 ) );
271 
272         props.setProperty( "invoker.goals.3", "install" );
273         assertFalse( facade.isInvocationDefined( 1 ) );
274         assertTrue( facade.isInvocationDefined( 2 ) );
275         assertTrue( facade.isInvocationDefined( 3 ) );
276         assertFalse( facade.isInvocationDefined( 4 ) );
277     }
278     
279     public void testIsSelectedDefined()
280     {
281         Properties props = new Properties();
282         InvokerProperties facade = new InvokerProperties( props );
283 
284         assertFalse( facade.isSelectorDefined( 1 ) );
285 
286         props.setProperty( "invoker.java.version", "1.6+" );
287         props.setProperty( "invoker.maven.version", "3.0+" );
288         props.setProperty( "invoker.os.family", "windows" );
289         assertFalse( facade.isSelectorDefined( 1 ) );
290 
291         props.setProperty( "selector.2.java.version", "1.6+" );
292         props.setProperty( "selector.3.maven.version", "3.0+" );
293         props.setProperty( "selector.4.os.family", "windows" );
294         assertFalse( facade.isSelectorDefined( 1 ) );
295         assertTrue( facade.isSelectorDefined( 2 ) );
296         assertTrue( facade.isSelectorDefined( 3 ) );
297         assertTrue( facade.isSelectorDefined( 4 ) );
298         assertFalse( facade.isSelectorDefined( 5 ) );
299     }
300 }