/******************************************************************************* * Copyright (c) 2015, 2016 Red Hat, Inc. 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: * Red Hat Incorporated - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.application.tests; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; import org.eclipse.core.runtime.IPath; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.eclipse.swtbot.swt.finder.SWTBot; import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; import org.eclipse.swtbot.swt.finder.waits.Conditions; import org.eclipse.swtbot.swt.finder.waits.DefaultCondition; import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; import org.junit.After; import org.junit.AfterClass; public abstract class StandaloneTest { private static final String C_C_STAND_ALONE_DEBUGGER_TITLE = "Eclipse C/C++ Stand-alone Debugger"; private static final String DEBUG_NEW_EXECUTABLE_TITLE = "Debug New Executable"; protected static SWTBot bot; protected static String projectName; protected static SWTBotShell mainShell; protected static SWTBotView projectExplorer; private static final Logger fLogger = Logger.getRootLogger(); public static void init(String projectName) throws Exception { SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US"; SWTBotPreferences.TIMEOUT = 20000; fLogger.removeAllAppenders(); fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT)); bot = new SWTBot(); Utilities.getDefault().buildProject(projectName); final IPath executablePath = Utilities.getDefault().getProjectPath(projectName).append("a.out"); //$NON-NLS-1$ bot.waitUntil(new WaitForFileCondition(executablePath)); bot.waitUntil(Conditions.shellIsActive(DEBUG_NEW_EXECUTABLE_TITLE)); SWTBotShell executableShell = bot.shell(DEBUG_NEW_EXECUTABLE_TITLE); executableShell.setFocus(); executableShell.bot().textWithLabel("Binary: ").typeText(executablePath.toOSString()); executableShell.bot().button("OK").click(); bot.waitUntil(Conditions.shellIsActive(C_C_STAND_ALONE_DEBUGGER_TITLE)); mainShell = bot.shell(C_C_STAND_ALONE_DEBUGGER_TITLE); } @After public void cleanUp() { // SWTBotShell[] shells = bot.shells(); // for (final SWTBotShell shell : shells) { // if (!shell.equals(mainShell)) { // String shellTitle = shell.getText(); // if (shellTitle.length() > 0 // && !shellTitle.startsWith("Quick Access")) { // UIThreadRunnable.syncExec(new VoidResult() { // @Override // public void run() { // if (shell.widget.getParent() != null // && !shell.isOpen()) { // shell.close(); // } // } // }); // } // } // } // mainShell.activate(); } /** * Test class tear down method. */ @AfterClass public static void tearDown() { fLogger.removeAllAppenders(); } private static final class WaitForFileCondition extends DefaultCondition { private final IPath executablePath; private WaitForFileCondition(IPath executablePath) { this.executablePath = executablePath; } @Override public boolean test() throws Exception { return executablePath.toFile().exists(); } @Override public String getFailureMessage() { return "Could not find executable after build."; } } }