blob: 60340fa9ecb704320bf2dd77a725ce6c938554de [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.text.tests.performance;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
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.MarkerAnnotationPreferences;
import org.eclipse.ui.texteditor.spelling.SpellingService;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.jdt.ui.PreferenceConstants;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* @since 3.4
*/
public abstract class ScrollVerticalRulerTest extends ScrollEditorTest {
public static Test suite() {
TestSuite result= new TestSuite();
result.addTest(ScrollVerticalRuler100Test.suite());
result.addTest(ScrollVerticalRuler1000Test.suite());
result.addTest(ScrollVerticalRuler5000Test.suite());
return result;
}
@Override
protected String getEditor() {
return EditorTestHelper.TEXT_EDITOR_ID;
}
@Override
protected void setUp() throws Exception {
super.setUp();
PreferenceConstants.getPreferenceStore().putValue(PreferenceConstants.SPELLING_PROBLEMS_THRESHOLD, Integer.toString(100000));
boolean isInstalled= EditorsUI.getSpellingService().getSpellingEngineDescriptors().length > 0;
assertTrue("No spelling engine installed", isInstalled);
IPreferenceStore store= EditorsUI.getPreferenceStore();
store.putValue(SpellingService.PREFERENCE_SPELLING_ENABLED, IPreferenceStore.TRUE);
IEclipsePreferences editorsNode= InstanceScope.INSTANCE.getNode(EditorsUI.PLUGIN_ID);
MarkerAnnotationPreferences markerAnnotationPreferences= EditorsPlugin.getDefault().getMarkerAnnotationPreferences();
Iterator<AnnotationPreference> iterator= markerAnnotationPreferences.getAnnotationPreferences().iterator();
while (iterator.hasNext()) {
AnnotationPreference pref= iterator.next();
String preferenceKey= pref.getVerticalRulerPreferenceKey();
if ("spellingIndicationInVerticalRuler".equals(preferenceKey)) {
editorsNode.putBoolean(preferenceKey, true);
String textPreferenceKey= pref.getTextPreferenceKey();
editorsNode.putBoolean(textPreferenceKey, false);
}
}
}
@Override
protected void tearDown() throws Exception {
PreferenceConstants.getPreferenceStore().setToDefault(PreferenceConstants.SPELLING_PROBLEMS_THRESHOLD);
IPreferenceStore store= EditorsUI.getPreferenceStore();
store.setToDefault(SpellingService.PREFERENCE_SPELLING_ENABLED);
IEclipsePreferences editorsNode= InstanceScope.INSTANCE.getNode(EditorsUI.PLUGIN_ID);
MarkerAnnotationPreferences markerAnnotationPreferences= EditorsPlugin.getDefault().getMarkerAnnotationPreferences();
Iterator<AnnotationPreference> iterator= markerAnnotationPreferences.getAnnotationPreferences().iterator();
while (iterator.hasNext()) {
AnnotationPreference pref= iterator.next();
String preferenceKey= pref.getVerticalRulerPreferenceKey();
if ("spellingIndicationInVerticalRuler".equals(preferenceKey)) {
editorsNode.putBoolean(preferenceKey, false);
String textPreferenceKey= pref.getTextPreferenceKey();
editorsNode.putBoolean(textPreferenceKey, true);
}
}
super.tearDown();
}
@Override
protected AbstractTextEditor openEditor(ScrollingMode mode) throws Exception {
IFile file= ResourceTestHelper.getProject(PerformanceTestSetup.PROJECT).getFile("faust.txt");
if (!file.exists()) {
file.create(getFaustInputStream(), true, null);
}
AbstractTextEditor result= (AbstractTextEditor) EditorTestHelper.openInEditor(file, true);
IDocument document= EditorTestHelper.getDocument(result);
document.replace(0, document.getLength(), getFaust(getNumberOfAnnotations()));
result.doSave(null);
return result;
}
private String getFaust(int numberOfLines) throws Exception {
String faust= FileTool.read(new InputStreamReader(getFaustInputStream())).toString();
IDocument document= new Document(faust);
int lineOffset= document.getLineOffset(numberOfLines);
return document.get(0, lineOffset);
}
private InputStream getFaustInputStream() {
return AbstractDocumentPerformanceTest.class.getResourceAsStream("faust1.txt");
}
/*
* @see org.eclipse.jdt.text.tests.performance.ScrollEditorTest#assertEditor(org.eclipse.ui.texteditor.AbstractTextEditor)
*/
@Override
protected void assertEditor(AbstractTextEditor editor) throws Exception {
super.assertEditor(editor);
IAnnotationModel model= editor.getDocumentProvider().getAnnotationModel(editor.getEditorInput());
int annotationCount= getAnnotationCount(model);
assertTrue("Expected annotation count is: " + getNumberOfAnnotations() + " but was: " + annotationCount, annotationCount >= getNumberOfAnnotations());
}
private int getAnnotationCount(IAnnotationModel model) {
int result= 0;
Iterator<Annotation> iterator= model.getAnnotationIterator();
while (iterator.hasNext()) {
iterator.next();
result++;
}
return result;
}
/**
* @return the number of annotations to show in the vertical ruler
*/
protected abstract int getNumberOfAnnotations();
}