/*******************************************************************************
* 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 java.io.File;
import junit.extensions.TestSetup;
import junit.framework.Test;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.JavaTestPlugin;
import org.eclipse.test.OrderedTestSuite;
import org.eclipse.test.performance.Dimension;
import org.eclipse.test.performance.Performance;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart;
import org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil;
public class TypeHierarchyPerfTest extends JdtPerformanceTestCase {
private static class MyTestSetup extends TestSetup {
public static final String SRC_CONTAINER= "src";
public static IJavaProject fJProject1;
public static IPackageFragmentRoot fJunitSrcRoot;
public MyTestSetup(Test test) {
super(test);
}
@Override
protected void setUp() throws Exception {
fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
// we must make sure that the performance test are compatible to 2.1.3 & 3.0 so use rt13
assertTrue("rt not found", JavaProjectHelper.addRTJar13(fJProject1) != null);
File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
fJunitSrcRoot= JavaProjectHelper.addSourceContainerWithImport(fJProject1, SRC_CONTAINER, junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
}
@Override
protected void tearDown() throws Exception {
if (fJProject1 != null && fJProject1.exists())
JavaProjectHelper.delete(fJProject1);
}
}
public static Test suite() {
OrderedTestSuite testSuite= new OrderedTestSuite(
TypeHierarchyPerfTest.class,
new String[] {
"testOpenObjectHierarchy",
"testOpenCollHierarchy",
"testOpenObjectHierarchy2",
});
return new MyTestSetup(testSuite);
}
public static Test setUpTest(Test someTest) {
return new MyTestSetup(someTest);
}
public TypeHierarchyPerfTest(String name) {
super(name);
}
public void testOpenObjectHierarchy() throws Exception {
//cold
// make sure stuff like the Intro view gets closed and we start with a clean Java perspective:
IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
page.close();
page= activeWorkbenchWindow.openPage(JavaUI.ID_PERSPECTIVE, ResourcesPlugin.getWorkspace().getRoot());
measureOpenHierarchy(MyTestSetup.fJProject1.findType("java.lang.Object"));
Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 2000);
}
public void testOpenCollHierarchy() throws Exception {
//junit source folder
measureOpenHierarchy(MyTestSetup.fJunitSrcRoot);
Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 1000);
}
public void testOpenObjectHierarchy2() throws Exception {
//warm
tagAsSummary("Open type hierarchy on Object", Dimension.ELAPSED_PROCESS);
IJavaElement element= MyTestSetup.fJProject1.findType("java.lang.Object");
IWorkbenchWindow workbenchWindow= JavaPlugin.getActiveWorkbenchWindow();
TypeHierarchyViewPart viewPart= OpenTypeHierarchyUtil.open(element, workbenchWindow);
for (int i= 0; i < 10; i++) {
viewPart.setInputElement(MyTestSetup.fJProject1.findType("java.lang.String"));
viewPart.getSite().getPage().hideView(viewPart);
joinBackgroudActivities();
startMeasuring();
viewPart= OpenTypeHierarchyUtil.open(element, workbenchWindow);
stopMeasuring();
}
commitMeasurements();
assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
}
private void measureOpenHierarchy(IJavaElement element) throws Exception {
IWorkbenchWindow activeWorkbenchWindow= JavaPlugin.getActiveWorkbenchWindow();
joinBackgroudActivities();
startMeasuring();
OpenTypeHierarchyUtil.open(element, activeWorkbenchWindow);
stopMeasuring();
commitMeasurements();
}
}