org.eclipse.jdt.text.tests.performance.ScrollVerticalRulerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jdt.text.tests.performance.ScrollVerticalRulerTest.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2011 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 junit.framework.Test;
import junit.framework.TestSuite;

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.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;

/**
 * @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;
    }

    protected String getEditor() {
        return EditorTestHelper.TEXT_EDITOR_ID;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jdt.text.tests.performance.ScrollEditorTest#setUp()
     */
    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 iterator = markerAnnotationPreferences.getAnnotationPreferences().iterator();
        while (iterator.hasNext()) {
            AnnotationPreference pref = (AnnotationPreference) iterator.next();
            String preferenceKey = pref.getVerticalRulerPreferenceKey();
            if ("spellingIndicationInVerticalRuler".equals(preferenceKey)) {
                editorsNode.putBoolean(preferenceKey, true);
                String textPreferenceKey = pref.getTextPreferenceKey();
                editorsNode.putBoolean(textPreferenceKey, false);
            }
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.jdt.text.tests.performance.ScrollEditorTest#tearDown()
     */
    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 iterator = markerAnnotationPreferences.getAnnotationPreferences().iterator();
        while (iterator.hasNext()) {
            AnnotationPreference pref = (AnnotationPreference) iterator.next();
            String preferenceKey = pref.getVerticalRulerPreferenceKey();
            if ("spellingIndicationInVerticalRuler".equals(preferenceKey)) {
                editorsNode.putBoolean(preferenceKey, false);
                String textPreferenceKey = pref.getTextPreferenceKey();
                editorsNode.putBoolean(textPreferenceKey, true);
            }
        }

        super.tearDown();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jdt.text.tests.performance.ScrollEditorTest#openEditor(org.eclipse.jdt.text.tests.performance.ScrollEditorTest.ScrollingMode)
     */
    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)
     */
    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 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();

}