[Mercurial Tests] Renamed AbstractHgTestCase to HgAbstractTestCase for unification.
[idea/community.git] / plugins / hg4idea / testSrc / org / zmlx / hg4idea / test / HgHistoryTestCase.java
1 package org.zmlx.hg4idea.test;
2
3 import com.intellij.openapi.vcs.VcsException;
4 import com.intellij.openapi.vcs.history.VcsFileRevision;
5 import com.intellij.openapi.vcs.history.VcsHistorySession;
6 import com.intellij.vcsUtil.VcsUtil;
7 import org.testng.annotations.Test;
8 import org.zmlx.hg4idea.HgVcs;
9
10 import java.io.File;
11 import java.util.Collection;
12 import java.util.List;
13
14 import static org.testng.Assert.assertEquals;
15 import static org.testng.Assert.assertTrue;
16
17 /**
18  * HgHistoryTestCase tests retrieving file history and specific revisions.
19  */
20 public class HgHistoryTestCase extends HgAbstractTestCase {
21
22   /**
23    * 1. Make two versions of a file (create, add, commit, modify, commit).
24    * 2. Get the revisions history.
25    * 3. Verify versions' contents and the current version.
26    */
27   @Test
28   public void testCurrentAndPreviousRevisions() throws Exception {
29     int versions = 0;
30     fillFile(myProjectRepo, new String[]{ AFILE }, FILE_CONTENT);
31     addAll();
32     commitAll("initial content");
33     versions++;
34     fillFile(myProjectRepo, new String[] { AFILE} , FILE_CONTENT_2);
35     commitAll("updated content");
36     versions++;
37
38     final VcsHistorySession session = getHistorySession(AFILE);
39     final List<VcsFileRevision> revisions = session.getRevisionList();
40     for (VcsFileRevision rev : revisions) {
41       rev.loadContent();
42     }
43
44     assertEquals(revisions.size(), versions);
45     assertTrue(session.isCurrentRevision(revisions.get(0).getRevisionNumber()));
46     assertEquals(revisions.get(0).getContent(), FILE_CONTENT_2.getBytes());
47     assertEquals(revisions.get(1).getContent(), FILE_CONTENT.getBytes());
48   }
49
50   /**
51    * 1. Make initial version of a file (create, add, commit).
52    * 2. Rename file (rename, commit).
53    * 3. Update file (modify, commit).
54    * 4. Get the file history.
55    * 5. Verify revision contents and the current revision.
56    */
57   @Test
58   public void renameShouldPreserveFileHistory() throws Exception {
59     int versions = 0;
60
61     fillFile(myProjectRepo, new String[]{ AFILE }, FILE_CONTENT);
62     addAll();
63     commitAll("initial content");
64     versions++;
65
66     runHgOnProjectRepo("rename", AFILE, BFILE);
67     commitAll("file renamed");
68     versions++;
69
70     fillFile(myProjectRepo, new String[]{ BFILE }, FILE_CONTENT_2);
71     commitAll("updated content");
72     versions++;
73
74     final VcsHistorySession session = getHistorySession(BFILE);
75     final List<VcsFileRevision> revisions = session.getRevisionList();
76     loadAllRevisions(revisions);
77
78     assertEquals(revisions.size(), versions);
79     assertTrue(session.isCurrentRevision(revisions.get(0).getRevisionNumber()));
80     assertEquals(revisions.get(0).getContent(), FILE_CONTENT_2.getBytes());
81     assertEquals(revisions.get(2).getContent(), FILE_CONTENT.getBytes());
82   }
83
84   private void loadAllRevisions(Collection<VcsFileRevision> revisions) throws Exception {
85     for (VcsFileRevision rev : revisions) {
86       rev.loadContent();
87     }
88   }
89
90   private VcsHistorySession getHistorySession(String relativePath) throws VcsException {
91     return HgVcs.getInstance(myProject).getVcsHistoryProvider().createSessionFor(VcsUtil.getFilePath(new File(myProjectRepo, relativePath), false));
92   }
93
94 }