package ut.com.atlassian.jgitflow.core.testutils;
import java.util.HashMap;
import java.util.Map;
import com.atlassian.jgitflow.core.extension.ExtensionCommand;
import com.atlassian.jgitflow.core.extension.ExtensionFailStrategy;
import com.google.common.collect.Lists;
public abstract class BaseExtensionForTests<T>
{
public static final String BEFORE_FETCH = "beforeFetch";
public static final String AFTER_FETCH = "afterFetch";
public static final String BEFORE = "before";
public static final String AFTER = "after";
public static final String BEFORE_CREATE_BRANCH = "beforeCreateBranch";
public static final String AFTER_CREATE_BRANCH = "afterCreateBranch";
public static final String AFTER_PUSH = "afterPush";
public static final String BEFORE_REBASE = "beforeRebase";
public static final String AFTER_REBASE = "afterRebase";
public static final String BEFORE_DEVELOP_CHECKOUT = "beforeDevelopCheckout";
public static final String AFTER_DEVELOP_CHECKOUT = "afterDevelopCheckout";
public static final String BEFORE_DEVELOP_MERGE = "beforeDevelopMerge";
public static final String AFTER_DEVELOP_MERGE = "afterDevelopMerge";
public static final String BEFORE_MASTER_CHECKOUT = "beforeMasterCheckout";
public static final String AFTER_MASTER_CHECKOUT = "afterMasterCheckout";
public static final String BEFORE_MASTER_MERGE = "beforeMasterMerge";
public static final String AFTER_MASTER_MERGE = "afterMasterMerge";
public static final String BEFORE_RELEASE_CHECKOUT = "beforeReleaseCheckout";
public static final String AFTER_RELEASE_CHECKOUT = "afterReleaseCheckout";
public static final String BEFORE_RELEASE_MERGE = "beforeReleaseMerge";
public static final String AFTER_RELEASE_MERGE = "afterReleaseMerge";
public static final String AFTER_TOPIC_CHECKOUT = "afterTopicCheckout";
public static final String BEFORE_TAG = "beforeTag";
public static final String AFTER_TAG = "afterTag";
private final Map<String, WasCalledExtension> methodMap;
protected BaseExtensionForTests()
{
this.methodMap = new HashMap<String, WasCalledExtension>();
}
public T withException(String methodName, ExtensionFailStrategy failStrategy)
{
createExtensionWithException(methodName, failStrategy);
return (T) this;
}
public Iterable<ExtensionCommand> beforeFetch()
{
return Lists.<ExtensionCommand>newArrayList(createExtension(BEFORE_FETCH));
}
public Iterable<ExtensionCommand> afterFetch()
{
return Lists.<ExtensionCommand>newArrayList(createExtension(AFTER_FETCH));
}
public Iterable<ExtensionCommand> before()
{
return Lists.<ExtensionCommand>newArrayList(createExtension(BEFORE));
}
public Iterable<ExtensionCommand> after()
{
return Lists.<ExtensionCommand>newArrayList(createExtension(AFTER));
}
public boolean wasCalled(String methodName)
{
if (methodMap.containsKey(methodName))
{
return methodMap.get(methodName).wasCalled();
}
return false;
}
protected void createExtensionWithException(String methodName, ExtensionFailStrategy failStrategy)
{
WasCalledExtension extension = new WasCalledExtension(true);
extension.setFailStrategy(failStrategy);
methodMap.put(methodName, extension);
}
protected ExtensionCommand createExtension(String methodName)
{
if (methodMap.containsKey(methodName))
{
return methodMap.get(methodName);
}
WasCalledExtension extension = new WasCalledExtension();
methodMap.put(methodName, extension);
return extension;
}
}