From 71d9b967ddd9e494d6b610b0cbb74b61bf6ca540 Mon Sep 17 00:00:00 2001 From: Sebastian Kurfuerst Date: Sun, 5 Mar 2017 10:45:59 +0100 Subject: [PATCH] FEATURE: add testcase for resolving --- build.gradle | 39 +++++++- .../java/helpers/NeosProjectDescriptor.java | 21 ++++ .../NodeTypeReferencesTest.java | 97 +++++++++++++++++++ .../nodeTypeReferences/NodeTypes.Basic.yaml | 6 ++ .../NodeTypes.allDefinitionsAreFound.yaml | 5 + .../NodeTypes.constraint.yaml | 4 + .../NodeTypes.supertypeInOtherFile.yaml | 3 + .../NodeTypes.supertypeInSameFile.yaml | 11 +++ 8 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 src/test/java/helpers/NeosProjectDescriptor.java create mode 100644 src/test/java/nodeTypeReferences/NodeTypeReferencesTest.java create mode 100644 testData/nodeTypeReferences/NodeTypes.Basic.yaml create mode 100644 testData/nodeTypeReferences/NodeTypes.allDefinitionsAreFound.yaml create mode 100644 testData/nodeTypeReferences/NodeTypes.constraint.yaml create mode 100644 testData/nodeTypeReferences/NodeTypes.supertypeInOtherFile.yaml create mode 100644 testData/nodeTypeReferences/NodeTypes.supertypeInSameFile.yaml diff --git a/build.gradle b/build.gradle index a9a2cf07..5a57761c 100644 --- a/build.gradle +++ b/build.gradle @@ -44,27 +44,56 @@ def pluginsForIdeaVersion = [ 'LATEST-EAP-SNAPSHOT': [ // Branch Number: 171 'com.jetbrains.php:171.3691.14', - 'yaml' + 'yaml', + + // test dependencies + 'CSS', + 'java-i18n', + 'properties' ], '2016.3.1': [ // Branch Number: 163 'com.jetbrains.php:163.9166.11', - 'yaml' + 'yaml', + + // test dependencies + 'CSS', + 'java-i18n', + 'properties' ], '2016.3': [ // Branch Number: 163 'com.jetbrains.php:163.7743.54', - 'yaml' + 'yaml', + + // test dependencies + 'CSS', + 'java-i18n', + 'properties', + + // DEV dependencies: UNCOMMENT the following lines during development + // to install additional plugins for development + // 'PsiViewer:3.28.93' ], '2016.2.5': [ // Branch Number: 162 'com.jetbrains.php:162.1121.34', - 'yaml' + 'yaml', + + // test dependencies + 'CSS', + 'java-i18n', + 'properties' ], '2016.1.4': [ // Branch Number: 145 'com.jetbrains.php:145.970.40', - 'yaml' + 'yaml', + + // test dependencies + 'CSS', + 'java-i18n', + 'properties' ] ] diff --git a/src/test/java/helpers/NeosProjectDescriptor.java b/src/test/java/helpers/NeosProjectDescriptor.java new file mode 100644 index 00000000..e65e7a22 --- /dev/null +++ b/src/test/java/helpers/NeosProjectDescriptor.java @@ -0,0 +1,21 @@ +package helpers; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.roots.ContentEntry; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor; + +import de.vette.idea.neos.Settings; + +import org.jetbrains.annotations.NotNull; + +/** + * Enable the Neos Project plugin + */ +public class NeosProjectDescriptor extends DefaultLightProjectDescriptor { + @Override + public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { + super.configureModule(module, model, contentEntry); + Settings.getInstance(module.getProject()).pluginEnabled = true; + } +} diff --git a/src/test/java/nodeTypeReferences/NodeTypeReferencesTest.java b/src/test/java/nodeTypeReferences/NodeTypeReferencesTest.java new file mode 100644 index 00000000..c44ef791 --- /dev/null +++ b/src/test/java/nodeTypeReferences/NodeTypeReferencesTest.java @@ -0,0 +1,97 @@ +package nodeTypeReferences; + +import com.intellij.psi.PsiElement; +import com.intellij.psi.ResolveResult; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; +import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl; + +import de.vette.idea.neos.lang.yaml.references.nodeType.NodeTypeReference; + +import org.jetbrains.yaml.psi.YAMLKeyValue; + +import java.util.function.Function; + +import helpers.NeosProjectDescriptor; + +/** + * Testcase for node type references + */ +public class NodeTypeReferencesTest extends LightPlatformCodeInsightFixtureTestCase { + + @Override + protected String getTestDataPath() { + return "testData/nodeTypeReferences"; + } + + @Override + protected boolean isWriteActionRequired() { + return false; + } + + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return new NeosProjectDescriptor(); + } + + public void testSupertypeInSameFile() { + doRunTest( + "NodeTypes.supertypeInSameFile.yaml", + 1, + "Neos.NodeTypes:Page", + "NodeTypes.supertypeInSameFile.yaml", + offset -> offset < 5 + ); + } + + public void testSupertypeInOtherFile() { + doRunTest( + "NodeTypes.supertypeInOtherFile.yaml", + 1, + "Neos.NodeTypes:Image", + "NodeTypes.Basic.yaml", + offset -> offset > 20 + ); + } + + public void testConstraint() { + doRunTest( + "NodeTypes.constraint.yaml", + 1, + "Neos.NodeTypes:Image", + "NodeTypes.Basic.yaml", + offset -> offset > 20 + ); + } + + public void testAllDefinitionsAreFound() { + doRunTest( + "NodeTypes.allDefinitionsAreFound.yaml", + 3, + "Neos.NodeTypes:Text", + "NodeTypes.Basic.yaml", + offset -> true + ); + } + + /** + * Helper actually running the testcase + */ + private void doRunTest(String fileNameToInclude, int expectedNumberOfSuggestions, String targetPsiElementKeyText, String targetFile, Function offsetChecker) { + myFixture.configureByFiles(fileNameToInclude, "NodeTypes.Basic.yaml"); + + // actually trigger indexing + CodeInsightTestFixtureImpl.ensureIndexesUpToDate(getProject()); + + PsiElement element = myFixture.getFile().findElementAt(myFixture.getCaretOffset()).getParent(); + + ResolveResult[] resolveResult = ((NodeTypeReference) element.getReferences()[0]).multiResolve(false); + assertEquals("Length does not match", expectedNumberOfSuggestions, resolveResult.length); + + YAMLKeyValue yamlKeyValue = assertInstanceOf(resolveResult[0].getElement(), YAMLKeyValue.class); + + assertEquals("keyText does not match", targetPsiElementKeyText, yamlKeyValue.getKeyText()); + assertEquals("wrong file name", targetFile, yamlKeyValue.getContainingFile().getName()); + assertTrue("Text offset fits", offsetChecker.apply(yamlKeyValue.getTextOffset())); + } +} \ No newline at end of file diff --git a/testData/nodeTypeReferences/NodeTypes.Basic.yaml b/testData/nodeTypeReferences/NodeTypes.Basic.yaml new file mode 100644 index 00000000..aaa8aea1 --- /dev/null +++ b/testData/nodeTypeReferences/NodeTypes.Basic.yaml @@ -0,0 +1,6 @@ +'Neos.NodeTypes:Headline': + abstract: true +'Neos.NodeTypes:Text': + abstract: true +'Neos.NodeTypes:Image': + abstract: true \ No newline at end of file diff --git a/testData/nodeTypeReferences/NodeTypes.allDefinitionsAreFound.yaml b/testData/nodeTypeReferences/NodeTypes.allDefinitionsAreFound.yaml new file mode 100644 index 00000000..318b774d --- /dev/null +++ b/testData/nodeTypeReferences/NodeTypes.allDefinitionsAreFound.yaml @@ -0,0 +1,5 @@ +'Neos.NodeTypes:Text': + foo: bar + +'Neos.NodeTypes:Text': + foo: baz \ No newline at end of file diff --git a/testData/nodeTypeReferences/NodeTypes.constraint.yaml b/testData/nodeTypeReferences/NodeTypes.constraint.yaml new file mode 100644 index 00000000..e65bc7b9 --- /dev/null +++ b/testData/nodeTypeReferences/NodeTypes.constraint.yaml @@ -0,0 +1,4 @@ +'Neos.Demo:Homepage': + constraints: + nodeTypes: + 'Neos.NodeTypes:Image': TRUE diff --git a/testData/nodeTypeReferences/NodeTypes.supertypeInOtherFile.yaml b/testData/nodeTypeReferences/NodeTypes.supertypeInOtherFile.yaml new file mode 100644 index 00000000..9775a61a --- /dev/null +++ b/testData/nodeTypeReferences/NodeTypes.supertypeInOtherFile.yaml @@ -0,0 +1,3 @@ +'Neos.Demo:Homepage': + superTypes: + 'Neos.NodeTypes:Image': TRUE diff --git a/testData/nodeTypeReferences/NodeTypes.supertypeInSameFile.yaml b/testData/nodeTypeReferences/NodeTypes.supertypeInSameFile.yaml new file mode 100644 index 00000000..0a9bdd69 --- /dev/null +++ b/testData/nodeTypeReferences/NodeTypes.supertypeInSameFile.yaml @@ -0,0 +1,11 @@ +'Neos.NodeTypes:Page': + constraints: + nodeTypes: + '*': FALSE + 'Neos.NodeTypes:Headline': TRUE + 'Neos.NodeTypes:Text': TRUE + 'Neos.NodeTypes:Image': TRUE + +'Neos.Demo:Homepage': + superTypes: + 'Neos.NodeTypes:Page': TRUE