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.BufferedReader;
30 import java.io.File;
31 import java.io.StringReader;
32 import java.util.ArrayList;
33 import java.util.Collections;
34 import java.util.Iterator;
35 import java.util.List;
36
37 import org.apache.maven.Maven;
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.remove.RemoveScmResult;
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.ReleaseResult;
48 import org.apache.maven.shared.release.config.ReleaseDescriptor;
49 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
50 import org.apache.maven.shared.release.util.ReleaseUtil;
51 import org.codehaus.plexus.util.IOUtil;
52
53
54
55
56
57
58 public class RemoveReleasePomsPhaseTest
59 extends AbstractReleaseTestCase
60 {
61 protected void setUp()
62 throws Exception
63 {
64 super.setUp();
65
66 phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "remove-release-poms" );
67 }
68
69 public void testExecuteBasicPom()
70 throws Exception
71 {
72
73 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
74 ReleaseDescriptor config = createReleaseDescriptor();
75 MavenProject project = ReleaseUtil.getRootProject( reactorProjects );
76
77 File releasePom = ReleaseUtil.getReleasePom( project );
78 ScmFileSet fileSet = new ScmFileSet( new File( config.getWorkingDirectory() ), releasePom );
79
80 ScmProvider scmProviderMock = mock( ScmProvider.class );
81 when( scmProviderMock.remove( isA( ScmRepository.class ),
82 argThat( new IsScmFileSetEquals( fileSet ) ),
83 isA( String.class ) ) ).thenReturn( new RemoveScmResult( "...", Collections
84 .singletonList( new ScmFile( Maven.RELEASE_POMv4, ScmFileStatus.DELETED ) ) ) );
85
86 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
87 stub.setScmProvider( scmProviderMock );
88
89
90 phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
91
92
93 verify( scmProviderMock ).remove( isA( ScmRepository.class ),
94 argThat( new IsScmFileSetEquals( fileSet ) ),
95 isA( String.class ) );
96 verifyNoMoreInteractions( scmProviderMock );
97 }
98
99 public void testExecutePomWithModules()
100 throws Exception
101 {
102
103 List<MavenProject> reactorProjects = createReactorProjects( "pom-with-modules" );
104 ReleaseDescriptor config = createReleaseDescriptor();
105
106 List<File> releasePoms = new ArrayList<File>();
107 for ( Iterator<MavenProject> iterator = reactorProjects.iterator(); iterator.hasNext(); )
108 {
109 MavenProject project = iterator.next();
110 File releasePom = ReleaseUtil.getReleasePom( project );
111 releasePoms.add( releasePom );
112 }
113
114 ScmFileSet fileSet = new ScmFileSet( new File( config.getWorkingDirectory() ), releasePoms );
115
116 ScmProvider scmProviderMock = mock( ScmProvider.class );
117 when( scmProviderMock.remove( isA( ScmRepository.class ),
118 argThat( new IsScmFileSetEquals( fileSet ) ),
119 isA( String.class ) ) ).thenReturn( new RemoveScmResult( "...", Collections
120 .singletonList( new ScmFile( Maven.RELEASE_POMv4, ScmFileStatus.DELETED ) ) ) );
121
122 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
123 stub.setScmProvider( scmProviderMock );
124
125
126 phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
127
128
129 verify( scmProviderMock ).remove( isA( ScmRepository.class ),
130 argThat( new IsScmFileSetEquals( fileSet ) ),
131 isA( String.class ) );
132 verifyNoMoreInteractions( scmProviderMock );
133 }
134
135 public void testSimulateBasicPom()
136 throws Exception
137 {
138
139 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
140 ReleaseDescriptor config = createReleaseDescriptor();
141
142 ScmProvider scmProviderMock = mock( ScmProvider.class );
143
144 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
145 stub.setScmProvider( scmProviderMock );
146
147
148 phase.simulate( config, new DefaultReleaseEnvironment(), reactorProjects );
149
150
151 verifyNoMoreInteractions( scmProviderMock );
152 }
153
154 public void testExecuteWithSuppressCommitBeforeTag() throws Exception
155 {
156
157 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
158 ReleaseDescriptor config = createReleaseDescriptor();
159 config.setSuppressCommitBeforeTagOrBranch( true );
160 config.setGenerateReleasePoms( true );
161
162 ScmProvider scmProviderMock = mock( ScmProvider.class );
163
164 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
165 stub.setScmProvider( scmProviderMock );
166
167
168 ReleaseResult result = phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
169
170 BufferedReader reader = null;
171 try
172 {
173 reader = new BufferedReader( new StringReader( result.getOutput() ) );
174
175 assertEquals( "[INFO] Removing release POM for 'Unnamed - groupId:artifactId:jar:1.0-SNAPSHOT'..." , reader.readLine() );
176 assertEquals( "Expected EOF", null, reader.readLine() );
177 }
178 finally
179 {
180 IOUtil.close( reader );
181 }
182
183
184 verifyNoMoreInteractions( scmProviderMock );
185 }
186
187 public void testSimulateWithSuppressCommitBeforeTag() throws Exception
188 {
189
190 List<MavenProject> reactorProjects = createReactorProjects( "basic-pom" );
191 ReleaseDescriptor config = createReleaseDescriptor();
192 config.setSuppressCommitBeforeTagOrBranch( true );
193 config.setGenerateReleasePoms( true );
194
195 ScmProvider scmProviderMock = mock( ScmProvider.class );
196
197 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
198 stub.setScmProvider( scmProviderMock );
199
200
201 ReleaseResult result = phase.simulate( config, new DefaultReleaseEnvironment(), reactorProjects );
202
203 BufferedReader reader = null;
204 try
205 {
206 reader = new BufferedReader( new StringReader( result.getOutput() ) );
207
208 assertEquals( "[INFO] Removing release POM for 'Unnamed - groupId:artifactId:jar:1.0-SNAPSHOT'..." , reader.readLine() );
209 assertEquals( "[INFO] Full run would be removing [" + reactorProjects.get( 0 ).getFile().getParent() + File.separator + "release-pom.xml]", reader.readLine() );
210 assertEquals( "Expected EOF", null, reader.readLine() );
211 }
212 finally
213 {
214 IOUtil.close( reader );
215 }
216
217
218 verifyNoMoreInteractions( scmProviderMock );
219 }
220
221 private List<MavenProject> createReactorProjects( String path )
222 throws Exception
223 {
224 return createReactorProjects( "remove-release-poms/", path );
225 }
226
227 private ReleaseDescriptor createReleaseDescriptor()
228 {
229 ReleaseDescriptor descriptor = new ReleaseDescriptor();
230 descriptor.setGenerateReleasePoms( true );
231 descriptor.setWorkingDirectory( getTestFile( "target/test/checkout" ).getAbsolutePath() );
232 return descriptor;
233 }
234 }