/*******************************************************************************
* Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
*
* 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.ui.gitflow;
import static org.eclipse.egit.gitflow.ui.internal.UIPreferences.FEATURE_FINISH_KEEP_BRANCH;
import static org.eclipse.egit.gitflow.ui.internal.UIPreferences.FEATURE_FINISH_SQUASH;
import static org.eclipse.jgit.lib.Constants.R_HEADS;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.egit.gitflow.GitFlowRepository;
import org.eclipse.egit.gitflow.op.FeatureCheckoutOperation;
import org.eclipse.egit.gitflow.op.FeatureStartOperation;
import org.eclipse.egit.gitflow.op.InitOperation;
import org.eclipse.egit.gitflow.ui.Activator;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jgit.api.CommitCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.AbortedByHookException;
import org.eclipse.jgit.api.errors.ConcurrentRefUpdateException;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.NoHeadException;
import org.eclipse.jgit.api.errors.NoMessageException;
import org.eclipse.jgit.api.errors.UnmergedPathsException;
import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
/**
* Tests for the Team->Gitflow
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public abstract class AbstractGitflowHandlerTest extends LocalRepositoryTestCase {
protected static final String DEVELOP = "develop";
protected static final String FEATURE_NAME = "myFeature";
protected Repository repository;
protected File repositoryFile;
@Before
public void setup() throws Exception {
repositoryFile = createProjectAndCommitToRepository();
repository = lookupRepository(repositoryFile);
resetPreferences();
}
@After
public void teardown() {
repository = null;
}
private void resetPreferences() {
IPreferenceStore prefStore = Activator.getDefault()
.getPreferenceStore();
prefStore.setValue(FEATURE_FINISH_SQUASH, false);
prefStore.setValue(FEATURE_FINISH_KEEP_BRANCH, false);
}
protected RevCommit setContentAddAndCommit(String newContent) throws Exception, GitAPIException, NoHeadException,
NoMessageException, UnmergedPathsException, ConcurrentRefUpdateException, WrongRepositoryStateException,
AbortedByHookException, IOException {
setTestFileContent(newContent);
Git git = Git.wrap(repository);
git.add().addFilepattern(".").call();
CommitCommand commit = git.commit().setMessage(newContent);
commit.setAuthor(TestUtil.TESTCOMMITTER_NAME, TestUtil.TESTCOMMITTER_EMAIL);
commit.setCommitter(TestUtil.TESTCOMMITTER_NAME, TestUtil.TESTCOMMITTER_EMAIL);
return commit.call();
}
protected void createFeature(String featureName) throws CoreException {
new FeatureStartOperation(new GitFlowRepository(repository),
featureName).execute(null);
}
protected void checkoutFeature(String featureName) throws CoreException {
new FeatureCheckoutOperation(new GitFlowRepository(repository),
featureName).execute(null);
}
protected Ref findBranch(String branchName) throws IOException {
return repository.exactRef(R_HEADS + branchName);
}
protected void init() throws CoreException {
new InitOperation(repository).execute(null);
}
}