blob: 6b98e8312b0805b64ea534b4b9966d8e1bfb57de [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.rcp.util;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.IWorkbenchConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
/**
* This advisor adds the ability to exit the workbench after it has started up. This is done
* with a call to close from within the advisor's event idle loop. The number of times the
* idle is called before exiting can be configured. Test cases should subclass this advisor
* and add their own callback methods if needed.
*
* @since 3.1
*/
public class RCPTestWorkbenchAdvisor extends WorkbenchAdvisor {
/** Default value of -1 causes the option to be ignored. */
private int idleBeforeExit = -1;
public RCPTestWorkbenchAdvisor() {
// default value means the advisor will not trigger the workbench to close
this.idleBeforeExit = -1;
}
public RCPTestWorkbenchAdvisor(int idleBeforeExit) {
this.idleBeforeExit = idleBeforeExit;
}
/* (non-Javadoc)
* @see org.eclipse.ui.application.WorkbenchAdvisor#initialize(org.eclipse.ui.application.IWorkbenchConfigurer)
*/
public void initialize(IWorkbenchConfigurer configurer) {
super.initialize(configurer);
// The RCP tests are currently run in the context of the Platform product, which specifies
// the Resource perspective as the default, and also reports progress on startup.
// We don't want either in effect when running the RCP tests.
// Also disable intro.
IPreferenceStore prefs = PlatformUI.getPreferenceStore();
prefs.setValue(IWorkbenchPreferenceConstants.DEFAULT_PERSPECTIVE_ID, "");
prefs.setValue(IWorkbenchPreferenceConstants.SHOW_PROGRESS_ON_STARTUP, false);
prefs.setValue(IWorkbenchPreferenceConstants.SHOW_INTRO, false);
}
/* (non-Javadoc)
* @see org.eclipse.ui.application.WorkbenchAdvisor#getInitialWindowPerspectiveId()
*/
public String getInitialWindowPerspectiveId() {
return EmptyPerspective.PERSP_ID;
}
public void eventLoopIdle(final Display display) {
// Bug 107369: RCP test suite hangs on GTK
if (idleBeforeExit!=-1 && --idleBeforeExit <= 0)
PlatformUI.getWorkbench().close();
// bug 73184: On the mac the parent eventLoopIdle will put the display to sleep
// until there are events (e.g., mouse jiggled).
// if (!"carbon".equals(SWT.getPlatform()))
// super.eventLoopIdle(display);
if (idleBeforeExit == -1)
return;
}
}