/******************************************************************************* * Copyright (c) 2000, 2006 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.performance; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.text.IDocument; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; /** * @since 3.1 */ public class EditorTestHelper { public static IEditorPart openInEditor(IFile file, boolean runEventLoop) throws PartInitException { IEditorPart part= IDE.openEditor(getActivePage(), file); if (runEventLoop) runEventQueue(part); return part; } public static IEditorPart openInEditor(IFile file, String editorId, boolean runEventLoop) throws PartInitException { IEditorPart part= IDE.openEditor(getActivePage(), file, editorId); if (runEventLoop) runEventQueue(part); return part; } public static IDocument getDocument(ITextEditor editor) { IDocumentProvider provider= editor.getDocumentProvider(); IEditorInput input= editor.getEditorInput(); return provider.getDocument(input); } public static void revertEditor(ITextEditor editor, boolean runEventQueue) { editor.doRevertToSaved(); if (runEventQueue) runEventQueue(editor); } public static void closeAllEditors() { IWorkbenchPage page= getActivePage(); if (page != null) page.closeAllEditors(false); } public static void runEventQueue() { IWorkbenchWindow window= getActiveWorkbenchWindow(); if (window != null) runEventQueue(window.getShell()); } public static void runEventQueue(IWorkbenchPart part) { runEventQueue(part.getSite().getShell()); } public static void runEventQueue(Shell shell) { while (shell.getDisplay().readAndDispatch()); } public static void runEventQueue(long minTime) { long nextCheck= System.currentTimeMillis() + minTime; while (System.currentTimeMillis() < nextCheck) { runEventQueue(); sleep(1); } } public static IWorkbenchWindow getActiveWorkbenchWindow() { return PlatformUI.getWorkbench().getActiveWorkbenchWindow(); } public static IWorkbenchPage getActivePage() { IWorkbenchWindow window= getActiveWorkbenchWindow(); return window != null ? window.getActivePage() : null; } public static Display getActiveDisplay() { IWorkbenchWindow window= getActiveWorkbenchWindow(); return window != null ? window.getShell().getDisplay() : null; } public static boolean calmDown(long minTime, long maxTime, long intervalTime) { long startTime= System.currentTimeMillis() + minTime; runEventQueue(); while (System.currentTimeMillis() < startTime) runEventQueue(intervalTime); long endTime= maxTime > 0 ? System.currentTimeMillis() + maxTime : Long.MAX_VALUE; boolean calm= isCalm(); while (!calm && System.currentTimeMillis() < endTime) { runEventQueue(intervalTime); calm= isCalm(); } // System.out.println("--------------------------------------------------"); return calm; } public static void sleep(int intervalTime) { try { Thread.sleep(intervalTime); } catch (InterruptedException e) { e.printStackTrace(); } } public static boolean isCalm() { IJobManager jobManager= Platform.getJobManager(); Job[] jobs= jobManager.find(null); for (int i= 0; i < jobs.length; i++) { Job job= jobs[i]; int state= job.getState(); // System.out.println(job.getName() + ": " + getStateName(state)); if (state == Job.RUNNING || state == Job.WAITING) { // System.out.println(); return false; } } // System.out.println(); return true; } // private static String getStateName(int state) { // switch (state) { // case Job.RUNNING: return "RUNNING"; // case Job.WAITING: return "WAITING"; // case Job.SLEEPING: return "SLEEPING"; // case Job.NONE: return "NONE"; // default: return "unknown " + state; // } // } public static boolean showView(String viewId) throws PartInitException { IWorkbenchPage activePage= getActivePage(); IViewReference view= activePage.findViewReference(viewId); boolean notShown= view == null; if (notShown) activePage.showView(viewId); return notShown; } public static boolean hideView(String viewId) { IWorkbenchPage activePage= getActivePage(); IViewReference view= activePage.findViewReference(viewId); boolean shown= view != null; if (shown) activePage.hideView(view); return shown; } public static void bringToTop() { getActiveWorkbenchWindow().getShell().forceActive(); } }