blob: e170ab695b7d8f3be4623e4446fd17580ee62207 [file] [log] [blame]
package org.zmlx.hg4idea.test;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.history.VcsFileRevision;
import com.intellij.openapi.vcs.history.VcsHistorySession;
import com.intellij.vcsUtil.VcsUtil;
import org.testng.annotations.Test;
import org.zmlx.hg4idea.HgVcs;
import java.io.File;
import java.util.Collection;
import java.util.List;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
/**
* HgHistoryTest tests retrieving file history and specific revisions.
*/
public class HgHistoryTest extends HgSingleUserTest {
/**
* 1. Make two versions of a file (create, add, commit, modify, commit).
* 2. Get the revisions history.
* 3. Verify versions' contents and the current version.
*/
@Test
public void testCurrentAndPreviousRevisions() throws Exception {
int versions = 0;
fillFile(myProjectDir, new String[]{ AFILE }, INITIAL_FILE_CONTENT);
addAll();
commitAll("initial content");
versions++;
fillFile(myProjectDir, new String[] { AFILE} , UPDATED_FILE_CONTENT);
commitAll("updated content");
versions++;
final VcsHistorySession session = getHistorySession(AFILE);
final List<VcsFileRevision> revisions = session.getRevisionList();
for (VcsFileRevision rev : revisions) {
rev.loadContent();
}
assertEquals(revisions.size(), versions);
assertTrue(session.isCurrentRevision(revisions.get(0).getRevisionNumber()));
assertEquals(revisions.get(0).getContent(), UPDATED_FILE_CONTENT.getBytes());
assertEquals(revisions.get(1).getContent(), INITIAL_FILE_CONTENT.getBytes());
}
/**
* 1. Make initial version of a file (create, add, commit).
* 2. Rename file (rename, commit).
* 3. Update file (modify, commit).
* 4. Get the file history.
* 5. Verify revision contents and the current revision.
*/
@Test
public void renameShouldPreserveFileHistory() throws Exception {
int versions = 0;
fillFile(myProjectDir, new String[]{ AFILE }, INITIAL_FILE_CONTENT);
addAll();
commitAll("initial content");
versions++;
runHgOnProjectRepo("rename", AFILE, BFILE);
commitAll("file renamed");
versions++;
fillFile(myProjectDir, new String[]{ BFILE }, UPDATED_FILE_CONTENT);
commitAll("updated content");
versions++;
final VcsHistorySession session = getHistorySession(BFILE);
final List<VcsFileRevision> revisions = session.getRevisionList();
loadAllRevisions(revisions);
assertEquals(revisions.size(), versions);
assertTrue(session.isCurrentRevision(revisions.get(0).getRevisionNumber()));
assertEquals(revisions.get(0).getContent(), UPDATED_FILE_CONTENT.getBytes());
assertEquals(revisions.get(2).getContent(), INITIAL_FILE_CONTENT.getBytes());
}
@Test
public void locallyRenamedFileShouldGetHistory() throws Exception {
int versions = 0;
fillFile(myProjectDir, new String[]{ AFILE }, INITIAL_FILE_CONTENT);
addAll();
commitAll("initial content");
versions++;
fillFile(myProjectDir, new String[]{AFILE}, UPDATED_FILE_CONTENT);
commitAll("updated content");
versions++;
runHgOnProjectRepo("rename", AFILE, BFILE);
//don't commit
refreshVfs();
ChangeListManager.getInstance(myProject).ensureUpToDate(false);
final VcsHistorySession session = getHistorySession(BFILE);
final List<VcsFileRevision> revisions = session.getRevisionList();
for (VcsFileRevision rev : revisions) {
rev.loadContent();
}
assertEquals(revisions.size(), versions);
assertTrue(session.isCurrentRevision(revisions.get(0).getRevisionNumber()));
assertEquals(revisions.get(0).getContent(), UPDATED_FILE_CONTENT.getBytes());
assertEquals(revisions.get(1).getContent(), INITIAL_FILE_CONTENT.getBytes());
}
private static void loadAllRevisions(Collection<VcsFileRevision> revisions) throws Exception {
for (VcsFileRevision rev : revisions) {
rev.loadContent();
}
}
private VcsHistorySession getHistorySession(String relativePath) throws VcsException {
return HgVcs.getInstance(myProject).getVcsHistoryProvider().createSessionFor(VcsUtil.getFilePath(new File(myProjectDir, relativePath), false));
}
}