Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java')
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java
new file mode 100644
index 0000000000..5da8306d4e
--- /dev/null
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ResetOperationTest.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.core.test.op;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.InputStream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.core.op.ResetOperation;
+import org.eclipse.egit.core.test.GitTestCase;
+import org.eclipse.egit.core.test.TestRepository;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ResetOperationTest extends GitTestCase {
+
+ TestRepository testRepository;
+
+ Repository repository;
+
+ // members filled by setupRepository()
+ RevCommit initialCommit;
+
+ File projectFile;
+
+ IFile untrackedFile;
+
+ IFile fileInIndex;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ testRepository = new TestRepository(gitDir);
+ repository = testRepository.getRepository();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ testRepository.dispose();
+ repository = null;
+ super.tearDown();
+ }
+
+ @Test
+ public void testHardReset() throws Exception {
+ setupRepository();
+ String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ new ResetOperation(repository, initialCommit.getName(),
+ ResetOperation.ResetType.HARD).execute(null);
+ // .project must disappear, related Eclipse project must be deleted
+ assertFalse(projectFile.exists());
+ assertFalse(project.getProject().exists());
+ // check if HEAD points to initial commit now
+ assertTrue(repository.resolve("HEAD").equals(initialCommit));
+ // check if files were removed
+ assertFalse(untrackedFile.exists());
+ assertFalse(fileInIndex.exists());
+ // fileInIndex must no longer be in HEAD and in the index
+ assertFalse(testRepository.inHead(fileInIndexPath));
+ assertFalse(testRepository.inIndex(fileInIndexPath));
+ }
+
+ @Test
+ public void testSoftReset() throws Exception {
+ setupRepository();
+ String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ new ResetOperation(repository, initialCommit.getName(),
+ ResetOperation.ResetType.SOFT).execute(null);
+ // .project must remain
+ assertTrue(projectFile.exists());
+ assertTrue(project.getProject().exists());
+ // check if HEAD points to initial commit now
+ assertTrue(repository.resolve("HEAD").equals(initialCommit));
+ // untrackedFile and fileInIndex must still exist
+ assertTrue(untrackedFile.exists());
+ assertTrue(fileInIndex.exists());
+ // fileInIndex must no longer be in HEAD
+ assertFalse(testRepository.inHead(fileInIndexPath));
+ // fileInIndex must exist in the index
+ assertTrue(testRepository.inIndex(fileInIndexPath));
+ }
+
+ @Test
+ public void testMixedReset() throws Exception {
+ setupRepository();
+ String fileInIndexPath = fileInIndex.getLocation().toOSString();
+ new ResetOperation(repository, initialCommit.getName(),
+ ResetOperation.ResetType.MIXED).execute(null);
+ // .project must remain
+ assertTrue(projectFile.exists());
+ assertTrue(project.getProject().exists());
+ // check if HEAD points to initial commit now
+ assertTrue(repository.resolve("HEAD").equals(initialCommit));
+ // untrackedFile and fileInIndex must still exist
+ assertTrue(untrackedFile.exists());
+ assertTrue(fileInIndex.exists());
+ // fileInIndex must no longer be in HEAD
+ assertFalse(testRepository.inHead(fileInIndexPath));
+ // fileInIndex must not in the index
+ assertFalse(testRepository.inIndex(fileInIndexPath));
+ }
+
+ private void setupRepository() throws Exception {
+ // create first commit containing a dummy file
+ initialCommit = testRepository
+ .createInitialCommit("testResetOperation\n\nfirst commit\n");
+ // add .project to version control
+ String path = project.getProject().getLocation().append(".project")
+ .toOSString();
+ projectFile = new File(path);
+ testRepository.track(projectFile);
+ // add fileInIndex to version control
+ fileInIndex = createFile("fileInIndex");
+ testRepository.track(new File(fileInIndex.getLocation().toOSString()));
+ testRepository.commit("Add .project file");
+ // modify fileInIndex and add it to the index
+ InputStream stream = new ByteArrayInputStream(new byte[] { 'I', 'n',
+ 'd', 'e', 'x' });
+ fileInIndex.setContents(stream, 0, null);
+ testRepository.addToIndex(fileInIndex);
+ // create an untracked file
+ untrackedFile = createFile("untrackedFile");
+ }
+
+ /**
+ * create a file with the given name in the root folder of testproject
+ *
+ * @param name
+ * name of file
+ * @return new file
+ * @throws CoreException
+ */
+ private IFile createFile(String name) throws CoreException {
+ IFile file = project.project.getFile(name);
+ file.create(
+ new ByteArrayInputStream(new byte[] { 'T', 'e', 's', 't' }),
+ true, null);
+ return file;
+ }
+}

Back to the top