diff test/org/tmatesoft/hg/test/TestCommit.java @ 586:73c20c648c1f

HgCommitCommand initial support
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 26 Apr 2013 18:38:41 +0200
parents 78a9e26e670d
children 41218d84842a
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/TestCommit.java	Thu Apr 25 17:53:44 2013 +0200
+++ b/test/org/tmatesoft/hg/test/TestCommit.java	Fri Apr 26 18:38:41 2013 +0200
@@ -18,27 +18,29 @@
 
 import static org.junit.Assert.*;
 import static org.tmatesoft.hg.repo.HgRepository.*;
-import static org.tmatesoft.hg.repo.HgRepository.DEFAULT_BRANCH_NAME;
-import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
 import java.util.List;
 
 import org.junit.Test;
 import org.tmatesoft.hg.core.HgAddRemoveCommand;
 import org.tmatesoft.hg.core.HgCatCommand;
 import org.tmatesoft.hg.core.HgChangeset;
+import org.tmatesoft.hg.core.HgCommitCommand;
 import org.tmatesoft.hg.core.HgLogCommand;
+import org.tmatesoft.hg.core.HgRevertCommand;
+import org.tmatesoft.hg.core.HgStatus.Kind;
+import org.tmatesoft.hg.core.HgStatusCommand;
 import org.tmatesoft.hg.core.Nodeid;
 import org.tmatesoft.hg.internal.ByteArrayChannel;
+import org.tmatesoft.hg.internal.FileContentSupplier;
 import org.tmatesoft.hg.repo.CommitFacility;
 import org.tmatesoft.hg.repo.HgDataFile;
 import org.tmatesoft.hg.repo.HgLookup;
 import org.tmatesoft.hg.repo.HgRepository;
+import org.tmatesoft.hg.util.Outcome;
 import org.tmatesoft.hg.util.Path;
 
 /**
@@ -224,6 +226,53 @@
 		assertHgVerifyOk(repoLoc);
 	}
 	
+	@Test
+	public void testCommandBasics() throws Exception {
+		File repoLoc = RepoUtils.cloneRepoToTempLocation("log-1", "test-commit-cmd", false);
+		HgRepository hgRepo = new HgLookup().detect(repoLoc);
+		HgDataFile dfB = hgRepo.getFileNode("b");
+		assertTrue("[sanity]", dfB.exists());
+		File fileB = new File(repoLoc, "b");
+		assertTrue("[sanity]", fileB.canRead());
+		RepoUtils.modifyFileAppend(fileB, " 1 \n");
+
+		HgCommitCommand cmd = new HgCommitCommand(hgRepo);
+		assertFalse(cmd.isMergeCommit());
+		Outcome r = cmd.message("FIRST").execute();
+		assertTrue(r.isOk());
+		Nodeid c1 = cmd.getCommittedRevision();
+		
+		hgRepo = new HgLookup().detect(repoLoc);
+		//
+		new HgRevertCommand(hgRepo).file(dfB.getPath()).execute(); // FIXME Hack to emulate dirstate update
+		//
+		TestStatus.StatusCollector status = new TestStatus.StatusCollector();
+		new HgStatusCommand(hgRepo).defaults().execute(status);
+		assertTrue(status.getErrors().isEmpty());
+		assertTrue(status.get(Kind.Modified).isEmpty());
+		
+		HgDataFile dfD = hgRepo.getFileNode("d");
+		assertTrue("[sanity]", dfD.exists());
+		File fileD = new File(repoLoc, "d");
+		assertTrue("[sanity]", fileD.canRead());
+		//
+		RepoUtils.modifyFileAppend(fileD, " 1 \n");
+		cmd = new HgCommitCommand(hgRepo);
+		assertFalse(cmd.isMergeCommit());
+		r = cmd.message("SECOND").execute();
+		assertTrue(r.isOk());
+		Nodeid c2 = cmd.getCommittedRevision();
+		//
+		hgRepo = new HgLookup().detect(repoLoc);
+		int lastRev = hgRepo.getChangelog().getLastRevision();
+		List<HgChangeset> csets = new HgLogCommand(hgRepo).range(lastRev-1, lastRev).execute();
+		assertEquals(csets.get(0).getNodeid(), c1);
+		assertEquals(csets.get(1).getNodeid(), c2);
+		assertEquals(csets.get(0).getComment(), "FIRST");
+		assertEquals(csets.get(1).getComment(), "SECOND");
+		assertHgVerifyOk(repoLoc);
+	}
+	
 	private void assertHgVerifyOk(File repoLoc) throws InterruptedException, IOException {
 		ExecHelper verifyRun = new ExecHelper(new OutputParser.Stub(), repoLoc);
 		verifyRun.run("hg", "verify");
@@ -275,35 +324,4 @@
 			return count;
 		}
 	}
-	
-	static class FileContentSupplier implements CommitFacility.ByteDataSupplier {
-		private final FileChannel channel;
-		private IOException error;
-
-		public FileContentSupplier(File f) throws IOException {
-			if (!f.canRead()) {
-				throw new IOException(String.format("Can't read file %s", f));
-			}
-			channel = new FileInputStream(f).getChannel();
-		}
-
-		public int read(ByteBuffer buf) {
-			if (error != null) {
-				return -1;
-			}
-			try {
-				return channel.read(buf);
-			} catch (IOException ex) {
-				error = ex;
-			}
-			return -1;
-		}
-		
-		public void done() throws IOException {
-			channel.close();
-			if (error != null) {
-				throw error;
-			}
-		}
-	}
 }