/******************************************************************************* * Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> * Copyright (C) 2010, Ketan Padegaonkar <KetanPadegaonkar@gmail.com> * Copyright (C) 2010, Dariusz Luksza <dariusz@luksza.org> * * 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.common; import static org.eclipse.swtbot.swt.finder.waits.Conditions.shellCloses; import org.eclipse.egit.ui.internal.UIText; import org.eclipse.egit.ui.test.TestUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable; public class GitImportRepoWizard { private static final SWTWorkbenchBot bot = new SWTWorkbenchBot(); private static final TestUtil util = new TestUtil(); // TODO: speed it up by calling the wizard using direct eclipse API. public void openWizard() { bot.menu("File").menu("Import...").click(); bot.shell("Import").activate(); bot.tree().expandNode("Git").select("Projects from Git"); bot.button("Next >").click(); } public RepoPropertiesPage openRepoPropertiesPage() { bot.shell("Import Projects from Git").activate(); bot.tree().select(util.getPluginLocalizedValue("CloneUri.label")); bot.button("Next >").click(); TestUtil.waitUntilViewWithGivenTitleShows(UIText.GitCloneWizard_title); return new RepoPropertiesPage(); } public int configuredRepoCount() { bot.shell("Import Projects from Git").activate(); return bot.table(0).rowCount(); } public boolean containsRepo(String projectName) { SWTBotTable table = bot.table(0); int repoCount = configuredRepoCount(); for (int i = 0; i < repoCount; i++) { String rowName = table.getTableItem(i).getText(); if (rowName.contains(projectName)) return true; } return false; } public void selectAndCloneRepository(String repoName) throws Exception { SWTBotShell importShell = bot.shell("Import Projects from Git") .activate(); SWTBotTable table = bot.table(0); for (int i = 0; i < table.rowCount(); i++) { String rowName = table.getTableItem(i).getText(); if (rowName != null && rowName.startsWith(repoName)) { table.select(i); break; } } // TODO investigate why we need Thread.sleep here bot.button("Next >").click(); Thread.sleep(1000); // set the radio buttons properly pressAltAndChar(importShell, 'E'); Thread.sleep(1000); pressAltAndChar(importShell, 'a'); Thread.sleep(1000); bot.button("Next >").click(); Thread.sleep(1000); bot.button("Select All").click(); Thread.sleep(1000); } public void waitForCreate() { bot.button("Finish").click(); SWTBotShell shell = bot.shell("Import Projects from Git"); bot.waitUntil(shellCloses(shell), 120000); } // TODO: move this to some utility class private void pressAltAndChar(final SWTBotShell shell, final char charToPress) { final Display display = Display.getDefault(); display.syncExec(new Runnable() { @Override public void run() { Event evt = new Event(); // Alt down evt.type = SWT.KeyDown; evt.item = shell.widget; evt.keyCode = SWT.ALT; display.post(evt); // G down evt.keyCode = 0; evt.character = charToPress; display.post(evt); // G up evt.type = SWT.KeyUp; display.post(evt); // Alt up evt.keyCode = SWT.ALT; evt.character = ' '; display.post(evt); } }); } }