blob: b48215558668aedae1122017556b85d6ae03de8f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.core.tests.performance;
import java.io.PrintStream;
import java.text.NumberFormat;
import junit.framework.*;
import org.eclipse.jdt.core.*;
/**
*/
public class FullSourceWorkspaceCompletionTests extends FullSourceWorkspaceTests {
// Counters
private static final int WARMUP_COUNT = 10;
private static final int ITERATION_COUNT = 40;
int proposalCount = 0;
// Log files
private static int TESTS_COUNT = 0;
private static PrintStream[] LOG_STREAMS = new PrintStream[LOG_TYPES.length];
public FullSourceWorkspaceCompletionTests(String name) {
super(name);
}
public static Test suite() {
Test suite = buildSuite(testClass());
TESTS_COUNT = suite.countTestCases();
createPrintStream(testClass(), LOG_STREAMS, TESTS_COUNT, "Complete");
return suite;
}
private static Class testClass() {
return FullSourceWorkspaceCompletionTests.class;
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
// End of execution => one test less
TESTS_COUNT--;
// Log perf result
if (LOG_DIR != null) {
logPerfResult(LOG_STREAMS, TESTS_COUNT);
}
// Print statistics
if (TESTS_COUNT == 0) {
System.out.println("-------------------------------------");
System.out.println("Completion performance test statistics:");
NumberFormat intFormat = NumberFormat.getIntegerInstance();
System.out.println(" - "+intFormat.format(ITERATION_COUNT*MEASURES_COUNT)+" completions have been performed");
System.out.println(" - "+intFormat.format(this.proposalCount)+" proposals have been done");
System.out.println("-------------------------------------\n");
}
// Call super at the end as it close print streams
super.tearDown();
}
private class TestCompletionRequestor extends CompletionRequestor {
public void accept(CompletionProposal proposal) {
proposalCount++;
}
}
private void complete(
String testName,
String projectName,
String packageName,
String unitName,
String completeAt,
String completeBehind,
int warmupCount,
int iterationCount) throws JavaModelException {
this.complete(
testName,
projectName,
packageName,
unitName,
completeAt,
completeBehind,
null,
warmupCount,
iterationCount);
}
private void complete(
String testName,
String projectName,
String packageName,
String unitName,
String completeAt,
String completeBehind,
int[] ignoredKinds,
int warmupCount,
int iterationCount) throws JavaModelException {
tagAsSummary(testName, false); // do NOT put in fingerprint
waitUntilIndexesReady();
TestCompletionRequestor requestor = new TestCompletionRequestor();
if(ignoredKinds != null) {
for (int i = 0; i < ignoredKinds.length; i++) {
requestor.setIgnored(ignoredKinds[i], true);
}
}
ICompilationUnit unit =
getCompilationUnit(projectName, packageName, unitName);
String str = unit.getSource();
int completionIndex = str.indexOf(completeAt) + completeBehind.length();
if (DEBUG) System.out.print("Perform code assist inside " + unitName + "...");
// Warm up
if(warmupCount > 0) {
unit.codeComplete(completionIndex, requestor);
for (int i = 1; i < warmupCount; i++) {
unit.codeComplete(completionIndex, requestor);
}
}
// Clean memory
runGc();
// Measures
for (int i=0; i<MEASURES_COUNT; i++) {
startMeasuring();
for (int j = 0; j < iterationCount; j++) {
unit.codeComplete(completionIndex, requestor);
}
stopMeasuring();
}
if (DEBUG) System.out.println("done!");
// Commit
commitMeasurements();
assertPerformance();
}
public void testCompleteMethodDeclaration() throws JavaModelException {
this.complete(
"Completion>Method>Declaration",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"IType {",
"IType {",
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteMemberAccess() throws JavaModelException {
this.complete(
"Completion>Member>Access",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"this.",
"this.",
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteTypeReference() throws JavaModelException {
this.complete(
"Completion>Type>Reference",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"ArrayList list",
"A",
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteEmptyName() throws JavaModelException {
this.complete(
"Completion>Name>Empty",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"",
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteName() throws JavaModelException {
this.complete(
"Completion>Name",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"p",
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteEmptyNameWithoutTypes() throws JavaModelException {
this.complete(
"Completion>Name>Empty>No Type",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"",
new int[]{CompletionProposal.TYPE_REF},
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteNameWithoutTypes() throws JavaModelException {
this.complete(
"Completion>Name>No Type",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"p",
new int[]{CompletionProposal.TYPE_REF},
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteEmptyNameWithoutMethods() throws JavaModelException {
this.complete(
"Completion>Name>Empty>No Method",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"",
new int[]{CompletionProposal.METHOD_REF},
WARMUP_COUNT,
ITERATION_COUNT);
}
public void testCompleteNameWithoutMethods() throws JavaModelException {
this.complete(
"Completion>Name>No Method",
"org.eclipse.jdt.core",
"org.eclipse.jdt.internal.core",
"SourceType.java",
"params.add",
"p",
new int[]{CompletionProposal.METHOD_REF},
WARMUP_COUNT,
ITERATION_COUNT);
}
}