| /******************************************************************************* |
| * 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); |
| } |
| } |