blob: 710a208c5f7a27c4049c8689447992a04525ff54 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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.jdt.text.tests.performance;
import java.lang.reflect.Method;
import junit.framework.Test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.text.source.AnnotationPainter;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.internal.editors.text.EditorsPlugin;
import org.eclipse.ui.texteditor.AbstractTextEditor;
import org.eclipse.ui.texteditor.AnnotationPreference;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.ui.actions.FindAction;
import org.eclipse.jdt.ui.actions.FindReferencesAction;
/**
* Counts number of repaints ({@link AnnotationPainter#paintControl(PaintEvent)})
* when typing on a line with annotations shown as squiggles.
*
* @since 3.1
*/
public abstract class TypingInvocationCountTest extends TextPerformanceTestCase implements ITextEditorTestCase {
protected abstract static class Setup extends TextEditorTestSetup {
private static final String FILE= "Test.java";
private static final String SEARCH_ANNOTATION_TYPE= "org.eclipse.search.results";
private static final String SEARCH_VIEW= "org.eclipse.search.ui.views.SearchView";
private IJavaProject fJavaProject;
private boolean fWasSearchViewShown;
private String fShownPerspective;
public Setup(Test test) {
super(test);
}
protected void setUp() throws Exception {
AnnotationPreference preference= EditorsPlugin.getDefault().getAnnotationPreferenceLookup().getAnnotationPreference(SEARCH_ANNOTATION_TYPE);
IPreferenceStore store= EditorsUI.getPreferenceStore();
store.setValue(preference.getHighlightPreferenceKey(), false);
store.setValue(preference.getOverviewRulerPreferenceKey(), true);
store.setValue(preference.getTextPreferenceKey(), true);
if (preference.getTextStylePreferenceKey() != null)
store.setValue(preference.getTextStylePreferenceKey(), AnnotationPreference.STYLE_SQUIGGLES);
store.setValue(preference.getVerticalRulerPreferenceKey(), true);
PreferenceConverter.setValue(store, preference.getColorPreferenceKey(), new RGB(255, 0, 0));
fShownPerspective= EditorTestHelper.showPerspective(getPerspectiveId());
if (!ResourceTestHelper.projectExists(PROJECT))
fJavaProject= EditorTestHelper.createJavaProject(PROJECT, LINKED_FOLDER);
else
fJavaProject= JavaCore.create(ResourceTestHelper.getProject(PROJECT));
fWasSearchViewShown= EditorTestHelper.isViewShown(SEARCH_VIEW);
ITextEditor editor= (AbstractTextEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(getFile()), true);
FindAction action= new FindReferencesAction(editor.getSite());
ICompilationUnit unit= JavaCore.createCompilationUnitFrom(ResourceTestHelper.findFile(getFile()));
IMethod method= unit.getType("Test").getMethod("test", new String[] { });
action.run(method);
EditorTestHelper.closeAllEditors();
super.setUp();
EditorTestHelper.runEventQueue(1000);
}
protected abstract String getPerspectiveId();
protected String getFile() {
return "/" + PROJECT + "/src/" + FILE;
}
protected void tearDown () throws Exception {
super.tearDown();
if (!fWasSearchViewShown)
EditorTestHelper.showView(SEARCH_VIEW, false);
if (fJavaProject != null)
JavaProjectHelper.delete(fJavaProject);
if (fShownPerspective != null)
EditorTestHelper.showPerspective(fShownPerspective);
AnnotationPreference preference= EditorsPlugin.getDefault().getAnnotationPreferenceLookup().getAnnotationPreference(SEARCH_ANNOTATION_TYPE);
IPreferenceStore store= EditorsUI.getPreferenceStore();
store.setToDefault(preference.getHighlightPreferenceKey());
store.setToDefault(preference.getOverviewRulerPreferenceKey());
store.setToDefault(preference.getTextPreferenceKey());
if (preference.getTextStylePreferenceKey() != null)
store.setToDefault(preference.getTextStylePreferenceKey());
store.setToDefault(preference.getVerticalRulerPreferenceKey());
store.setToDefault(preference.getColorPreferenceKey());
}
}
public static final String PROJECT= "TypingInvocationCountTest";
public static final String LINKED_FOLDER= "/testResources/typingInvocationCountTest1";
private AbstractTextEditor fEditor;
public TypingInvocationCountTest() {
super();
}
public TypingInvocationCountTest(String name) {
super(name);
}
public void setEditor(AbstractTextEditor editor) {
fEditor= editor;
}
/**
* Counts number of repaints when typing before one annotation on the
* same line.
*
* @throws Exception
*/
public void test00() throws Exception {
measure(4, 22, ' ');
}
/**
* Counts number of repaints when typing after one annotation on the
* same line while a matching bracket is shown.
*
* @throws Exception
*/
public void test01() throws Exception {
measure(4, 23, SWT.BS, true);
}
/**
* Counts number of repaints when typing after one annotation on the
* same line.
*
* @throws Exception
*/
public void test02() throws Exception {
measure(4, 32, ' ');
}
/**
* Counts number of repaints when typing after one annotation on the
* same line while a matching bracket is shown.
*
* @throws Exception
*/
public void test03() throws Exception {
measure(4, 33, SWT.BS, true);
}
/**
* Counts number of repaints when typing before two annotations on the
* same line.
*
* @throws Exception
*/
public void test10() throws Exception {
measure(6, 22, ' ');
}
/**
* Counts number of repaints when typing after two annotations on the
* same line while a matching bracket is shown.
*
* @throws Exception
*/
public void test11() throws Exception {
measure(6, 23, SWT.BS, true);
}
/**
* Counts number of repaints when typing after two annotations on the
* same line.
*
* @throws Exception
*/
public void test12() throws Exception {
measure(6, 40, ' ');
}
/**
* Counts number of repaints when typing after two annotations on the
* same line while a matching bracket is shown.
*
* @throws Exception
*/
public void test13() throws Exception {
measure(6, 41, SWT.BS, true);
}
private void measure(int line, int column, char ch) throws Exception {
measure(line, column, ch, false);
}
private void measure(int line, int column, char ch, boolean sendKeyCode) throws Exception {
InvocationCountPerformanceMeter performanceMeter= createInvocationCountPerformanceMeter(new Method[] {
AnnotationPainter.class.getMethod("paintControl", new Class[] { PaintEvent.class }),
});
performanceMeter.setTimeout(30000);
int offset= EditorTestHelper.getDocument(fEditor).getLineOffset(line) + column;
fEditor.selectAndReveal(offset, 0);
Display display= EditorTestHelper.getActiveDisplay();
EditorTestHelper.runEventQueue(200);
performanceMeter.start();
if (sendKeyCode)
SWTEventHelper.pressKeyCode(display, ch);
else
SWTEventHelper.pressKeyChar(display, ch);
EditorTestHelper.joinBackgroundActivities(fEditor);
EditorTestHelper.runEventQueue(200);
performanceMeter.stop();
performanceMeter.commit();
}
}