blob: de7579a2be08fae826a4ff7647da13ad65e0ed53 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.operations;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.core.commands.operations.IOperationHistory;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.tests.harness.util.UITestCase;
/**
* Stress tests the Operations Framework API to find any interaction problems
* with the workbench.
*
* @since 3.1
*/
public class WorkbenchOperationStressTests extends UITestCase {
static int STRESS_TEST_REPETITIONS = 2000;
static int OPEN_WINDOW_REPETITIONS = 2;
/**
* @param testName
*/
public WorkbenchOperationStressTests(String name) {
super(name);
}
/*
* Exercise the operations history just before closing the workbench. This
* can find problems with the action handlers assuming a workbench is open.
*
* In progress - this still isn't catching the case from the bug, but is a good
* start.
*/
public void test115761() throws ExecutionException {
for (int j = 0; j < OPEN_WINDOW_REPETITIONS; j++) {
IWorkbenchWindow secondWorkbenchWindow = null;
secondWorkbenchWindow = openTestWindow(IDE.RESOURCE_PERSPECTIVE_ID);
Display display = secondWorkbenchWindow.getShell().getDisplay();
IOperationHistory workbenchHistory = secondWorkbenchWindow
.getWorkbench().getOperationSupport().getOperationHistory();
IUndoContext workbenchContext = secondWorkbenchWindow
.getWorkbench().getOperationSupport().getUndoContext();
workbenchHistory.setLimit(workbenchContext, STRESS_TEST_REPETITIONS);
for (int i = 0; i < STRESS_TEST_REPETITIONS; i++) {
IUndoableOperation op = new TestOperation("test");
op.addContext(workbenchContext);
workbenchHistory.execute(op, null, null);
}
for (int i = 0; i < STRESS_TEST_REPETITIONS; i++) {
if (i % 2 == 0) {
workbenchHistory.undo(workbenchContext, null, null);
}
if (i % 5 == 0) {
workbenchHistory.redo(workbenchContext, null, null);
}
}
secondWorkbenchWindow.close();
boolean go = true;
while (go) {
go = display.readAndDispatch();
}
}
}
}