/*******************************************************************************
* Copyright (c) 2013, 2016 Robin Stocker <robin@nibor.org> and others.
* 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.internal.push;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.eclipse.egit.ui.JobFamilies;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.test.ContextMenuHelper;
import org.eclipse.egit.ui.test.JobJoiner;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotCombo;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
public class PushBranchWizardTester {
private final SWTBot wizard;
public static PushBranchWizardTester startWizard(SWTBotTree projectTree,
String branchName) {
String pushBranchMenu = branchName.equals(Constants.HEAD)
? UIText.PushMenu_PushHEAD
: NLS.bind(UIText.PushMenu_PushBranch, branchName);
ContextMenuHelper.clickContextMenu(projectTree, "Team", pushBranchMenu);
return forBranchName(branchName);
}
public static PushBranchWizardTester forBranchName(String branchName) {
SWTWorkbenchBot bot = new SWTWorkbenchBot();
String title = branchName.equals(Constants.HEAD)
? UIText.PushCommitHandler_pushCommitTitle
: MessageFormat.format(UIText.PushBranchWizard_WindowTitle,
branchName);
SWTBot wizard = bot.shell(title).bot();
return new PushBranchWizardTester(wizard);
}
public PushBranchWizardTester(SWTBot wizard) {
this.wizard = wizard;
}
public void selectRemote(String remoteName) {
SWTBotCombo remoteCombo = wizard
.comboBoxWithLabel(UIText.PushBranchPage_RemoteLabel);
String[] items = remoteCombo.items();
for (String item : items) {
if (item.startsWith(remoteName + ":")) {
remoteCombo.setSelection(item);
return;
}
}
throw new IllegalStateException("Could not select remote '"
+ remoteName + "', items were: " + Arrays.toString(items));
}
public void selectNewRemoteOnBranchPage(String remoteName, String uri) {
wizard.button(UIText.PushBranchPage_NewRemoteButton).click();
SWTBot addRemoteWizard = wizard.shell(UIText.AddRemoteWizard_Title)
.bot();
setRemoteNameAndUri(remoteName, uri, addRemoteWizard);
addRemoteWizard.button(IDialogConstants.FINISH_LABEL).click();
}
public void enterRemoteOnInitialPage(String remoteName, String uri) {
setRemoteNameAndUri(remoteName, uri, wizard);
}
private void setRemoteNameAndUri(String remoteName, String uri,
SWTBot remotePage) {
SWTBotText remoteNameText = remotePage
.textWithLabel(UIText.AddRemotePage_RemoteNameLabel);
remoteNameText.setText(remoteName);
SWTBotText uriText = remotePage
.textWithLabel(UIText.RepositorySelectionPage_promptURI
+ ":");
uriText.setText(uri);
}
public void enterBranchName(String branchName) {
wizard.textWithLabel(UIText.PushBranchPage_RemoteBranchNameLabel)
.setText(
branchName);
}
public void assertBranchName(String branchName) {
assertEquals(branchName,
wizard.textWithLabel(
UIText.PushBranchPage_RemoteBranchNameLabel)
.getText());
}
public void deselectConfigureUpstream() {
wizard.checkBox(UIText.UpstreamConfigComponent_ConfigureUpstreamCheck)
.deselect();
}
public void selectMerge() {
wizard.checkBox(UIText.UpstreamConfigComponent_ConfigureUpstreamCheck)
.select();
wizard.comboBoxWithLabel(UIText.BranchRebaseModeCombo_RebaseModeLabel)
.setSelection(UIText.BranchRebaseMode_None);
}
public void selectRebase() {
wizard.checkBox(UIText.UpstreamConfigComponent_ConfigureUpstreamCheck)
.select();
wizard.comboBoxWithLabel(UIText.BranchRebaseModeCombo_RebaseModeLabel)
.setSelection(UIText.BranchRebaseMode_Rebase);
}
public void assertConfigureUpstreamSelected() {
assertTrue(wizard.checkBox(
UIText.UpstreamConfigComponent_ConfigureUpstreamCheck)
.isChecked());
}
public void assertMergeSelected() {
assertConfigureUpstreamSelected();
assertEquals(UIText.BranchRebaseMode_None, wizard
.comboBoxWithLabel(UIText.BranchRebaseModeCombo_RebaseModeLabel)
.selection());
}
public void assertRebaseSelected() {
assertConfigureUpstreamSelected();
assertEquals(UIText.BranchRebaseMode_Rebase, wizard
.comboBoxWithLabel(UIText.BranchRebaseModeCombo_RebaseModeLabel)
.selection());
}
public boolean isUpstreamConfigOverwriteWarningShown() {
return wizard.text(1).getText()
.contains(UIText.PushBranchPage_UpstreamConfigOverwriteWarning);
}
public void next() {
wizard.button(IDialogConstants.NEXT_LABEL).click();
}
public void finish() {
JobJoiner jobJoiner = JobJoiner.startListening(JobFamilies.PUSH, 60,
TimeUnit.SECONDS);
wizard.button(IDialogConstants.FINISH_LABEL).click();
jobJoiner.join();
}
}