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.mockito.Matchers.argThat;
23 import static org.mockito.Matchers.isA;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.verifyNoMoreInteractions;
27 import static org.mockito.Mockito.when;
28
29 import java.io.File;
30 import java.io.IOException;
31 import java.util.ArrayList;
32 import java.util.Collections;
33 import java.util.Iterator;
34 import java.util.List;
35
36 import org.apache.maven.Maven;
37 import org.apache.maven.project.MavenProject;
38 import org.apache.maven.scm.ScmFile;
39 import org.apache.maven.scm.ScmFileSet;
40 import org.apache.maven.scm.ScmFileStatus;
41 import org.apache.maven.scm.command.add.AddScmResult;
42 import org.apache.maven.scm.manager.ScmManager;
43 import org.apache.maven.scm.manager.ScmManagerStub;
44 import org.apache.maven.scm.provider.ScmProvider;
45 import org.apache.maven.scm.repository.ScmRepository;
46 import org.apache.maven.shared.release.config.ReleaseDescriptor;
47 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
48 import org.apache.maven.shared.release.util.ReleaseUtil;
49
50
51
52
53
54
55 public class GenerateReleasePomsPhaseTest
56 extends AbstractRewritingReleasePhaseTestCase
57 {
58 private static final String NEXT_VERSION = "1.0";
59
60 private static final String ALTERNATIVE_NEXT_VERSION = "2.0";
61
62 private ScmProvider scmProviderMock;
63
64 protected void setUp()
65 throws Exception
66 {
67 super.setUp();
68
69 phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "generate-release-poms" );
70 scmProviderMock = null;
71 }
72
73
74
75
76
77
78
79
80
81
82
83
84 public void testRewriteExternalRangeDependency() throws Exception
85 {
86 List<MavenProject> reactorProjects = createReactorProjects( "external-range-dependency" );
87 ReleaseDescriptor config = createMappedConfiguration( reactorProjects );
88
89 phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
90
91 comparePomFiles( reactorProjects );
92 }
93
94
95
96
97 protected ReleaseDescriptor createDescriptorFromProjects( List<MavenProject> reactorProjects )
98 {
99 ReleaseDescriptor descriptor = super.createDescriptorFromProjects( reactorProjects );
100 descriptor.setScmReleaseLabel( "release-label" );
101 descriptor.setGenerateReleasePoms( true );
102 return descriptor;
103 }
104
105
106
107
108
109 protected List<MavenProject> prepareReactorProjects( String path, boolean copyFiles ) throws Exception
110 {
111 List<MavenProject> reactorProjects = createReactorProjects( "generate-release-poms/", path );
112
113 scmProviderMock = mock( ScmProvider.class );
114
115 List<File> releasePoms = new ArrayList<File>();
116
117 for ( Iterator<MavenProject> iterator = reactorProjects.iterator(); iterator.hasNext(); )
118 {
119 MavenProject project = iterator.next();
120
121 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
122 }
123
124 MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
125 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), releasePoms );
126
127 when( scmProviderMock.add( isA( ScmRepository.class ),
128 argThat( new IsScmFileSetEquals( fileSet ) ) ) ).
129 thenReturn( new AddScmResult( "...",
130 Collections.singletonList( new ScmFile( Maven.RELEASE_POMv4, ScmFileStatus.ADDED ) ) ) );
131
132
133 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
134 stub.setScmProvider( scmProviderMock );
135
136 return reactorProjects;
137 }
138
139 @Override
140 protected void verifyReactorProjects( String path, boolean copyFiles ) throws Exception
141 {
142 List<MavenProject> reactorProjects = createReactorProjects( "generate-release-poms/", path );
143
144 List<File> releasePoms = new ArrayList<File>();
145
146 for ( Iterator<MavenProject> iterator = reactorProjects.iterator(); iterator.hasNext(); )
147 {
148 MavenProject project = iterator.next();
149
150 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
151 }
152
153 MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
154 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), releasePoms );
155
156 verify( scmProviderMock ).add( isA( ScmRepository.class ),
157 argThat( new IsScmFileSetEquals( fileSet ) ) );
158 verifyNoMoreInteractions( scmProviderMock );
159 }
160
161
162
163
164
165 protected void mapNextVersion( ReleaseDescriptor config, String projectId )
166 {
167 config.mapReleaseVersion( projectId, NEXT_VERSION );
168 }
169
170
171
172
173
174 protected void mapAlternateNextVersion( ReleaseDescriptor config, String projectId )
175 {
176 config.mapReleaseVersion( projectId, ALTERNATIVE_NEXT_VERSION );
177 }
178
179
180
181
182
183 protected void unmapNextVersion( ReleaseDescriptor config, String projectId )
184 {
185
186 }
187
188
189
190
191 protected ReleaseDescriptor createConfigurationForPomWithParentAlternateNextVersion( List<MavenProject> reactorProjects )
192 throws Exception
193 {
194 ReleaseDescriptor config = createDescriptorFromProjects( reactorProjects );
195
196 config.mapReleaseVersion( "groupId:artifactId", NEXT_VERSION );
197 config.mapReleaseVersion( "groupId:subproject1", ALTERNATIVE_NEXT_VERSION );
198
199 return config;
200 }
201
202
203
204
205 protected ReleaseDescriptor createConfigurationForWithParentNextVersion( List<MavenProject> reactorProjects ) throws Exception
206 {
207 ReleaseDescriptor config = createDescriptorFromProjects( reactorProjects );
208
209 config.mapReleaseVersion( "groupId:artifactId", NEXT_VERSION );
210 config.mapReleaseVersion( "groupId:subproject1", NEXT_VERSION );
211
212 return config;
213 }
214
215
216
217
218 protected String readTestProjectFile( String fileName ) throws IOException
219 {
220 return ReleaseUtil.readXmlFile( getTestFile( "target/test-classes/projects/generate-release-poms/" + fileName ) );
221 }
222
223
224
225
226
227 protected void comparePomFiles( MavenProject project, String expectedFileSuffix, boolean normalizeLineEndings )
228 throws IOException
229 {
230 File actualFile = ReleaseUtil.getReleasePom( project );
231 File expectedFile = new File( actualFile.getParentFile(), "expected-release-pom" + expectedFileSuffix + ".xml" );
232
233 comparePomFiles( expectedFile, actualFile, normalizeLineEndings );
234 }
235 }