1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package net.sf.statcvs.input;
25
26 import java.util.Date;
27 import java.util.HashMap;
28 import java.util.Iterator;
29 import java.util.Set;
30
31 import junit.framework.TestCase;
32 import net.sf.statcvs.model.Author;
33 import net.sf.statcvs.model.Directory;
34 import net.sf.statcvs.model.Repository;
35 import net.sf.statcvs.model.Revision;
36 import net.sf.statcvs.model.VersionedFile;
37 import net.sf.statcvs.util.FilePatternMatcher;
38
39 /**
40 * Test cases for {@link Builder}.
41 *
42 * @author Anja Jentzsch
43 * @author Richard Cyganiak
44 * @see LinesOfCodeTest
45 * @version $Id: BuilderTest.java,v 1.26 2008/04/02 11:22:14 benoitx Exp $
46 */
47 public class BuilderTest extends TestCase {
48 private Builder builder;
49 private RevisionData rev1;
50 private RevisionData rev2;
51 private RevisionData rev3;
52
53 /**
54 * Constructor
55 * @param arg0 input
56 */
57 public BuilderTest(final String arg0) {
58 super(arg0);
59 }
60
61 /**
62 * @see TestCase#setUp()
63 */
64 protected void setUp() throws Exception {
65 super.setUp();
66 builder = new Builder(null, null, null, null);
67 builder.buildModule("testmodule");
68 rev1 = new RevisionData();
69 rev1.setRevisionNumber("1.1");
70 rev1.setLoginName("author1");
71 rev1.setStateExp();
72 rev1.setDate(new Date(100000));
73 rev1.setComment("comment1");
74 rev2 = new RevisionData();
75 rev2.setRevisionNumber("1.2");
76 rev2.setLoginName("author2");
77 rev2.setStateExp();
78 rev2.setLines(10, 2);
79 rev2.setDate(new Date(200000));
80 rev2.setComment("comment2");
81 rev3 = new RevisionData();
82 rev3.setRevisionNumber("1.3");
83 rev3.setLoginName("author1");
84 rev3.setStateDead();
85 rev3.setDate(new Date(300000));
86 rev3.setComment("comment3");
87 }
88
89 /**
90 * Test if the module name is correctly passed on
91 */
92 public void testBuildModule() {
93 final Builder b = new Builder(null, null, null, null);
94 b.buildModule("test");
95 assertEquals("test", b.getProjectName());
96 assertTrue(b.getAtticFileNames().isEmpty());
97 }
98
99 /**
100 * test {@link Builder.getAuthor(String)}
101 */
102 public void testGetAuthor() {
103 final Author author1 = builder.getAuthor("author1");
104 final Author author2 = builder.getAuthor("author2");
105 final Author author1b = builder.getAuthor("author1");
106 assertEquals(author1, author1b);
107 assertTrue(!author1.equals(author2));
108 assertTrue(!author1b.equals(author2));
109 }
110
111 /**
112 * On some Windows systems, people can use both upper and lower case
113 * for the same login
114 */
115 public void testGetAuthorCase() {
116 final Author upper = this.builder.getAuthor("richard");
117 final Author lower = this.builder.getAuthor("Richard");
118 assertSame(upper, lower);
119 }
120
121 /**
122 * test {@link Builder.getDirectory(String)}
123 */
124 public void testGetDirectoryRoot() {
125 final Directory dir1 = builder.getDirectory("fileInRoot");
126 final Directory dir2 = builder.getDirectory("anotherFileInRoot");
127 assertEquals(dir1, dir2);
128 assertTrue(dir1.isRoot());
129 assertEquals("", dir1.getName());
130 assertEquals("", dir1.getPath());
131 }
132
133 /**
134 * test {@link Builder.getDirectory(String)}
135 */
136 public void testGetDirectoryDeepPath() {
137 final Directory dir1 = builder.getDirectory("src/file");
138 final Directory dir2 = builder.getDirectory("src/net/sf/statcvs/Main.java");
139 assertEquals(dir1, dir2.getParent().getParent().getParent());
140 assertTrue(dir1.getParent().isRoot());
141 }
142
143 /**
144 * test {@link Builder.getDirectory(String)}
145 */
146 public void testGetDirectorySeveralPaths() {
147 final Directory dir1 = builder.getDirectory("src/net/sf/statcvs/Main.java");
148 final Directory dir2 = builder.getDirectory("src/com/microsoft/Windows95.java");
149 final Directory dir3 = builder.getDirectory("src/com/microsoft/Windows98.java");
150 assertEquals(dir2, dir3);
151 assertEquals(dir1.getParent().getParent().getParent(), dir2.getParent().getParent());
152 }
153
154 public void testFilesEmpty() throws Exception {
155 final Builder builder1 = new Builder(null, null, null, null);
156 final Repository repo = builder1.createCvsContent();
157 assertTrue(repo.isEmpty());
158 }
159
160 /**
161 * test {@link Builder.addFile(CvsFile)} and {@link Builder.getFiles()}
162 */
163 public void testFilesOneFile() throws Exception {
164 builder.buildFile("file1", false, false, new HashMap());
165 builder.buildRevision(rev1);
166 final Repository content = builder.createCvsContent();
167
168 assertNotNull(content.getFiles());
169 assertEquals(1, content.getFiles().size());
170 final VersionedFile file1 = (VersionedFile) content.getFiles().first();
171 assertEquals("file1", file1.getFilenameWithPath());
172 assertEquals(builder.getDirectory(""), file1.getDirectory());
173 assertEquals(1, file1.getRevisions().size());
174 }
175
176 /**
177 * test {@link Builder.addFile(CvsFile)} and {@link Builder.getFiles()}
178 */
179 public void testFileTwoFiles() throws Exception {
180 builder.buildFile("file2", false, false, new HashMap());
181 builder.buildRevision(rev1);
182 builder.buildFile("file3", false, false, new HashMap());
183 builder.buildRevision(rev2);
184 final Repository content = builder.createCvsContent();
185
186 assertNotNull(content.getFiles());
187 assertEquals(2, content.getFiles().size());
188 final VersionedFile file2 = (VersionedFile) content.getFiles().first();
189 final VersionedFile file3 = (VersionedFile) content.getFiles().last();
190 assertEquals("file2", file2.getFilenameWithPath());
191 assertEquals("file3", file3.getFilenameWithPath());
192 }
193
194 /**
195 * Tests {@link Builder.buildRevisionBegin}
196 */
197 public void testBuildRevision() throws Exception {
198 builder.buildFile("file", false, false, new HashMap());
199 builder.buildRevision(rev3);
200 builder.buildRevision(rev2);
201 builder.buildRevision(rev1);
202 final Repository content = builder.createCvsContent();
203
204 final VersionedFile file = (VersionedFile) content.getFiles().first();
205 final Iterator it = file.getRevisions().iterator();
206 assertTrue(it.hasNext());
207 final Revision r1 = (Revision) it.next();
208 assertTrue(it.hasNext());
209 final Revision r2 = (Revision) it.next();
210 assertTrue(it.hasNext());
211 final Revision r3 = (Revision) it.next();
212 assertTrue(!it.hasNext());
213
214 assertEquals("1.1", r1.getRevisionNumber());
215 assertTrue(r1.isInitialRevision());
216 assertEquals("author1", r1.getAuthor().getName());
217 assertEquals("comment1", r1.getComment());
218
219 assertEquals("1.2", r2.getRevisionNumber());
220 assertTrue(!r2.isInitialRevision());
221 assertEquals(2, r2.getReplacedLines());
222 assertEquals(8, r2.getLinesDelta());
223 assertEquals("author2", r2.getAuthor().getName());
224
225 assertEquals("1.3", r3.getRevisionNumber());
226 assertTrue(r3.isDead());
227 assertEquals("author1", r3.getAuthor().getName());
228
229 assertSame(r1.getAuthor(), r3.getAuthor());
230 }
231
232 public void testStartDateForPartialLog() throws Exception {
233 final RevisionData rev4 = new RevisionData();
234 rev4.setRevisionNumber("1.5");
235 rev4.setLines(10, 5);
236 rev4.setStateExp();
237 rev4.setLoginName("somebody");
238 rev4.setDate(new Date(100000000));
239 builder.buildFile("dir/normal_file", true, false, new HashMap());
240 builder.buildRevision(rev3);
241 builder.buildRevision(rev2);
242 builder.buildRevision(rev1);
243 builder.buildFile("partial_logged_file", true, false, new HashMap());
244 builder.buildRevision(rev4);
245 final Repository content = builder.createCvsContent();
246
247 final VersionedFile file = (VersionedFile) content.getRoot().getFiles().iterator().next();
248 assertTrue(file.getInitialRevision().isBeginOfLog());
249 final Date beforeRev1 = new Date(rev1.getDate().getTime() - 60000);
250 assertEquals(beforeRev1, file.getInitialRevision().getDate());
251 }
252
253 public void testIncludePattern() throws Exception {
254 final Builder b = new Builder(null, new FilePatternMatcher("a*"), new FilePatternMatcher("*z"), null);
255 assertTrue(b.matchesPatterns("abc"));
256 assertTrue(!b.matchesPatterns("xyz"));
257 assertTrue(!b.matchesPatterns("az"));
258 }
259
260 public void testNoAtticFiles() throws Exception {
261 builder.buildFile("file1", false, false, new HashMap());
262 builder.buildFile("file2", false, false, new HashMap());
263 builder.buildFile("file3", false, false, new HashMap());
264 assertTrue(builder.getAtticFileNames().isEmpty());
265 }
266
267 public void testAtticFiles() throws Exception {
268 builder.buildFile("file1", false, false, new HashMap());
269 builder.buildFile("file2", false, true, new HashMap());
270 builder.buildFile("file3", false, true, new HashMap());
271 builder.buildFile("file4", false, false, new HashMap());
272 final Set attic = builder.getAtticFileNames();
273 assertTrue(attic.contains("file2"));
274 assertTrue(attic.contains("file3"));
275 assertEquals(2, attic.size());
276 }
277 }