blob: e0b6a73762c0e9393dcb1b8702e1315d9eb3df96 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.tcl.core.tests.model;
import java.util.Arrays;
import org.eclipse.dltk.codeassist.RelevanceConstants;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.tests.model.AbstractModelCompletionTests;
import org.eclipse.dltk.core.tests.model.CompletionTestsRequestor;
import junit.framework.Test;
public class CompletionTests extends AbstractModelCompletionTests {
private static final int RELEVANCE = (RelevanceConstants.R_DEFAULT
+ RelevanceConstants.R_INTERESTING + RelevanceConstants.R_CASE
+ RelevanceConstants.R_NON_RESTRICTED);
public CompletionTests(String name) {
super(name);
}
@Override
public void setUpSuite() throws Exception {
this.PROJECT = this.setUpScriptProject("Completion",
Activator.PLUGIN_ID);
super.setUpSuite();
// InternalDLTKLanguageManager.setPrefferedPriority(TclNature.NATURE_ID,
// 0);
}
@Override
public void tearDownSuite() throws Exception {
super.tearDownSuite();
// InternalDLTKLanguageManager.setPrefferedPriority(TclNature.NATURE_ID,
// -1);
}
public static Test suite() {
return new Suite(CompletionTests.class);
}
private String makeResult(String[] elements, String[] completions,
int[] relevance) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < elements.length; ++i) {
buffer.append("element:" + elements[i] + " completion:"
+ completions[i] + " relevance:" + relevance[i]);
if (i != elements.length - 1) {
buffer.append("\n");
}
}
return buffer.toString();
}
private String makeResult(String[] elements) {
String[] completions = new String[elements.length];
int[] relevance = new int[elements.length];
for (int i = 0; i < elements.length; ++i) {
completions[i] = elements[i];
relevance[i] = RELEVANCE;
}
return this.makeResult(elements, completions, relevance);
}
private String makeResult(String[] elements, int[] relevance) {
String[] completions = new String[elements.length];
for (int i = 0; i < elements.length; ++i) {
completions[i] = elements[i];
}
return this.makeResult(elements, completions, relevance);
}
/**
* Returns the location after the end of the line with the specified marker.
* This function is needed to compensate platform difference in line
* separators.
*
* @param str
* @param marker
* @return
*/
private static int newLineAfter(String str, String marker) {
int location = str.indexOf(marker);
assertTrue(location >= 0);
location += marker.length();
while (location < str.length() && str.charAt(location) != '\r'
&& str.charAt(location) != '\n') {
++location;
}
if (location < str.length() && str.charAt(location) == '\r') {
++location;
}
if (location < str.length() && str.charAt(location) == '\n') {
++location;
}
return location;
}
public void testCompletion001() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"CompletionKeywordNamespace1.tcl");
String str = cu.getSource();
String completeBehind = "nam";
int cursorLocation = str.lastIndexOf(completeBehind)
+ completeBehind.length();
cu.codeComplete(cursorLocation, requestor);
assertEquals(this.makeResult(new String[] { "namespace",
"namespace children", "namespace code", "namespace current",
"namespace delete", "namespace eval", "namespace export",
"namespace forget", "namespace import", "namespace inscope",
"namespace parent", "namespace qualifiers", "namespace tail",
"namespace which" }), requestor.getResults());
}
public void testCompletion002() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"CompletionKeywordNamespace1.tcl");
String str = cu.getSource();
String completeBehind = "pa";
int cursorLocation = str.lastIndexOf(completeBehind)
+ completeBehind.length();
cu.codeComplete(cursorLocation, requestor);
assertEquals(this.makeResult(new String[] { "package",
"package provide", "package require", "part" }),
requestor.getResults());
}
public void testCompletion003() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"Completion002.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "#2") + 10;
cu.codeComplete(cursorLocation, requestor);
assertEquals(
this.makeResult(new String[] { "::a::c::fac()" },
new String[] { "::a::c::fac" }, new int[] { 18 }),
requestor.getResults());
}
public void testCompletion004() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"Completion002.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "#1") + 9;
cu.codeComplete(cursorLocation, requestor);
assertEquals(this.makeResult(
new String[] { "::a::c::fac()", "::a::c::fbac()",
"::a::c::feac()" },
new String[] { "::a::c::fac", "::a::c::fbac", "::a::c::feac" },
new int[] { 18, 18, 18 }), requestor.getResults());
}
public void testCompletion005() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"Completion002.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "#3") + 6;
cu.codeComplete(cursorLocation, requestor);
String[] result1 = new String[] { "::a::f::faf", "::a::f::q::faf_q",
"::a::f::q::fafq", "::a::f::q::t::fafqt", "::a::fa" };
String[] result2 = new String[result1.length];
for (int i = 0; i < result1.length; ++i) {
result2[i] = result1[i];
result1[i] += "()";
}
int[] relevance = new int[result1.length];
Arrays.fill(relevance, RELEVANCE);
assertEquals(this.makeResult(result1, result2, relevance),
requestor.getResults());
}
public void testCompletion006() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"Completion002.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "#4") + 7;
cu.codeComplete(cursorLocation, requestor);
assertEquals(
this.makeResult(new String[] { "::b::fb()" },
new String[] { "::b::fb" }, new int[] { 22 }),
requestor.getResults());
}
public void testCompletion007() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"completion003.tcl");
String str = cu.getSource();
String s = "puts $";
int cursorLocation = str.indexOf(s) + s.length();
cu.codeComplete(cursorLocation, requestor);
assertEquals(this.makeResult(new String[] { "$::x", "$x" },
new int[] { 18, 18 }), requestor.getResults());
}
public void testCompletion008() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"completion004.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "puts \"");
cu.codeComplete(cursorLocation, requestor);
assertEquals(this.makeResult(new String[] { "$::x", "$x" },
new int[] { 18, 18 }), requestor.getResults());
}
public void testCompletion009() throws ModelException {
CompletionTestsRequestor requestor = new CompletionTestsRequestor();
ISourceModule cu = this.getSourceModule("Completion", "src",
"Completion002.tcl");
String str = cu.getSource();
int cursorLocation = newLineAfter(str, "#5") + 16;
cu.codeComplete(cursorLocation, requestor);
assertEquals(
this.makeResult(new String[] { "::a::c::fac()" },
new String[] { "::a::c::fac" }, new int[] { 18 }),
requestor.getResults());
}
}