/*******************************************************************************
* Copyright (c) 2005, 2008 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.swt.widgets.Display;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.internal.texteditor.quickdiff.DocumentLineDiffer;
public class DocumentLineDifferInitializationTest extends AbstractDocumentLineDifferTest {
private static final Class<DocumentLineDifferInitializationTest> THIS= DocumentLineDifferInitializationTest.class;
public static Test suite() {
return new PerformanceTestSetup(new TestSuite(THIS));
}
public void testInitializationWithNoChanges() throws Exception {
setUpFast();
runInitializationMeasurements(createDocument(FAUST1));
}
public void testInitializationWithFewChanges() throws Exception {
setUpFast();
runInitializationMeasurements(createDocument(FAUST_FEW_CHANGES));
}
public void testInitializationWithManyChanges() throws Exception {
setUpSlow();
runInitializationMeasurements(createDocument(SMALL_FAUST_MANY_CHANGES));
}
public void testInitializationWithManyChangesButEqualSize() throws Exception {
setUpSlow();
runInitializationMeasurements(createDocument(SMALL_FAUST_MANY_CHANGES_SAME_SIZE));
}
@Override
protected void tearDown() throws Exception {
commitAllMeasurements();
assertAllPerformance();
super.tearDown();
}
protected IDocument createDocument(String contents) {
return new Document(contents);
}
private void runInitializationMeasurements(IDocument document) throws Exception {
PerformanceMeter meter= getNullPerformanceMeter();
int runs= getWarmUpRuns();
for (int run= 0; run < runs; run++)
measureInitialization(meter, document);
meter= createPerformanceMeter();
runs= getMeasuredRuns();
for (int run= 0; run < runs; run++)
measureInitialization(meter, document);
}
private void measureInitialization(PerformanceMeter meter, IDocument document) {
final DocumentLineDiffer differ= new DocumentLineDiffer();
setUpDiffer(differ);
DisplayHelper helper= new DisplayHelper() {
@Override
public boolean condition() {
return differ.isSynchronized();
}
};
meter.start();
differ.connect(document);
boolean inSync= helper.waitForCondition(Display.getDefault(), MAX_WAIT);
meter.stop();
assertTrue(inSync);
differ.disconnect(document);
}
}