blob: 28e6e29936cf88fa5788d7a2a5e654e9fe6d0d5c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2012 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.jdt.ui.tests.performance.views;
import junit.extensions.TestSetup;
import junit.framework.Test;
import org.eclipse.jdt.testplugin.util.DisplayHelper;
import org.eclipse.test.OrderedTestSuite;
import org.eclipse.test.performance.Dimension;
import org.eclipse.test.performance.Performance;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.dialogs.TypeSelectionExtension;
import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
import org.eclipse.jdt.ui.tests.performance.SWTTestProject;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.util.CoreUtility;
public class OpenTypePerfTest extends JdtPerformanceTestCase {
private SelectionDialog fOpenTypeDialog;
private Shell fShell;
private static class MyTestSetup extends TestSetup {
private SWTTestProject fTestProject;
private boolean fAutoBuilding;
public MyTestSetup(Test test) {
super(test);
}
protected void setUp() throws Exception {
super.setUp();
fAutoBuilding= CoreUtility.setAutoBuilding(false);
fTestProject= new SWTTestProject();
}
protected void tearDown() throws Exception {
fTestProject.delete();
CoreUtility.setAutoBuilding(fAutoBuilding);
super.tearDown();
}
}
public static Test suite() throws Exception {
OrderedTestSuite testSuite= new OrderedTestSuite(
OpenTypePerfTest.class,
new String[] {
"testColdException",
"testWarmException",
"testWarmException10",
"testWarmS10",
"testWarmOpenSWT",
"testWarmOpenSWTHistory10",
});
return new MyTestSetup(testSuite);
}
public static Test setUpTest(Test someTest) {
return new MyTestSetup(someTest);
}
public OpenTypePerfTest(String name) {
super(name);
}
protected void setUp() throws Exception {
System.out.println("starting " + OpenTypePerfTest.class.getName() + "#" + getName());
super.setUp();
}
//---
public void testColdException() throws Exception {
//cold
joinBackgroudActivities();
try {
measureOpenType("*Exception");
} finally {
commitMeasurements();
assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
}
}
public void testWarmException() throws Exception {
//warm
joinBackgroudActivities();
try {
measureOpenType("*Exception");
} finally {
commitMeasurements();
Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 500);
}
}
public void testWarmException10() throws Exception {
//warm, repeated
joinBackgroudActivities();
try {
for (int i= 0; i < 10; i++) {
measureOpenType("*Exception");
}
} finally {
commitMeasurements();
assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
}
}
public void testWarmS10() throws Exception {
//warm, repeated, many matches
joinBackgroudActivities();
try {
for (int i= 0; i < 10; i++) {
measureOpenType("S");
}
} finally {
commitMeasurements();
assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
}
}
public void testWarmOpenSWT() throws Exception {
//warm, add SWT to history
joinBackgroudActivities();
try {
measureOpenType("SWT", true);
} finally {
commitMeasurements();
Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 500);
}
}
public void testWarmOpenSWTHistory10() throws Exception {
//warm, repeated, open SWT from history
joinBackgroudActivities();
try {
for (int i= 0; i < 10; i++) {
measureOpenType("SWT", true);
}
} finally {
commitMeasurements();
assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
}
}
//---
private void measureOpenType(String pattern) throws Exception {
measureOpenType(pattern, false);
}
private void measureOpenType(String pattern, final boolean openFirst) throws Exception {
fShell= JavaPlugin.getActiveWorkbenchShell();
startMeasuring();
fOpenTypeDialog= JavaUI.createTypeDialog(
fShell,
JavaPlugin.getActiveWorkbenchWindow(),
SearchEngine.createWorkspaceScope(),
IJavaElementSearchConstants.CONSIDER_ALL_TYPES,
false,
pattern,
new TypeSelectionExtension() {
public ISelectionStatusValidator getSelectionValidator() {
return new ISelectionStatusValidator() {
public IStatus validate(Object[] selection) {
finish(openFirst);
return Status.OK_STATUS;
}
};
}
});
try {
fOpenTypeDialog.setBlockOnOpen(false);
fOpenTypeDialog.open();
new DisplayHelper() {
protected boolean condition() {
return fOpenTypeDialog == null;
}
}.waitForCondition(fShell.getDisplay(), 60 * 1000, 10 * 1000);
} finally {
if (fOpenTypeDialog != null) {
finish(openFirst);
fail("took too long");
}
}
}
private void finish(final boolean openFirst) {
final SelectionDialog openTypeDialog= fOpenTypeDialog;
fOpenTypeDialog= null;
if (! openFirst) {
stopMeasuring();
fShell.getDisplay().asyncExec(new Runnable() {
public void run() {
openTypeDialog.close();
}
});
} else {
fShell.getDisplay().asyncExec(new Runnable() {
public void run() {
openTypeDialog.getOkButton().notifyListeners(SWT.Selection, new Event());
stopMeasuring();
}
});
}
}
}