1 package org.apache.maven.scm.tck.command.checkin;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.ScmFile;
23 import org.apache.maven.scm.ScmFileSet;
24 import org.apache.maven.scm.ScmFileStatus;
25 import org.apache.maven.scm.ScmTckTestCase;
26 import org.apache.maven.scm.command.add.AddScmResult;
27 import org.apache.maven.scm.command.checkin.CheckInScmResult;
28 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
29 import org.apache.maven.scm.provider.ScmProvider;
30 import org.apache.maven.scm.util.FilenameUtils;
31 import org.codehaus.plexus.util.FileUtils;
32 import org.codehaus.plexus.util.IOUtil;
33 import org.junit.Assume;
34 import org.junit.Test;
35
36 import java.io.File;
37 import java.io.FileWriter;
38 import java.io.PrintWriter;
39 import java.util.List;
40 import java.util.Map;
41
42 import static org.junit.Assert.assertEquals;
43 import static org.junit.Assert.assertFalse;
44 import static org.junit.Assert.assertNotNull;
45 import static org.junit.Assert.assertTrue;
46
47
48
49
50
51
52 public abstract class CheckInCommandTckTest
53 extends ScmTckTestCase
54 {
55 @Test
56 public void testCheckInCommandTest()
57 throws Exception
58 {
59
60 File fooJava = new File( getWorkingCopy(), "src/main/java/Foo.java" );
61
62 File barJava = new File( getWorkingCopy(), "src/main/java/Bar.java" );
63
64 File readmeTxt = new File( getWorkingCopy(), "readme.txt" );
65
66 assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() );
67
68 assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() );
69
70 assertTrue( "check can read readme.txt", readmeTxt.canRead() );
71
72
73 createFooJava( fooJava );
74
75 createBarJava( barJava );
76
77 changeReadmeTxt( readmeTxt );
78
79 AddScmResult addResult = getScmManager().add( getScmRepository(),
80 new ScmFileSet( getWorkingCopy(), "src/main/java/Foo.java",
81 null ) );
82
83 assertResultIsSuccess( addResult );
84
85 List<ScmFile> files = addResult.getAddedFiles();
86 assertNotNull( files );
87 assertEquals( 1, files.size() );
88
89 assertEquals( "src/main/java/Foo.java", FilenameUtils.normalizeFilename( files.get( 0 ).getPath() ) );
90
91 CheckInScmResult result =
92 getScmManager().checkIn( getScmRepository(), new ScmFileSet( getWorkingCopy() ), "Commit message" );
93
94 assertResultIsSuccess( result );
95
96 files = result.getCheckedInFiles();
97 assertNotNull( files );
98 assertEquals( 2, files.size() );
99
100 Map<String, ScmFile> fileMap = mapFilesByPath( files );
101 ScmFile file1 = fileMap.get( "src/main/java/Foo.java" );
102 assertNotNull( file1 );
103 assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() );
104
105 ScmFile file2 = fileMap.get( "readme.txt" );
106 assertNotNull( file2 );
107 assertEquals( ScmFileStatus.CHECKED_IN, file2.getStatus() );
108
109 CheckOutScmResult checkoutResult =
110 getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) );
111
112 assertResultIsSuccess( checkoutResult );
113
114 fooJava = new File( getAssertionCopy(), "src/main/java/Foo.java" );
115
116 barJava = new File( getAssertionCopy(), "src/main/java/Bar.java" );
117
118 readmeTxt = new File( getAssertionCopy(), "readme.txt" );
119
120 assertTrue( "check can read Foo.java", fooJava.canRead() );
121
122 assertFalse( "check Bar.java doesn't exist", barJava.canRead() );
123
124 assertTrue( "check can read readme.txt", readmeTxt.canRead() );
125
126 assertEquals( "check readme.txt contents", "changed file", FileUtils.fileRead( readmeTxt ) );
127 }
128
129 @Test
130 public void testCheckInCommandPartialFileset()
131 throws Exception
132 {
133
134 File fooJava = new File( getWorkingCopy(), "src/main/java/Foo.java" );
135
136 File barJava = new File( getWorkingCopy(), "src/main/java/Bar.java" );
137
138 File readmeTxt = new File( getWorkingCopy(), "readme.txt" );
139
140 assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() );
141
142 assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() );
143
144 assertTrue( "check can read readme.txt", readmeTxt.canRead() );
145
146
147 createFooJava( fooJava );
148
149 createBarJava( barJava );
150
151 changeReadmeTxt( readmeTxt );
152
153 AddScmResult addResult =
154 getScmManager().getProviderByUrl( getScmUrl() ).add( getScmRepository(),
155 new ScmFileSet( getWorkingCopy(),
156 "src/main/java/Foo.java", null ) );
157
158 assertResultIsSuccess( addResult );
159
160 CheckInScmResult result =
161 getScmManager().checkIn( getScmRepository(), new ScmFileSet( getWorkingCopy(), "**/Foo.java", null ),
162 "Commit message" );
163
164 assertResultIsSuccess( result );
165
166 List<ScmFile> files = result.getCheckedInFiles();
167 assertNotNull( files );
168 assertEquals( 1, files.size() );
169
170 ScmFile file1 = files.get( 0 );
171 assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() );
172 assertPath( "src/main/java/Foo.java", file1.getPath() );
173
174 CheckOutScmResult checkoutResult =
175 getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) );
176
177 assertResultIsSuccess( checkoutResult );
178
179 fooJava = new File( getAssertionCopy(), "src/main/java/Foo.java" );
180
181 barJava = new File( getAssertionCopy(), "src/main/java/Bar.java" );
182
183 readmeTxt = new File( getAssertionCopy(), "readme.txt" );
184
185 assertTrue( "check can read Foo.java", fooJava.canRead() );
186
187 assertFalse( "check Bar.java doesn't exist", barJava.canRead() );
188
189 assertTrue( "check can read readme.txt", readmeTxt.canRead() );
190
191 assertEquals( "check readme.txt contents", "/readme.txt", FileUtils.fileRead( readmeTxt ) );
192 }
193
194 @Test
195 public void testCheckInCommandFilesetWithBasedirOtherThanWorkingCopyRoot()
196 throws Exception
197 {
198 ScmProvider scmProvider = getScmManager().getProviderByUrl( getScmUrl() );
199
200 Assume.assumeFalse( "Local provider does not properly support basedir",
201 scmProvider.getScmType().equals( "local" ) );
202
203 File fooJava = new File( getWorkingCopy(), "src/main/java/Foo.java" );
204
205 assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() );
206
207
208 createFooJava( fooJava );
209
210 AddScmResult addResult =
211 scmProvider.add( getScmRepository(), new ScmFileSet( new File( getWorkingCopy(), "src" ),
212 "main/java/Foo.java", null ) );
213
214 assertResultIsSuccess( addResult );
215
216 List<ScmFile> files = addResult.getAddedFiles();
217 assertNotNull( files );
218 assertEquals( 1, files.size() );
219
220 assertEquals( "main/java/Foo.java", FilenameUtils.normalizeFilename( files.get( 0 ).getPath() ) );
221
222 CheckInScmResult result =
223 getScmManager().checkIn( getScmRepository(), new ScmFileSet( new File( getWorkingCopy(), "src" ),
224 "**/Foo.java", null ),
225 "Commit message" );
226
227 assertResultIsSuccess( result );
228
229 files = result.getCheckedInFiles();
230 assertNotNull( files );
231 assertEquals( 1, files.size() );
232
233 ScmFile file1 = files.get( 0 );
234 assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() );
235 assertPath( "main/java/Foo.java", file1.getPath() );
236
237 CheckOutScmResult checkoutResult =
238 getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) );
239
240 assertResultIsSuccess( checkoutResult );
241
242 fooJava = new File( getAssertionCopy(), "src/main/java/Foo.java" );
243
244 assertTrue( "check can read Foo.java", fooJava.canRead() );
245
246 }
247
248 private void createFooJava( File fooJava )
249 throws Exception
250 {
251 FileWriter output = new FileWriter( fooJava );
252
253 PrintWriter printer = new PrintWriter( output );
254 try
255 {
256 printer.println( "public class Foo" );
257 printer.println( "{" );
258
259 printer.println( " public void foo()" );
260 printer.println( " {" );
261 printer.println( " int i = 10;" );
262 printer.println( " }" );
263
264 printer.println( "}" );
265 }
266 finally
267 {
268 IOUtil.close( output );
269 IOUtil.close( printer );
270 }
271 }
272
273 private void createBarJava( File barJava )
274 throws Exception
275 {
276 FileWriter output = new FileWriter( barJava );
277
278 PrintWriter printer = new PrintWriter( output );
279
280 printer.println( "public class Bar" );
281 printer.println( "{" );
282
283 printer.println( " public int bar()" );
284 printer.println( " {" );
285 printer.println( " return 20;" );
286 printer.println( " }" );
287
288 printer.println( "}" );
289
290 printer.close();
291
292 output.close();
293 }
294
295 private void changeReadmeTxt( File readmeTxt )
296 throws Exception
297 {
298 FileWriter output = null;
299
300 try
301 {
302 output = new FileWriter( readmeTxt );
303
304 output.write( "changed file" );
305 }
306 finally
307 {
308 IOUtil.close( output );
309 }
310 }
311 }