blob: fc8a55ba0a11160096f42cb85c5e6fb753bd9ddf [file] [log] [blame]
/*******************************************************************************
* 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.swtbot.swt.finder.waits.Conditions.shellIsActive;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.eclipse.core.commands.Command;
import org.eclipse.egit.gitflow.ui.internal.UIText;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.internal.repository.RepositoriesView;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotCommand;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests for the Gitflow plugin.xml expressions, property testers, AdapterFactories, etc.
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class CommandEnablementTest extends AbstractGitflowHandlerTest {
private static final String FEATURE_START_CMD = "org.eclipse.egit.gitflow.ui.command.featureStart";
private static final String FEATURE_FINISH_CMD = "org.eclipse.egit.gitflow.ui.command.featureFinish";
private static final String RELEASE_START_CMD = "org.eclipse.egit.gitflow.ui.command.releaseStart";
private static final String RELEASE_END_CMD = "org.eclipse.egit.gitflow.ui.command.releaseFinish";
private static final String HOTFIX_START_CMD = "org.eclipse.egit.gitflow.ui.command.hotfixStart";
private static final String HOTFIX_END_CMD = "org.eclipse.egit.gitflow.ui.command.hotfixFinish";
@Test
public void testPackageExplorerStartFinishEnablement() throws Exception {
selectPackageExplorerItem(0);
assertAllCommandsDisabled();
init();
assertAllCommandsEnabledAndExecutable();
}
@Test
public void testRepositoryViewStartFinishEnablement() throws Exception {
initRepositoriesView();
selectRepositoryInView(0);
assertAllCommandsDisabled();
init();
assertAllCommandsEnabledAndExecutable();
}
private void selectPackageExplorerItem(int index) {
SWTBotTree explorerTree = TestUtil.getExplorerTree();
PlatformUI.getWorkbench().getDisplay()
.syncExec(() -> explorerTree.select(index));
}
private void selectRepositoryInView(int index) {
SWTBotTree repoTree = getRepositoryTree();
PlatformUI.getWorkbench().getDisplay()
.syncExec(() -> repoTree.select(index));
}
private void assertAllCommandsEnabledAndExecutable() throws Exception {
testCommand(FEATURE_START_CMD, FEATURE_FINISH_CMD, UIText.FeatureStartHandler_provideFeatureName);
testCommand(RELEASE_START_CMD, RELEASE_END_CMD, UIText.ReleaseStartHandler_provideReleaseName);
testCommand(HOTFIX_START_CMD, HOTFIX_END_CMD, UIText.HotfixStartHandler_provideHotfixName);
}
private void assertAllCommandsDisabled() {
assertCommandEnablement(FEATURE_START_CMD, false);
assertCommandEnablement(RELEASE_START_CMD, false);
assertCommandEnablement(HOTFIX_START_CMD, false);
}
private void initRepositoriesView() throws IOException {
Activator.getDefault().getRepositoryUtil()
.addConfiguredRepository(repositoryFile);
repository = org.eclipse.egit.core.Activator.getDefault()
.getRepositoryCache().lookupRepository(repositoryFile);
}
public static SWTBotTree getRepositoryTree() {
SWTBotView view = TestUtil.showView(RepositoriesView.VIEW_ID);
return view.bot().tree();
}
private void testCommand(String startCommandId, String finishCommandId, String dialogTitle) throws Exception {
assertCommandEnablement(startCommandId, true);
assertCommandOpensDialog(startCommandId, dialogTitle);
assertCommandEnablement(finishCommandId, false);
}
private void assertCommandOpensDialog(String startCommandId,
String dialogTitle) throws Exception {
runCommand(startCommandId);
bot.waitUntil(shellIsActive(dialogTitle));
bot.button("Cancel").click();
}
private void runCommand(String commandId) throws Exception {
final Command command = getCommandService().getCommand(commandId);
SWTBotCommand swtBotCommand = new SWTBotCommand(command);
swtBotCommand.click();
}
@SuppressWarnings("boxing")
private void assertCommandEnablement(String id, boolean enablement) {
ICommandService service = getCommandService();
Command command = service.getCommand(id);
assertTrue(command.isDefined());
assertTrue(command.isHandled());
assertEquals(enablement, command.isEnabled());
}
private ICommandService getCommandService() {
return PlatformUI.getWorkbench().getService(ICommandService.class);
}
}