View Javadoc
1   package org.apache.maven.scm.tck.command.checkin;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * This test tests the check out command.
49   *
50   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
51   */
52  public abstract class CheckInCommandTckTest
53      extends ScmTckTestCase
54  {
55      @Test
56      public void testCheckInCommandTest()
57          throws Exception
58      {
59          // Make sure that the correct files was checked out
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          // Change the files
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          // SCM-998: filename separators not yet harmonized
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         // Make sure that the correct files was checked out
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         // Change the files
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         // Make sure that the correct files was checked out
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         // Change the files
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         // SCM-998: filename separators not yet harmonized
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 }