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