1   /*
2       StatCvs - CVS statistics generation 
3       Copyright (C) 2002  Lukasz Pekacki <lukasz@pekacki.de>
4       http://statcvs.sf.net/
5       
6       This library is free software; you can redistribute it and/or
7       modify it under the terms of the GNU Lesser General Public
8       License as published by the Free Software Foundation; either
9       version 2.1 of the License, or (at your option) any later version.
10  
11      This library is distributed in the hope that it will be useful,
12      but WITHOUT ANY WARRANTY; without even the implied warranty of
13      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14      Lesser General Public License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public
17      License along with this library; if not, write to the Free Software
18      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19      
20  	$Name:  $ 
21  	Created on $Date: 2008/04/02 11:22:15 $ 
22  */
23  package net.sf.statcvs.model;
24  
25  import java.util.Date;
26  import java.util.Iterator;
27  
28  import junit.framework.TestCase;
29  
30  /**
31   * @author Richard Cyganiak
32   * @version $Id: DirectoryTest.java,v 1.19 2008/04/02 11:22:15 benoitx Exp $
33   */
34  public class DirectoryTest extends TestCase {
35  
36      private Directory root;
37      private Directory rootSrc;
38      private Directory rootSrcNet;
39      private Directory rootSrcNetSf;
40      private Directory rootSrcNetSfStatcvs;
41      private Date date1;
42      private Date date2;
43      private Date date3;
44      private Date date4;
45      private Author author;
46  
47      /**
48       * Constructor
49       * @param arg0 input
50       */
51      public DirectoryTest(final String arg0) {
52          super(arg0);
53      }
54  
55      /**
56       * @see TestCase#setUp()
57       */
58      protected void setUp() throws Exception {
59          super.setUp();
60          root = Directory.createRoot();
61          rootSrc = root.createSubdirectory("src");
62          rootSrcNet = rootSrc.createSubdirectory("net");
63          rootSrcNetSf = rootSrcNet.createSubdirectory("sf");
64          rootSrcNetSfStatcvs = rootSrcNetSf.createSubdirectory("statcvs");
65          date1 = new Date(100000000);
66          date2 = new Date(200000000);
67          date3 = new Date(300000000);
68          date4 = new Date(400000000);
69          author = new Author("chevette");
70      }
71  
72      /**
73       * test the {@link DirectoryRoot} object
74       */
75      public void testRoot() {
76          assertNotNull(root);
77          assertTrue(root.isRoot());
78          assertNull(root.getParent());
79          assertEquals("", root.getName());
80          assertEquals("", root.getPath());
81      }
82  
83      /**
84       * test the {@link DirectoryImpl} object
85       */
86      public void testNonRootDirectory() {
87          assertNotNull(rootSrcNetSfStatcvs);
88          assertTrue(!rootSrcNetSfStatcvs.isRoot());
89          assertNotNull(rootSrcNetSfStatcvs.getParent());
90          assertEquals("statcvs", rootSrcNetSfStatcvs.getName());
91      }
92  
93      /**
94       * test the correct linking of parents, and {@link Directory.getPath()}
95       */
96      public void testPath() {
97          assertEquals(rootSrcNetSf, rootSrcNetSfStatcvs.getParent());
98          assertEquals(rootSrcNet, rootSrcNetSf.getParent());
99          assertEquals(rootSrc, rootSrcNet.getParent());
100         assertEquals(root, rootSrc.getParent());
101         assertEquals("src/net/sf/statcvs/", rootSrcNetSfStatcvs.getPath());
102     }
103 
104     /**
105      * tests {@link Directory.getRevisions()}
106      */
107     public void testRevisions() {
108         final VersionedFile file1 = new VersionedFile("src/net/sf/statcvs/Main.java", rootSrcNetSfStatcvs);
109         final Revision rev11 = file1.addInitialRevision("1.1", author, date1, null, 0, null);
110         final Revision rev12 = file1.addChangeRevision("1.2", author, date3, null, 0, 0, 0, null);
111         final VersionedFile file2 = new VersionedFile("src/net/sf/statcvs/README", rootSrcNetSfStatcvs);
112         final Revision rev21 = file2.addInitialRevision("2.1", author, date2, null, 0, null);
113         final VersionedFile file3 = new VersionedFile("fileInRoot", root);
114         file3.addInitialRevision("3.1", author, date4, null, 0, null);
115         final Iterator revIt = rootSrcNetSfStatcvs.getRevisions().iterator();
116         assertTrue(revIt.hasNext());
117         assertEquals(rev11, revIt.next());
118         assertTrue(revIt.hasNext());
119         assertEquals(rev21, revIt.next());
120         assertTrue(revIt.hasNext());
121         assertEquals(rev12, revIt.next());
122         assertTrue(!revIt.hasNext());
123     }
124 
125     /**
126      * tests {@link Directory.compareTo(Object)
127      */
128     public void testCompareSame() {
129         assertEquals(0, rootSrcNetSf.compareTo(rootSrcNetSf));
130     }
131 
132     /**
133      * tests {@link Directory.compareTo(Object)
134      */
135     public void testCompareDifferent() {
136         final Directory dir1 = root.createSubdirectory("abc");
137         final Directory dir2 = root.createSubdirectory("abc");
138         final Directory dir3 = root.createSubdirectory("xyz");
139         assertEquals(0, dir1.compareTo(dir2));
140         assertTrue(dir1.compareTo(dir3) < 0);
141         assertTrue(dir3.compareTo(dir2) > 0);
142     }
143 
144     /**
145      * tests {@link Directory.getDepth()}
146      */
147     public void testGetDepth() {
148         assertEquals(0, root.getDepth());
149         assertEquals(1, rootSrc.getDepth());
150         assertEquals(2, rootSrcNet.getDepth());
151         assertEquals(3, rootSrcNetSf.getDepth());
152         assertEquals(4, rootSrcNetSfStatcvs.getDepth());
153     }
154 
155     /**
156      * Tests automatic creation of backlinks to subdirectories
157      */
158     public void testSubdirectories() {
159         assertEquals(1, root.getSubdirectories().size());
160         assertTrue(root.getSubdirectories().contains(rootSrc));
161         assertEquals(1, rootSrc.getSubdirectories().size());
162         assertTrue(rootSrc.getSubdirectories().contains(rootSrcNet));
163         assertEquals(1, rootSrcNet.getSubdirectories().size());
164         assertTrue(rootSrcNet.getSubdirectories().contains(rootSrcNetSf));
165         assertEquals(1, rootSrcNetSf.getSubdirectories().size());
166         assertTrue(rootSrcNetSf.getSubdirectories().contains(rootSrcNetSfStatcvs));
167         assertTrue(rootSrcNetSfStatcvs.getSubdirectories().isEmpty());
168     }
169 
170     public void testEmptyRepository() {
171         assertTrue(root.isEmpty());
172     }
173 
174     public void testNonEmptyRepository() {
175         final VersionedFile file1 = new VersionedFile("src/README", rootSrc);
176         file1.addInitialRevision("1.1", author, date1, null, 100, null);
177         assertTrue(!root.isEmpty());
178         assertTrue(!rootSrc.isEmpty());
179         assertTrue(rootSrcNet.isEmpty());
180         assertEquals(0, root.getCurrentFileCount());
181         assertEquals(1, rootSrc.getCurrentFileCount());
182         assertEquals(0, rootSrcNet.getCurrentFileCount());
183         assertEquals(0, root.getCurrentLOC());
184         assertEquals(100, rootSrc.getCurrentLOC());
185         assertEquals(0, rootSrcNet.getCurrentLOC());
186     }
187 
188     public void testEmptyRepositoryWithDeletedFile() {
189         final VersionedFile file1 = new VersionedFile("src/README", rootSrc);
190         file1.addInitialRevision("1.1", author, date1, null, 100, null);
191         file1.addDeletionRevision("1.2", author, date2, null, 100, null);
192         assertTrue(root.isEmpty());
193         assertTrue(rootSrc.isEmpty());
194         assertTrue(rootSrcNet.isEmpty());
195         assertEquals(0, rootSrc.getCurrentFileCount());
196         assertEquals(0, rootSrc.getCurrentLOC());
197     }
198 
199     public void testNonEmptyRepositoryWithDeletedFile() {
200         final VersionedFile file1 = new VersionedFile("src/README", rootSrc);
201         file1.addInitialRevision("1.1", author, date1, null, 100, null);
202         final VersionedFile file2 = new VersionedFile("src/README2", rootSrc);
203         file2.addInitialRevision("1.1", author, date1, null, 100, null);
204         final VersionedFile file3 = new VersionedFile("fileInRoot", root);
205         file3.addInitialRevision("1.1", author, date1, null, 100, null);
206         final VersionedFile file4 = new VersionedFile("src/deleted", rootSrc);
207         file4.addInitialRevision("1.1", author, date1, null, 100, null);
208         file4.addDeletionRevision("1.2", author, date2, null, 100, null);
209         assertTrue(!root.isEmpty());
210         assertTrue(!rootSrc.isEmpty());
211         assertTrue(rootSrcNet.isEmpty());
212         assertEquals(1, root.getCurrentFileCount());
213         assertEquals(2, rootSrc.getCurrentFileCount());
214         assertEquals(0, rootSrcNet.getCurrentFileCount());
215         assertEquals(100, root.getCurrentLOC());
216         assertEquals(200, rootSrc.getCurrentLOC());
217         assertEquals(0, rootSrcNet.getCurrentLOC());
218     }
219 
220     public void testGetSubdirectoriesRecursive() {
221         final Directory rootDir = Directory.createRoot();
222         final Directory dir2 = rootDir.createSubdirectory("dir2");
223         final Directory dir2sub = dir2.createSubdirectory("sub");
224         final Directory dir1 = rootDir.createSubdirectory("dir1");
225         final Directory dir1sub2 = dir1.createSubdirectory("sub2");
226         final Directory dir1sub1 = dir1.createSubdirectory("sub1");
227         final Iterator dirIt = rootDir.getSubdirectoriesRecursive().iterator();
228         assertEquals(rootDir, dirIt.next());
229         assertEquals(dir1, dirIt.next());
230         assertEquals(dir1sub1, dirIt.next());
231         assertEquals(dir1sub2, dirIt.next());
232         assertEquals(dir2, dirIt.next());
233         assertEquals(dir2sub, dirIt.next());
234         assertTrue(!dirIt.hasNext());
235     }
236 }