1 package org.apache.maven.scm.tck.command.update;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Date;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.TreeSet;
27
28 import org.apache.maven.scm.ChangeSet;
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.ScmTestCase;
34 import org.apache.maven.scm.command.checkin.CheckInScmResult;
35 import org.apache.maven.scm.command.update.UpdateScmResult;
36 import org.apache.maven.scm.manager.ScmManager;
37 import org.apache.maven.scm.repository.ScmRepository;
38 import org.codehaus.plexus.util.StringUtils;
39 import org.junit.Test;
40
41 import static org.junit.Assert.assertEquals;
42 import static org.junit.Assert.assertFalse;
43 import static org.junit.Assert.assertNotNull;
44 import static org.junit.Assert.assertTrue;
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public abstract class UpdateCommandTckTest
65 extends ScmTckTestCase
66 {
67
68 private void commit( File workingDirectory, ScmRepository repository )
69 throws Exception
70 {
71 CheckInScmResult result = getScmManager().checkIn( repository, new ScmFileSet( workingDirectory ), "No msg" );
72
73 assertTrue( "Check result was successful, output: " + result.getCommandOutput(), result.isSuccess() );
74
75 List<ScmFile> committedFiles = result.getCheckedInFiles();
76
77 assertEquals(
78 "Expected 3 files in the committed files list:\n " + StringUtils.join( committedFiles.iterator(), "\n " ),
79 3, committedFiles.size() );
80 }
81
82 @Test
83 public void testUpdateCommand()
84 throws Exception
85 {
86
87 deleteDirectory( getUpdatingCopy() );
88
89 assertFalse( getUpdatingCopy().exists() );
90
91
92
93
94
95 ScmRepository repository = makeScmRepository( getScmUrl() );
96
97 checkOut( getUpdatingCopy(), repository );
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 this.edit( getWorkingCopy(), "readme.txt", null, getScmRepository() );
114 ScmTestCase.makeFile( getWorkingCopy(), "/readme.txt", "changed readme.txt" );
115
116
117 ScmTestCase.makeFile( getWorkingCopy(), "/project.xml", "changed project.xml" );
118
119 addToWorkingTree( getWorkingCopy(), new File( "project.xml" ), getScmRepository() );
120
121
122 ScmTestCase.makeDirectory( getWorkingCopy(), "/src/test/java/org" );
123
124 addToWorkingTree( getWorkingCopy(), new File( "src/test/java/org" ), getScmRepository() );
125
126
127 ScmTestCase.makeFile( getWorkingCopy(), "/src/main/java/org/Foo.java" );
128
129 addToWorkingTree( getWorkingCopy(), new File( "src/main/java/org" ), getScmRepository() );
130
131
132 addToWorkingTree( getWorkingCopy(), new File( "src/main/java/org/Foo.java" ), getScmRepository() );
133
134 ScmManager scmManager = getScmManager();
135
136 Date lastUpdate = new Date( System.currentTimeMillis() - 1000000 );
137
138 commit( getWorkingCopy(), getScmRepository() );
139
140 Thread.sleep( 5000 );
141
142
143
144
145
146 UpdateScmResult result = scmManager.update( repository, new ScmFileSet( getUpdatingCopy() ), lastUpdate );
147
148 assertNotNull( "The command returned a null result.", result );
149
150 assertResultIsSuccess( result );
151
152 List<ScmFile> updatedFiles = result.getUpdatedFiles();
153
154 List<ChangeSet> changedSets = result.getChanges();
155
156 assertEquals( "Expected 3 files in the updated files list " + updatedFiles, 3, updatedFiles.size() );
157
158 assertNotNull( "The changed files list is null", changedSets );
159
160 assertFalse( "The changed files list is empty ", changedSets.isEmpty() );
161
162 for ( ChangeSet changeSet : changedSets )
163 {
164 System.out.println( changeSet.toXML() );
165 }
166
167
168
169
170
171 Iterator<ScmFile> files = new TreeSet<ScmFile>( updatedFiles ).iterator();
172
173
174 ScmFile file = files.next();
175 assertPath( "src/main/java/org/Foo.java", file.getPath() );
176
177 assertTrue( file.getStatus().isUpdate() || file.getStatus() == ScmFileStatus.ADDED );
178
179
180 file = files.next();
181 assertPath( "readme.txt", file.getPath() );
182 assertTrue( file.getStatus().isUpdate() );
183
184
185 file = files.next();
186 assertPath( "project.xml", file.getPath() );
187
188 assertTrue( file.getStatus().isUpdate() || file.getStatus() == ScmFileStatus.ADDED );
189 }
190
191 }