blob: e0707dd2b01d4fd3f6c6e3945f96afe387b4cda4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Tasktop Technologies 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
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tests.ui.discovery;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.mylyn.tests.ui.util.CompoundCondition;
import org.eclipse.mylyn.tests.ui.util.HasId;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.results.Result;
import org.eclipse.swtbot.swt.finder.waits.Conditions;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotCheckBox;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
import org.eclipse.ui.PlatformUI;
import org.hamcrest.Matcher;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* tests that drive the Connector Discovery UI
*
* @author David Green
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class DiscoverySystemTest {
private static final String KEY_CONNECTOR_ID = "connectorId";
private static SWTWorkbenchBot bot;
@BeforeClass
public static void beforeClass() throws Exception {
bot = new SWTWorkbenchBot();
try {
bot.viewByTitle("Welcome").close();
} catch (WidgetNotFoundException e) {
// ignore
}
}
@After
public void after() {
Shell mainShell = UIThreadRunnable.syncExec(new Result<Shell>() {
public Shell run() {
return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
}
});
SWTBotShell[] shells = bot.shells();
for (SWTBotShell shell : shells) {
if (shell.widget != mainShell) {
shell.close();
}
}
}
@Test
public void testSelectOneConnectorAndActivateP2Installer() {
activateDiscoveryUi();
bot.checkBoxWithId(KEY_CONNECTOR_ID, "org.eclipse.mylyn.trac_feature").click();
bot.button("&Finish").click();
// P2 takes over here. Just verify that the P2 installer is activated and that the selected connector is
// visible and checked.
SWTBotShell shell = bot.shell("Install");
shell.activate();
final SWTBotTable table = bot.table();
int rowCount = table.rowCount();
assertTrue(rowCount > 0);
int tracRow = -1;
for (int x = 0; x < rowCount; ++x) {
String cellData = table.cell(x, 0);
if (cellData.indexOf("Trac") != -1) {
tracRow = x;
break;
}
}
assertTrue("Trac wasn't in the p2 ui", tracRow >= 0);
bot.button("Cancel").click();
}
@Test
public void testAllConnectorsEnabled() {
activateDiscoveryUi();
List<? extends Widget> widgets = allConnectorCheckboxes();
assertFalse(widgets.isEmpty());
List<String> disabledWidgets = new ArrayList<String>();
for (final Widget widget : widgets) {
boolean enabled = new SWTBotCheckBox((Button) widget).isEnabled();
if (!enabled) {
String data = UIThreadRunnable.syncExec(new Result<String>() {
public String run() {
return (String) (widget).getData(KEY_CONNECTOR_ID);
}
});
disabledWidgets.add(data);
}
}
if (!disabledWidgets.isEmpty()) {
fail(String.format("%s connectors were disabled: %s", disabledWidgets.size(), disabledWidgets));
}
}
@SuppressWarnings("unchecked")
private List<? extends Widget> allConnectorCheckboxes() {
return bot.widgets(org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.allOf(
org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.widgetOfType(Button.class),
org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.withStyle(SWT.CHECK, "SWT.CHECK"),
new HasId(KEY_CONNECTOR_ID)));
}
private void activateDiscoveryUi() {
showTaskRepositoriesView();
bot.viewByTitle("Task Repositories").toolbarButton("Add Task Repository...").click();
SWTBotShell shell = bot.shell("Add Task Repository");
shell.activate();
bot.button("Install More Connectors...").click();
shell = bot.shell("Install Connectors");
shell.activate();
Matcher<Shell> shellMatcher = org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.withText("Connector Discovery Error");
CompoundCondition completeOrErrorCondition = CompoundCondition.or(Conditions.waitForWidget(
org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.withId("discoveryComplete", "true"),
shell.widget), Conditions.waitForShell(shellMatcher));
bot.waitUntil(completeOrErrorCondition, 10000L);
if (!completeOrErrorCondition.getResults()[0]) {
fail("Connector discovery failed");
}
}
private void showTaskRepositoriesView() {
bot.menu("Window").menu("Show View").menu("Other...").click();
SWTBotShell shell = bot.shell("Show View");
shell.activate();
bot.tree().expandNode("Tasks").select("Task Repositories");
bot.button("OK").click();
}
}