/******************************************************************************* * Copyright (c) 2007, 2015 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.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, new Integer(100000).toString()); 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(); }