test for live template context type; fix a couple of bugs in existing context types

This commit is contained in:
Dmitry Jemerov
2015-02-04 19:57:11 +01:00
parent 621276aafe
commit 26dd9a8c6a
4 changed files with 57 additions and 1 deletions
@@ -43,6 +43,9 @@ public abstract class JetTemplateContextType extends TemplateContextType {
public boolean isInContext(@NotNull PsiFile file, int offset) {
if (PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(JetLanguage.INSTANCE)) {
PsiElement element = file.findElementAt(offset);
if (element == null) {
element = file.findElementAt(offset - 1);
}
if (element instanceof PsiWhiteSpace) {
return false;
}
@@ -145,7 +148,7 @@ public abstract class JetTemplateContextType extends TemplateContextType {
}
e = e.getParent();
}
return true;
return e != null;
}
}
@@ -0,0 +1,4 @@
/**
* In <caret>Comment
*/
fun foo() {}
@@ -0,0 +1 @@
psvm<caret>
@@ -0,0 +1,48 @@
/*
* Copyright 2010-2015 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.kotlin.idea.codeInsight
import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.PluginTestCaseBase
import java.io.File
import org.jetbrains.kotlin.idea.liveTemplates.JetTemplateContextType
import com.intellij.codeInsight.template.TemplateContextType
import com.intellij.testFramework.UsefulTestCase
public class LiveTemplatesContextTest : JetLightCodeInsightFixtureTestCase() {
override fun getTestDataPath(): String =
File(PluginTestCaseBase.getTestDataPathBase(), "/templates/context").getPath() + File.separator
public fun testInDocComment() {
myFixture.configureByFile(getTestName(false) + ".kt")
assertInContexts(javaClass<JetTemplateContextType.Generic>(), javaClass<JetTemplateContextType.Comment>())
}
public fun testTopLevel() {
myFixture.configureByFile(getTestName(false) + ".kt")
assertInContexts(javaClass<JetTemplateContextType.Generic>(),
javaClass<JetTemplateContextType.TopLevel>(),
javaClass<JetTemplateContextType.Expression>())
}
private fun assertInContexts(vararg expectedContexts: Class<out JetTemplateContextType>) {
val allContexts = TemplateContextType.EP_NAME.getExtensions().filter { it is JetTemplateContextType }
val enabledContexts = allContexts.filter { it.isInContext(myFixture.getFile(), myFixture.getCaretOffset()) }.map { it.javaClass }
UsefulTestCase.assertSameElements(enabledContexts, *expectedContexts)
}
}