blob: 25be6097f0f708696afa26125d8f98448ddc0b62 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 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 junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.test.performance.PerformanceMeter;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentTypeManager;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.filebuffers.FileBuffers;
import org.eclipse.core.filebuffers.ITextFileBuffer;
import org.eclipse.core.filebuffers.ITextFileBufferManager;
import org.eclipse.core.filebuffers.LocationKind;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector;
import org.eclipse.ui.texteditor.spelling.SpellingContext;
import org.eclipse.ui.texteditor.spelling.SpellingProblem;
import org.eclipse.ui.texteditor.spelling.SpellingService;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.jdt.ui.PreferenceConstants;
/**
* Measures the time to spell check a large compilation unit.
*
* @since 3.6
*/
public class SpellCheckingTest extends TextPerformanceTestCase {
private static final Class THIS= SpellCheckingTest.class;
private static final String FILE= PerformanceTestSetup.STYLED_TEXT;
private static final int WARM_UP_RUNS= 3;
private static final int MEASURED_RUNS= 50;
private IDocument fDocument;
private SpellingContext fSpellingContext;
public static Test suite() {
return new PerformanceTestSetup(new TestSuite(THIS));
}
protected void setUp() throws Exception {
super.setUp();
setWarmUpRuns(WARM_UP_RUNS);
setMeasuredRuns(MEASURED_RUNS);
PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.SPELLING_PROBLEMS_THRESHOLD, Integer.MAX_VALUE);
fSpellingContext= new SpellingContext();
fSpellingContext.setContentType(Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT));
IFile file= ResourceTestHelper.findFile(FILE);
ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
try {
manager.connect(file.getFullPath(), LocationKind.IFILE, null);
ITextFileBuffer fileBuffer= manager.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE);
fDocument= fileBuffer.getDocument();
} catch (CoreException e) {
throw e;
} finally {
manager.disconnect(file.getFullPath(), LocationKind.IFILE, null);
}
}
protected void tearDown() throws Exception {
super.tearDown();
PreferenceConstants.getPreferenceStore().setToDefault(PreferenceConstants.SPELLING_PROBLEMS_THRESHOLD);
}
public void test() throws Exception {
measure(getNullPerformanceMeter(), getWarmUpRuns(), true);
PerformanceMeter performanceMeter= createPerformanceMeter("Java Editor: Spell checking");
measure(performanceMeter, getMeasuredRuns(), false);
commitAllMeasurements();
assertAllPerformance();
}
private void measure(PerformanceMeter performanceMeter, int runs, boolean printDebugInfo) {
SpellingService spellingService= EditorsUI.getSpellingService();
for (int i= 0; i < runs; i++) {
performanceMeter.start();
spellingService.check(fDocument, fSpellingContext, new SpellingProblemCollector(printDebugInfo && i == 0), null);
performanceMeter.stop();
}
}
/**
* Spelling problem collector.
*/
private static class SpellingProblemCollector implements ISpellingProblemCollector {
private int fProblemCount;
private boolean fPrintCount;
public SpellingProblemCollector(boolean printCount) {
fPrintCount= printCount;
}
/*
* @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#accept(org.eclipse.ui.texteditor.spelling.SpellingProblem)
*/
public void accept(SpellingProblem problem) {
fProblemCount++;
}
/*
* @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#beginCollecting()
*/
public void beginCollecting() {
fProblemCount= 0;
}
/*
* @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#endCollecting()
*/
public void endCollecting() {
if (fPrintCount)
System.out.println("No of spelling problems : " + fProblemCount);
}
}
}