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: 2002/12/07 04:50:20 $ 
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   * Test cases for {@link VersionedFile}
32   * 
33   * @author Richard Cyganiak
34   * @version $Id: VersionedFileTest.java,v 1.8 2002/12/07 04:50:20 lukasz Exp $
35   */
36  public class CvsFileTest extends TestCase {
37      private Directory dirRoot;
38      private Directory dirTest;
39      private final Date date1 = new Date(1100000000);
40      private final Date date2 = new Date(1200000000);
41      private final Date date3 = new Date(1300000000);
42      private Author author;
43  
44      /**
45       * Constructor for VersionedFileTest.
46       * @param arg0 input
47       */
48      public CvsFileTest(final String arg0) {
49          super(arg0);
50      }
51  
52      /**
53       * @see TestCase#setUp()
54       */
55      protected void setUp() throws Exception {
56          super.setUp();
57          dirRoot = Directory.createRoot();
58          dirTest = dirRoot.createSubdirectory("test");
59          author = new Author("author");
60      }
61  
62      /**
63       * Method testCreation.
64       */
65      public void testCreation() {
66          final VersionedFile file = new VersionedFile("file", dirRoot);
67          final Revision rev1 = file.addInitialRevision("1.1", author, date1, "message", 0, null);
68          assertEquals("file", file.getFilenameWithPath());
69          assertEquals(1, file.getRevisions().size());
70          assertSame(rev1, file.getLatestRevision());
71          assertEquals(0, file.getCurrentLinesOfCode());
72          assertEquals(dirRoot, file.getDirectory());
73          assertTrue("file was not deleted", !file.isDead());
74      }
75  
76      /**
77       * Method testMultipleRevisions.
78       */
79      public void testMultipleRevisions() {
80          final VersionedFile file = new VersionedFile("file", dirRoot);
81          final Revision rev1 = file.addInitialRevision("1.1", author, date1, "message1", 0, null);
82          final Revision rev2 = file.addChangeRevision("1.2", author, date2, "message2", 0, 0, 0, null);
83          final Revision rev3 = file.addChangeRevision("1.3", author, date3, "message3", 0, 0, 0, null);
84          final Iterator revIt = file.getRevisions().iterator();
85          assertEquals(rev1, revIt.next());
86          assertEquals(rev2, revIt.next());
87          assertEquals(rev3, revIt.next());
88          assertTrue(!revIt.hasNext());
89          assertEquals(rev3, file.getLatestRevision());
90          assertEquals(rev1, file.getInitialRevision());
91          assertEquals(0, file.getCurrentLinesOfCode());
92          assertEquals(0, rev1.getLines());
93          assertEquals(0, rev2.getLines());
94          assertEquals(0, rev3.getLines());
95      }
96  
97      /**
98       * Test the assertion that revisions can be added to a file in any order.
99       */
100     public void testMultipleRevisionsAnyOrder() {
101         final VersionedFile file = new VersionedFile("file", dirRoot);
102         final Revision rev2 = file.addChangeRevision("1.2", author, date2, null, 0, 0, 0, null);
103         final Revision rev3 = file.addDeletionRevision("1.3", author, date3, null, 0, null);
104         final Revision rev1 = file.addInitialRevision("1.1", author, date1, null, 0, null);
105         final Iterator revIt = file.getRevisions().iterator();
106         assertEquals(rev1, revIt.next());
107         assertEquals(rev2, revIt.next());
108         assertEquals(rev3, revIt.next());
109         assertTrue(!revIt.hasNext());
110     }
111 
112     /**
113      * Method testModuleName.
114      */
115     public void testDirectories() {
116         final VersionedFile file1 = new VersionedFile("rootfile.file", dirRoot);
117         file1.addInitialRevision("1.1", author, date1, null, 0, null);
118         final VersionedFile file2 = new VersionedFile("test/file.file", dirTest);
119         assertEquals(dirRoot, file1.getDirectory());
120         assertEquals(dirTest, file2.getDirectory());
121     }
122 
123     /**
124      * Method testGetFilename
125      * 
126      */
127     public void testGetFilename() {
128         VersionedFile file = new VersionedFile("TestFile.java", dirRoot);
129         assertEquals("TestFile.java", file.getFilename());
130         file = new VersionedFile("", dirRoot);
131         assertEquals("", file.getFilename());
132         file = new VersionedFile("/", dirRoot);
133         assertEquals("", file.getFilename());
134     }
135 
136     /**
137      * test getPreviousRevision()
138      */
139     public void testGetPreviousRevision() {
140         final VersionedFile file = new VersionedFile("file", dirRoot);
141         final Revision rev1 = file.addInitialRevision("1.1", author, date1, "message1", 0, null);
142         final Revision rev2 = file.addChangeRevision("1.2", author, date2, "message2", 0, 0, 0, null);
143         final Revision rev3 = file.addChangeRevision("1.3", author, date3, "message3", 0, 0, 0, null);
144         assertNull(rev1.getPreviousRevision());
145         assertNull(file.getPreviousRevision(rev1));
146         assertEquals(rev1, rev2.getPreviousRevision());
147         assertEquals(rev1, file.getPreviousRevision(rev2));
148         assertEquals(rev2, rev3.getPreviousRevision());
149         assertEquals(rev2, file.getPreviousRevision(rev3));
150         try {
151             file.getPreviousRevision(new Revision(new VersionedFile("foo", dirRoot), "1.1", Revision.TYPE_CHANGE, null, date3, null, 0, 0, 0, null));
152             fail("should have thrown IllegalArgumentException");
153         } catch (final IllegalArgumentException expected) {
154             // expected
155         }
156     }
157 
158     /**
159      * Test if files are added to their directory's file list
160      */
161     public void testLinkToDirectory() {
162         final VersionedFile file = new VersionedFile("test/file", dirTest);
163         file.addInitialRevision("1.1", author, date1, "message1", 0, null);
164         assertEquals(dirTest, file.getDirectory());
165         assertTrue(dirTest.getFiles().contains(file));
166     }
167 
168     /**
169      * The null author used for "begin of log" revisions must not be included
170      * in the authors list
171      */
172     public void testIgnoreNullAuthor() {
173         final VersionedFile file = new VersionedFile("file", dirRoot);
174         new Revision(file, "1.5", Revision.TYPE_CHANGE, new Author("author"), new Date(200000000), null, 0, 0, 0, null);
175         new Revision(file, "0.0", Revision.TYPE_BEGIN_OF_LOG, null, new Date(100000000), null, 0, 0, 0, null);
176 
177         assertTrue(!file.hasAuthor(null));
178     }
179 
180     public void testCompareTo() {
181         assertTrue(new VersionedFile("file1", dirRoot).compareTo(new VersionedFile("file2", dirRoot)) < 0);
182     }
183 }