1 package org.apache.maven.shared.release.phase;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.assertTrue;
23
24 import static org.mockito.Matchers.argThat;
25 import static org.mockito.Matchers.isA;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.verifyNoMoreInteractions;
29 import static org.mockito.Mockito.when;
30
31 import java.io.File;
32 import java.io.IOException;
33 import java.util.ArrayList;
34 import java.util.Collections;
35 import java.util.Iterator;
36 import java.util.List;
37
38 import org.apache.maven.project.MavenProject;
39 import org.apache.maven.scm.ScmFile;
40 import org.apache.maven.scm.ScmFileSet;
41 import org.apache.maven.scm.ScmFileStatus;
42 import org.apache.maven.scm.command.add.AddScmResult;
43 import org.apache.maven.scm.manager.ScmManager;
44 import org.apache.maven.scm.manager.ScmManagerStub;
45 import org.apache.maven.scm.provider.ScmProvider;
46 import org.apache.maven.scm.repository.ScmRepository;
47 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
48 import org.apache.maven.shared.release.config.ReleaseUtils;
49 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
50 import org.apache.maven.shared.release.util.ReleaseUtil;
51 import org.junit.Test;
52
53
54
55
56
57
58 public class GenerateReleasePomsPhaseTest
59 extends AbstractRewritingReleasePhaseTestCase
60 {
61 private static final String NEXT_VERSION = "1.0";
62
63 private static final String ALTERNATIVE_NEXT_VERSION = "2.0";
64
65 private ScmProvider scmProviderMock;
66
67 public GenerateReleasePomsPhaseTest( String modelETL )
68 {
69 super( modelETL );
70 }
71
72 @Override
73 public void setUp()
74 throws Exception
75 {
76 super.setUp();
77
78 scmProviderMock = null;
79 }
80
81 @Override
82 protected String getRoleHint()
83 {
84 return "generate-release-poms";
85 }
86
87
88
89
90
91
92
93
94
95
96
97
98 @Test
99 public void testRewriteExternalRangeDependency()
100 throws Exception
101 {
102 List<MavenProject> reactorProjects = createReactorProjects( "external-range-dependency" );
103 ReleaseDescriptorBuilder builder = createMappedConfiguration( reactorProjects, "external-range-dependency" );
104
105 phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
106
107 comparePomFiles( reactorProjects );
108 }
109
110
111 @Test
112 public void testSuppressCommitBeforeTagOrBranch()
113 throws Exception
114 {
115 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
116 ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
117 builder.setGenerateReleasePoms( true );
118 builder.setSuppressCommitBeforeTagOrBranch( true );
119 builder.setRemoteTagging( false );
120 builder.setPinExternals( false );
121 mapNextVersion( builder, "groupId:artifactId" );
122
123 phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
124
125 verify( scmProviderMock ).add( isA( ScmRepository.class ), isA( ScmFileSet.class ) );
126
127 verifyNoMoreInteractions( scmProviderMock );
128 }
129
130 @Test
131 public void testSuppressCommitBeforeTagOrBranchAndReomoteTagging()
132 throws Exception
133 {
134 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
135 ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
136 builder.setGenerateReleasePoms( true );
137 builder.setSuppressCommitBeforeTagOrBranch( true );
138 builder.setRemoteTagging( true );
139 builder.setPinExternals( false );
140 mapNextVersion( builder, "groupId:artifactId" );
141
142 phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
143
144 verify( scmProviderMock ).add( isA( ScmRepository.class ), isA( ScmFileSet.class ) );
145
146 verifyNoMoreInteractions( scmProviderMock );
147 }
148
149
150 @Test
151 public void testFinalName()
152 throws Exception
153 {
154 List<MavenProject> reactorProjects = createReactorProjects( "pom-with-finalname" );
155 ReleaseDescriptorBuilder builder = createConfigurationForWithParentNextVersion( reactorProjects, "pom-with-finalname" );
156 builder.setGenerateReleasePoms( true );
157
158 phase.execute( ReleaseUtils.buildReleaseDescriptor( builder ), new DefaultReleaseEnvironment(), reactorProjects );
159
160 assertTrue( comparePomFiles( reactorProjects ) );
161 }
162
163
164
165
166
167
168 @Override
169 protected ReleaseDescriptorBuilder createDescriptorFromProjects( List<MavenProject> reactorProjects, String workingDirectory )
170 {
171 ReleaseDescriptorBuilder builder = super.createDescriptorFromProjects( reactorProjects, workingDirectory );
172 builder.setScmReleaseLabel( "release-label" );
173 builder.setGenerateReleasePoms( true );
174 return builder;
175 }
176
177
178
179
180
181 @Override
182 protected List<MavenProject> prepareReactorProjects( String path )
183 throws Exception
184 {
185 String dir = "generate-release-poms/" + path;
186 List<MavenProject> reactorProjects = createReactorProjects( dir, dir, null );
187
188 scmProviderMock = mock( ScmProvider.class );
189
190 List<File> releasePoms = new ArrayList<>();
191
192 for ( MavenProject project : reactorProjects )
193 {
194 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
195 }
196
197 MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
198 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), releasePoms );
199
200 when( scmProviderMock.add( isA( ScmRepository.class ),
201 argThat( new IsScmFileSetEquals( fileSet ) ) ) ).thenReturn( new AddScmResult( "...",
202 Collections.singletonList( new ScmFile( "pom.xml", ScmFileStatus.ADDED ) ) ) );
203
204 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.class );
205 stub.setScmProvider( scmProviderMock );
206
207 return reactorProjects;
208 }
209
210 @Override
211 protected void verifyReactorProjects( String path, boolean copyFiles )
212 throws Exception
213 {
214 String dir = "generate-release-poms/"+ path;
215 List<MavenProject> reactorProjects = createReactorProjects( dir, dir, null );
216
217 List<File> releasePoms = new ArrayList<>();
218
219 for ( Iterator<MavenProject> iterator = reactorProjects.iterator(); iterator.hasNext(); )
220 {
221 MavenProject project = iterator.next();
222
223 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
224 }
225
226 MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
227 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), releasePoms );
228
229 verify( scmProviderMock ).add( isA( ScmRepository.class ), argThat( new IsScmFileSetEquals( fileSet ) ) );
230 verifyNoMoreInteractions( scmProviderMock );
231 }
232
233 @Override
234 protected void mapNextVersion( ReleaseDescriptorBuilder config, String projectId )
235 {
236 config.addReleaseVersion( projectId, NEXT_VERSION );
237 }
238
239
240
241
242
243
244 @Override
245 protected void mapAlternateNextVersion( ReleaseDescriptorBuilder config, String projectId )
246 {
247 config.addReleaseVersion( projectId, ALTERNATIVE_NEXT_VERSION );
248 }
249
250
251
252
253
254
255 @Override
256 protected void unmapNextVersion( ReleaseDescriptorBuilder config, String projectId )
257 {
258
259 }
260
261
262
263
264
265 @Override
266 protected ReleaseDescriptorBuilder createConfigurationForPomWithParentAlternateNextVersion( List<MavenProject> reactorProjects, String workingDirectory )
267 throws Exception
268 {
269 ReleaseDescriptorBuilder builder = createDescriptorFromProjects( reactorProjects, workingDirectory );
270
271 builder.addReleaseVersion( "groupId:artifactId", NEXT_VERSION );
272 builder.addReleaseVersion( "groupId:subproject1", ALTERNATIVE_NEXT_VERSION );
273
274 return builder;
275 }
276
277
278
279
280
281 @Override
282 protected ReleaseDescriptorBuilder createConfigurationForWithParentNextVersion( List<MavenProject> reactorProjects, String workingDirectory )
283 throws Exception
284 {
285 ReleaseDescriptorBuilder builder = createDescriptorFromProjects( reactorProjects, workingDirectory );
286
287 builder.addReleaseVersion( "groupId:artifactId", NEXT_VERSION );
288 builder.addReleaseVersion( "groupId:subproject1", NEXT_VERSION );
289
290 return builder;
291 }
292
293
294
295
296
297 @Override
298 protected String readTestProjectFile( String fileName )
299 throws IOException
300 {
301 return ReleaseUtil.readXmlFile( getTestFile( "target/test-classes/projects/generate-release-poms/"
302 + fileName ) );
303 }
304
305
306
307
308
309
310
311 @Override
312 protected void comparePomFiles( MavenProject project, String expectedFileSuffix, boolean normalizeLineEndings )
313 throws IOException
314 {
315 File actualFile = ReleaseUtil.getReleasePom( project );
316 File expectedFile =
317 new File( actualFile.getParentFile(), "expected-release-pom" + expectedFileSuffix + ".xml" );
318
319 comparePomFiles( expectedFile, actualFile, normalizeLineEndings, true );
320 }
321 }