Sample testing in kotlin
CompletionHandlerTest.java -> CompletionHandlerTest.kt
This commit is contained in:
@@ -1,230 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.completion.handlers;
|
|
||||||
|
|
||||||
import com.intellij.codeInsight.completion.CompletionType;
|
|
||||||
import com.intellij.codeInsight.lookup.LookupElement;
|
|
||||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
|
||||||
import com.intellij.codeInsight.lookup.LookupEvent;
|
|
||||||
import com.intellij.codeInsight.lookup.LookupManager;
|
|
||||||
import com.intellij.codeInsight.lookup.impl.LookupImpl;
|
|
||||||
import com.intellij.openapi.command.WriteCommandAction;
|
|
||||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
|
||||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
|
||||||
import junit.framework.Assert;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase;
|
|
||||||
import org.jetbrains.jet.plugin.PluginTestCaseBase;
|
|
||||||
import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
public class CompletionHandlerTest extends JetLightCodeInsightFixtureTestCase {
|
|
||||||
public void testClassCompletionImport() {
|
|
||||||
doTest(CompletionType.BASIC, 2, "SortedSet", null, '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDoNotInsertImportForAlreadyImported() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDoNotInsertDefaultJsImports() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDoNotInsertImportIfResolvedIntoJavaConstructor() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testNonStandardArray() {
|
|
||||||
doTest(CompletionType.BASIC, 2, "Array", "java.lang.reflect", '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testNoParamsFunction() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testParamsFunction() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInsertJavaClassImport() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInsertVoidJavaMethod() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPropertiesSetter() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testSingleBrackets() {
|
|
||||||
myFixture.configureByFile(fileName());
|
|
||||||
myFixture.type('(');
|
|
||||||
myFixture.checkResultByFile(afterFileName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testExistingSingleBrackets() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testExtFunction() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testFunctionLiteralInsertOnSpace() {
|
|
||||||
doTest(CompletionType.BASIC, 2, null, null, ' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInsertFunctionWithBothParentheses() {
|
|
||||||
myFixture.configureByFile(fileName());
|
|
||||||
myFixture.type("test()");
|
|
||||||
myFixture.checkResultByFile(afterFileName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInsertImportOnTab() {
|
|
||||||
doTest(CompletionType.BASIC, 2, "ArrayList", null, '\t');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testFunctionLiteralInsertWhenNoSpacesForBraces() {
|
|
||||||
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
|
|
||||||
JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class);
|
|
||||||
|
|
||||||
try {
|
|
||||||
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = false;
|
|
||||||
doTest();
|
|
||||||
} finally {
|
|
||||||
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testHigherOrderFunction() {
|
|
||||||
doTest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testInsertFqnForJavaClass() {
|
|
||||||
doTest(CompletionType.BASIC, 2, "SortedSet", "java.util", '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testHigherOrderFunctionWithArg() {
|
|
||||||
doTest(CompletionType.BASIC, 2, "filterNot", null, '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doTest() {
|
|
||||||
doTest(CompletionType.BASIC, 2, null, null, '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doTest(CompletionType type, int time, @Nullable String lookupString, @Nullable String tailText, char completionChar) {
|
|
||||||
myFixture.configureByFile(fileName());
|
|
||||||
|
|
||||||
if (lookupString != null || tailText != null) {
|
|
||||||
myFixture.complete(type, time);
|
|
||||||
|
|
||||||
LookupElement item = getExistentLookupElement(lookupString, tailText);
|
|
||||||
if (item != null) {
|
|
||||||
selectItem(item, completionChar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
forceCompleteFirst(type, time);
|
|
||||||
}
|
|
||||||
|
|
||||||
myFixture.checkResultByFile(afterFileName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public LookupElement getExistentLookupElement(@Nullable String lookupString, @Nullable String tailText) {
|
|
||||||
LookupImpl lookup = (LookupImpl) LookupManager.getInstance(getProject()).getActiveLookup();
|
|
||||||
LookupElement foundElement = null;
|
|
||||||
|
|
||||||
if (lookup != null) {
|
|
||||||
LookupElementPresentation presentation = new LookupElementPresentation();
|
|
||||||
|
|
||||||
for (LookupElement lookupElement : lookup.getItems()) {
|
|
||||||
boolean lookupOk;
|
|
||||||
|
|
||||||
if (lookupString != null) {
|
|
||||||
lookupOk = (lookupElement.getLookupString().contains(lookupString));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lookupOk = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean tailOk;
|
|
||||||
|
|
||||||
if (tailText != null) {
|
|
||||||
lookupElement.renderElement(presentation);
|
|
||||||
String itemTailText = presentation.getTailText();
|
|
||||||
tailOk = itemTailText != null && itemTailText.contains(tailText);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tailOk = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (lookupOk && tailOk) {
|
|
||||||
if (foundElement != null) {
|
|
||||||
Assert.fail("Several elements satisfy to completion restrictions");
|
|
||||||
}
|
|
||||||
foundElement = lookupElement;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return foundElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String afterFileName() {
|
|
||||||
return getTestName(false) + ".kt.after";
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected String getTestDataPath() {
|
|
||||||
return new File(PluginTestCaseBase.getTestDataPathBase(), "/completion/handlers/").getPath() + File.separator;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void forceCompleteFirst(CompletionType type, int time) {
|
|
||||||
myFixture.complete(type, time);
|
|
||||||
LookupElement[] items = myFixture.getLookupElements();
|
|
||||||
if (items != null && items.length > 1) {
|
|
||||||
selectItem(items[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void selectItem(LookupElement item) {
|
|
||||||
selectItem(item, (char)0);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void selectItem(LookupElement item, final char completionChar) {
|
|
||||||
final LookupImpl lookup = (LookupImpl) myFixture.getLookup();
|
|
||||||
lookup.setCurrentItem(item);
|
|
||||||
if (LookupEvent.isSpecialCompletionChar(completionChar)) {
|
|
||||||
new WriteCommandAction.Simple(getProject()) {
|
|
||||||
@Override
|
|
||||||
protected void run() throws Throwable {
|
|
||||||
lookup.finishLookup(completionChar);
|
|
||||||
}
|
|
||||||
}.execute().throwException();
|
|
||||||
} else {
|
|
||||||
myFixture.type(completionChar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2013 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.completion.handlers
|
||||||
|
|
||||||
|
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase
|
||||||
|
import com.intellij.codeInsight.completion.CompletionType
|
||||||
|
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
|
||||||
|
import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings
|
||||||
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
|
import java.io.File
|
||||||
|
import org.jetbrains.jet.plugin.PluginTestCaseBase
|
||||||
|
import com.intellij.codeInsight.lookup.impl.LookupImpl
|
||||||
|
import com.intellij.codeInsight.lookup.LookupEvent
|
||||||
|
import com.intellij.openapi.command.WriteCommandAction
|
||||||
|
import com.intellij.codeInsight.lookup.LookupManager
|
||||||
|
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||||
|
import org.junit.Assert
|
||||||
|
import com.intellij.openapi.application.Result
|
||||||
|
import kotlin.properties.Delegates
|
||||||
|
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
|
||||||
|
|
||||||
|
public class CompletionHandlerTest() : JetLightCodeInsightFixtureTestCase() {
|
||||||
|
fun testClassCompletionImport() = doTest(CompletionType.BASIC, 2, "SortedSet", null, '\n')
|
||||||
|
|
||||||
|
fun testDoNotInsertImportForAlreadyImported() = doTest()
|
||||||
|
|
||||||
|
fun testDoNotInsertDefaultJsImports() = doTest()
|
||||||
|
|
||||||
|
fun testDoNotInsertImportIfResolvedIntoJavaConstructor() = doTest()
|
||||||
|
|
||||||
|
fun testNonStandardArray() = doTest(CompletionType.BASIC, 2, "Array", "java.lang.reflect", '\n')
|
||||||
|
|
||||||
|
fun testNoParamsFunction() = doTest()
|
||||||
|
|
||||||
|
fun testParamsFunction() = doTest()
|
||||||
|
|
||||||
|
fun testInsertJavaClassImport() = doTest()
|
||||||
|
|
||||||
|
fun testInsertVoidJavaMethod() = doTest()
|
||||||
|
|
||||||
|
fun testPropertiesSetter() = doTest()
|
||||||
|
|
||||||
|
fun testExistingSingleBrackets() = doTest()
|
||||||
|
|
||||||
|
fun testExtFunction() = doTest()
|
||||||
|
|
||||||
|
fun testFunctionLiteralInsertOnSpace() = doTest(CompletionType.BASIC, 2, null, null, ' ')
|
||||||
|
|
||||||
|
fun testInsertImportOnTab() = doTest(CompletionType.BASIC, 2, "ArrayList", null, '\t')
|
||||||
|
|
||||||
|
fun testHigherOrderFunction() = doTest()
|
||||||
|
|
||||||
|
fun testInsertFqnForJavaClass() = doTest(CompletionType.BASIC, 2, "SortedSet", "java.util", '\n')
|
||||||
|
|
||||||
|
fun testHigherOrderFunctionWithArg() = doTest(CompletionType.BASIC, 2, "filterNot", null, '\n')
|
||||||
|
|
||||||
|
var fixture by Delegates.notNull<JavaCodeInsightTestFixture>()
|
||||||
|
|
||||||
|
protected override fun setUp() {
|
||||||
|
super.setUp()
|
||||||
|
fixture = myFixture!!
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testSingleBrackets() {
|
||||||
|
fixture.configureByFile(fileName())
|
||||||
|
fixture.`type`('(')
|
||||||
|
fixture.checkResultByFile(afterFileName())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testInsertFunctionWithBothParentheses() {
|
||||||
|
fixture.configureByFile(fileName())
|
||||||
|
fixture.`type`("test()")
|
||||||
|
fixture.checkResultByFile(afterFileName())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testFunctionLiteralInsertWhenNoSpacesForBraces() {
|
||||||
|
val settings = CodeStyleSettingsManager.getSettings(getProject())
|
||||||
|
val jetSettings = settings.getCustomSettings(javaClass<JetCodeStyleSettings>())!!
|
||||||
|
|
||||||
|
try {
|
||||||
|
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = false
|
||||||
|
doTest()
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doTest() = doTest(CompletionType.BASIC, 2, null, null, '\n')
|
||||||
|
|
||||||
|
private fun doTest(`type` : CompletionType, time : Int, lookupString : String?, tailText : String?, completionChar : Char) : Unit {
|
||||||
|
fixture.configureByFile(fileName())
|
||||||
|
if (lookupString != null || tailText != null) {
|
||||||
|
fixture.complete(`type`, time)
|
||||||
|
val item = getExistentLookupElement(lookupString, tailText)
|
||||||
|
if (item != null) {
|
||||||
|
selectItem(item, completionChar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
forceCompleteFirst(`type`, time)
|
||||||
|
}
|
||||||
|
fixture.checkResultByFile(afterFileName())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getExistentLookupElement(lookupString : String?, tailText : String?) : LookupElement? {
|
||||||
|
val lookup = LookupManager.getInstance(getProject())?.getActiveLookup() as LookupImpl?
|
||||||
|
|
||||||
|
var foundElement : LookupElement? = null
|
||||||
|
if (lookup != null) {
|
||||||
|
val presentation = LookupElementPresentation()
|
||||||
|
for (lookupElement in lookup.getItems()!!) {
|
||||||
|
|
||||||
|
val lookupOk : Boolean
|
||||||
|
if (lookupString != null) {
|
||||||
|
lookupOk = lookupElement.getLookupString().contains(lookupString)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lookupOk = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val tailOk : Boolean
|
||||||
|
if (tailText != null) {
|
||||||
|
lookupElement.renderElement(presentation)
|
||||||
|
val itemTailText : String? = presentation.getTailText()
|
||||||
|
tailOk = itemTailText != null && (itemTailText.contains(tailText))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tailOk = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lookupOk && tailOk) {
|
||||||
|
if (foundElement != null) {
|
||||||
|
Assert.fail("Several elements satisfy to completion restrictions")
|
||||||
|
}
|
||||||
|
|
||||||
|
foundElement = lookupElement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return foundElement
|
||||||
|
}
|
||||||
|
|
||||||
|
fun afterFileName() = getTestName(false) + ".kt.after"
|
||||||
|
|
||||||
|
fun forceCompleteFirst(`type` : CompletionType, time : Int) {
|
||||||
|
fixture.complete(`type`, time)
|
||||||
|
val items : Array<LookupElement>? = fixture.getLookupElements()
|
||||||
|
if (items != null && items.isNotEmpty()) {
|
||||||
|
selectItem(items[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override fun getTestDataPath() : String = File(PluginTestCaseBase.getTestDataPathBase(), "/completion/handlers/").getPath() + File.separator
|
||||||
|
|
||||||
|
protected fun selectItem(item : LookupElement?) {
|
||||||
|
selectItem(item, 0.toChar())
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun selectItem(item : LookupElement?, completionChar : Char) {
|
||||||
|
val lookup = (fixture.getLookup() as LookupImpl)
|
||||||
|
lookup.setCurrentItem(item)
|
||||||
|
if (LookupEvent.isSpecialCompletionChar(completionChar)) {
|
||||||
|
(object : WriteCommandAction.Simple(getProject()) {
|
||||||
|
protected override fun run(result: Result<Any?>?) {
|
||||||
|
run()
|
||||||
|
}
|
||||||
|
protected override fun run() {
|
||||||
|
lookup.finishLookup(completionChar)
|
||||||
|
}
|
||||||
|
}).execute().throwException()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fixture.`type`(completionChar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user