diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-02-13 22:44:17 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-02-13 22:44:17 +0100 |
commit | c197c97e70262daaaa6a1f70c98e41daee3a1bbc (patch) | |
tree | 364f5489eb1dd158d034b83c140c159c1d9fb1b4 /integration | |
parent | 3f0f376e90a45c987200fb0ba78451cf1cc976e3 (diff) |
Find usages test
Diffstat (limited to 'integration')
8 files changed, 104 insertions, 27 deletions
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdCompletionContributor.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdCompletionContributor.java index 43feb26bbe4..75300c915a5 100644 --- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdCompletionContributor.java +++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/SdCompletionContributor.java @@ -18,14 +18,13 @@ import ai.vespa.intellij.schema.psi.SdTypes; */ public class SdCompletionContributor extends CompletionContributor { - public SdCompletionContributor() { extend(CompletionType.BASIC, PlatformPatterns.psiElement(SdTypes.IDENTIFIER_VAL), new CompletionProvider<>() { public void addCompletions(CompletionParameters parameters, //completion parameters contain details of the cursor position ProcessingContext context, - CompletionResultSet resultSet) { //result set contains completion details to suggest + CompletionResultSet resultSet) { // result set contains completion details to suggest resultSet.addElement(LookupElementBuilder.create("")); } } diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java index fd872b1a364..e7b4e280eed 100644 --- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java +++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java @@ -30,7 +30,7 @@ public class SdFindUsagesHandler extends FindUsagesHandler { private final Map<String, List<Function>> functionsMap; - protected SdFindUsagesHandler(PsiElement psiElement) { + public SdFindUsagesHandler(PsiElement psiElement) { super(psiElement); PsiFile file = psiElement.getContainingFile(); functionsMap = file instanceof SdFile ? SdUtil.functionsIn((SdFile) psiElement.getContainingFile()) diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/utils/AST.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/utils/AST.java index 0edf7d1f93c..ea161fe3c17 100644 --- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/utils/AST.java +++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/utils/AST.java @@ -18,7 +18,6 @@ public class AST { /** Returns the nodes following "inherits" in the given element. */ public static List<ASTNode> inherits(PsiElement element) { Tokens tokens = Tokens.of(element); - tokens.dump(); tokens.requireElement(); tokens.requireWhitespace(); tokens.require(SdTypes.IDENTIFIER_VAL, SdTypes.IDENTIFIER_WITH_DASH_VAL); diff --git a/integration/intellij/src/test/applications/rankprofilemodularity/test.sd b/integration/intellij/src/test/applications/rankprofilemodularity/test.sd index d6c8e649b90..17ee9f57ad6 100644 --- a/integration/intellij/src/test/applications/rankprofilemodularity/test.sd +++ b/integration/intellij/src/test/applications/rankprofilemodularity/test.sd @@ -41,12 +41,16 @@ schema test { rank-profile in_schema2 inherits outside_schema2 { + first-phase { + expression: f2 + ff1 + } + function f2() { - expression: fieldMatch(title) + fo2 + expression: fieldMatch(title) + fo2 + ff1 } - first-phase { - expression: f2 + function ff1() { + expression: random } } diff --git a/integration/intellij/src/test/applications/rankprofilemodularity/test/outside_schema1.profile b/integration/intellij/src/test/applications/rankprofilemodularity/test/outside_schema1.profile index a8092689b7f..388ec4155cd 100644 --- a/integration/intellij/src/test/applications/rankprofilemodularity/test/outside_schema1.profile +++ b/integration/intellij/src/test/applications/rankprofilemodularity/test/outside_schema1.profile @@ -1,7 +1,19 @@ rank-profile outside_schema1 inherits in_schema1 { function fo1() { + expression: local1 + 2 + } + + function local1() { + expression: local2 + local3 + } + + function local2() { expression: now } + function local3() { + expression: local2 + } + }
\ No newline at end of file diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/PluginTestBase.java b/integration/intellij/src/test/java/ai/vespa/intellij/PluginTestBase.java new file mode 100644 index 00000000000..9407e6794c0 --- /dev/null +++ b/integration/intellij/src/test/java/ai/vespa/intellij/PluginTestBase.java @@ -0,0 +1,31 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package ai.vespa.intellij; + +import ai.vespa.intellij.model.TestProjectDescriptor; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; + +/** + * Parent of unit tests. This is an antipattern, but mandated by IntelliJ. + * + * @author bratseth + */ +public class PluginTestBase extends LightJavaCodeInsightFixtureTestCase { + + private final TestProjectDescriptor descriptor; + + public PluginTestBase() { + descriptor = new TestProjectDescriptor(); // Expensive instance + } + + @Override + protected LightProjectDescriptor getProjectDescriptor() { return descriptor; } + + @Override + protected String getTestDataPath() { return "."; } + + protected void useDir(String dir) { + myFixture.copyDirectoryToProject(dir, "/"); + } + +} diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java new file mode 100644 index 00000000000..ede86906a3e --- /dev/null +++ b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java @@ -0,0 +1,47 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package ai.vespa.intellij.findUsages; + +import ai.vespa.intellij.PluginTestBase; +import ai.vespa.intellij.schema.SdUtil; +import ai.vespa.intellij.schema.findUsages.SdFindUsagesHandler; +import ai.vespa.intellij.schema.model.Schema; +import ai.vespa.intellij.schema.utils.Path; +import com.intellij.find.findUsages.FindUsagesOptions; +import com.intellij.usageView.UsageInfo; +import com.intellij.util.Processor; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author bratseth + */ +public class FindUsagesTest extends PluginTestBase { + + @Test + public void testFindUsages() { + useDir("src/test/applications/rankprofilemodularity"); + Schema schema = Schema.fromProjectFile(getProject(), Path.fromString("test.sd")); + var handler = new SdFindUsagesHandler(schema.definition()); + var function = SdUtil.functionsIn(schema.rankProfile("in_schema2").get()).get("ff1").get(0).definition(); + var usageProcessor = new MockUsageProcessor(); + var options = new FindUsagesOptions(getProject()); + options.isUsages = true; + handler.processElementUsages(function, usageProcessor, options); + assertEquals(3, usageProcessor.usages.size()); + } + + private static class MockUsageProcessor implements Processor<UsageInfo> { + + List<UsageInfo> usages = new ArrayList<>(); + + @Override + public boolean process(UsageInfo usageInfo) { + usages.add(usageInfo); + return true; + } + + } + +} diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/model/SchemaTest.java b/integration/intellij/src/test/java/ai/vespa/intellij/model/SchemaTest.java index ba670d1c732..f6e1ec3bdf9 100644 --- a/integration/intellij/src/test/java/ai/vespa/intellij/model/SchemaTest.java +++ b/integration/intellij/src/test/java/ai/vespa/intellij/model/SchemaTest.java @@ -1,35 +1,20 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.intellij.model; +import ai.vespa.intellij.PluginTestBase; import ai.vespa.intellij.schema.model.RankProfile; import ai.vespa.intellij.schema.model.Schema; import ai.vespa.intellij.schema.utils.Path; -import com.intellij.testFramework.LightProjectDescriptor; -import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; import org.junit.Test; -import java.util.List; - /** * @author bratseth */ -public class SchemaTest extends LightJavaCodeInsightFixtureTestCase { - - private final TestProjectDescriptor descriptor; - - public SchemaTest() { - descriptor = new TestProjectDescriptor(); // Expensive instance - } - - @Override - protected LightProjectDescriptor getProjectDescriptor() { return descriptor; } - - @Override - protected String getTestDataPath() { return "."; } +public class SchemaTest extends PluginTestBase { @Test public void testSimple() { - super.myFixture.copyDirectoryToProject("src/test/applications/simple", "/"); + useDir("src/test/applications/simple"); Schema schema = Schema.fromProjectFile(getProject(), Path.fromString("simple.sd")); assertNotNull(schema); assertEquals("simple", schema.name()); @@ -42,7 +27,7 @@ public class SchemaTest extends LightJavaCodeInsightFixtureTestCase { @Test public void testSchemaInheritance() { - super.myFixture.copyDirectoryToProject("src/test/applications/schemainheritance", "/"); + useDir("src/test/applications/schemaInheritance"); Schema schema = Schema.fromProjectFile(getProject(), Path.fromString("child.sd")); assertNotNull(schema); assertEquals("child", schema.name()); @@ -55,7 +40,7 @@ public class SchemaTest extends LightJavaCodeInsightFixtureTestCase { @Test public void testRankProfileModularity() { - super.myFixture.copyDirectoryToProject("src/test/applications/rankprofilemodularity", "/"); + useDir("src/test/applications/rankProfileModularity"); Schema schema = Schema.fromProjectFile(getProject(), Path.fromString("test.sd")); assertNotNull(schema); assertEquals("test", schema.name()); |