1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.tck.command.checkin;
20
21 import java.io.File;
22 import java.io.FileWriter;
23 import java.io.PrintWriter;
24 import java.util.List;
25 import java.util.Map;
26
27 import org.apache.maven.scm.CommandParameter;
28 import org.apache.maven.scm.CommandParameters;
29 import org.apache.maven.scm.ScmFile;
30 import org.apache.maven.scm.ScmFileSet;
31 import org.apache.maven.scm.ScmFileStatus;
32 import org.apache.maven.scm.ScmTckTestCase;
33 import org.apache.maven.scm.command.add.AddScmResult;
34 import org.apache.maven.scm.command.checkin.CheckInScmResult;
35 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
36 import org.apache.maven.scm.provider.ScmProvider;
37 import org.apache.maven.scm.util.FilenameUtils;
38 import org.codehaus.plexus.util.FileUtils;
39 import org.junit.Assume;
40 import org.junit.Test;
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 extends ScmTckTestCase {
53 @Test
54 public void testCheckInCommandTest() throws Exception {
55
56 File fooJava = new File(getWorkingCopy(), "src/main/java/Foo.java");
57
58 File barJava = new File(getWorkingCopy(), "src/main/java/Bar.java");
59
60 File readmeTxt = new File(getWorkingCopy(), "readme.txt");
61
62 assertFalse("check Foo.java doesn't yet exist", fooJava.canRead());
63
64 assertFalse("check Bar.java doesn't yet exist", barJava.canRead());
65
66 assertTrue("check can read readme.txt", readmeTxt.canRead());
67
68
69 createFooJava(fooJava);
70
71 createBarJava(barJava);
72
73 changeReadmeTxt(readmeTxt);
74
75 AddScmResult addResult = getScmManager()
76 .add(getScmRepository(), new ScmFileSet(getWorkingCopy(), "src/main/java/Foo.java", null));
77
78 assertResultIsSuccess(addResult);
79
80 List<ScmFile> files = addResult.getAddedFiles();
81 assertNotNull(files);
82 assertEquals(1, files.size());
83
84 assertEquals(
85 "src/main/java/Foo.java",
86 FilenameUtils.normalizeFilename(files.get(0).getPath()));
87
88 CommandParameters commandParameters = new CommandParameters();
89 commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
90
91 CheckInScmResult result =
92 getScmManager().checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy()), commandParameters);
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() throws Exception {
131
132 File fooJava = new File(getWorkingCopy(), "src/main/java/Foo.java");
133
134 File barJava = new File(getWorkingCopy(), "src/main/java/Bar.java");
135
136 File readmeTxt = new File(getWorkingCopy(), "readme.txt");
137
138 assertFalse("check Foo.java doesn't yet exist", fooJava.canRead());
139
140 assertFalse("check Bar.java doesn't yet exist", barJava.canRead());
141
142 assertTrue("check can read readme.txt", readmeTxt.canRead());
143
144
145 createFooJava(fooJava);
146
147 createBarJava(barJava);
148
149 changeReadmeTxt(readmeTxt);
150
151 AddScmResult addResult = getScmManager()
152 .getProviderByUrl(getScmUrl())
153 .add(getScmRepository(), new ScmFileSet(getWorkingCopy(), "src/main/java/Foo.java", null));
154
155 assertResultIsSuccess(addResult);
156
157 CommandParameters commandParameters = new CommandParameters();
158 commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
159
160 CheckInScmResult result = getScmManager()
161 .checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy(), "**/Foo.java", null), commandParameters);
162
163 assertResultIsSuccess(result);
164
165 List<ScmFile> files = result.getCheckedInFiles();
166 assertNotNull(files);
167 assertEquals(1, files.size());
168
169 ScmFile file1 = files.get(0);
170 assertEquals(ScmFileStatus.CHECKED_IN, file1.getStatus());
171 assertPath("src/main/java/Foo.java", file1.getPath());
172
173 CheckOutScmResult checkoutResult =
174 getScmManager().checkOut(getScmRepository(), new ScmFileSet(getAssertionCopy()));
175
176 assertResultIsSuccess(checkoutResult);
177
178 fooJava = new File(getAssertionCopy(), "src/main/java/Foo.java");
179
180 barJava = new File(getAssertionCopy(), "src/main/java/Bar.java");
181
182 readmeTxt = new File(getAssertionCopy(), "readme.txt");
183
184 assertTrue("check can read Foo.java", fooJava.canRead());
185
186 assertFalse("check Bar.java doesn't exist", barJava.canRead());
187
188 assertTrue("check can read readme.txt", readmeTxt.canRead());
189
190 assertEquals("check readme.txt contents", "/readme.txt", FileUtils.fileRead(readmeTxt));
191 }
192
193 @Test
194 public void testCheckInCommandFilesetWithBasedirOtherThanWorkingCopyRoot() throws Exception {
195 ScmProvider scmProvider = getScmManager().getProviderByUrl(getScmUrl());
196
197 Assume.assumeFalse(
198 "Local provider does not properly support basedir",
199 scmProvider.getScmType().equals("local"));
200
201 File fooJava = new File(getWorkingCopy(), "src/main/java/Foo.java");
202
203 assertFalse("check Foo.java doesn't yet exist", fooJava.canRead());
204
205
206 createFooJava(fooJava);
207
208 AddScmResult addResult = scmProvider.add(
209 getScmRepository(), new ScmFileSet(new File(getWorkingCopy(), "src"), "main/java/Foo.java", null));
210
211 assertResultIsSuccess(addResult);
212
213 List<ScmFile> files = addResult.getAddedFiles();
214 assertNotNull(files);
215 assertEquals(1, files.size());
216
217 assertEquals(
218 "main/java/Foo.java",
219 FilenameUtils.normalizeFilename(files.get(0).getPath()));
220
221 CommandParameters commandParameters = new CommandParameters();
222 commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
223
224 CheckInScmResult result = getScmManager()
225 .checkIn(
226 getScmRepository(),
227 new ScmFileSet(new File(getWorkingCopy(), "src"), "**/Foo.java", null),
228 commandParameters);
229
230 assertResultIsSuccess(result);
231
232 files = result.getCheckedInFiles();
233 assertNotNull(files);
234 assertEquals(1, files.size());
235
236 ScmFile file1 = files.get(0);
237 assertEquals(ScmFileStatus.CHECKED_IN, file1.getStatus());
238 assertPath("main/java/Foo.java", file1.getPath());
239
240 CheckOutScmResult checkoutResult =
241 getScmManager().checkOut(getScmRepository(), new ScmFileSet(getAssertionCopy()));
242
243 assertResultIsSuccess(checkoutResult);
244
245 fooJava = new File(getAssertionCopy(), "src/main/java/Foo.java");
246
247 assertTrue("check can read Foo.java", fooJava.canRead());
248 }
249
250 private void createFooJava(File fooJava) throws Exception {
251 try (PrintWriter printer = new PrintWriter(new FileWriter(fooJava))) {
252 printer.println("public class Foo");
253 printer.println("{");
254
255 printer.println(" public void foo()");
256 printer.println(" {");
257 printer.println(" int i = 10;");
258 printer.println(" }");
259
260 printer.println("}");
261 }
262 }
263
264 private void createBarJava(File barJava) throws Exception {
265 try (PrintWriter printer = new PrintWriter(new FileWriter(barJava))) {
266 printer.println("public class Bar");
267 printer.println("{");
268
269 printer.println(" public int bar()");
270 printer.println(" {");
271 printer.println(" return 20;");
272 printer.println(" }");
273
274 printer.println("}");
275 }
276 }
277
278 private void changeReadmeTxt(File readmeTxt) throws Exception {
279 try (FileWriter output = new FileWriter(readmeTxt)) {
280 output.write("changed file");
281 }
282 }
283 }