/* * Copyright 2013-2017 Grzegorz Ligas <ligasgr@gmail.com> and other contributors * (see the CONTRIBUTORS file). * * 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.intellij.xquery.reference.function; import com.intellij.psi.PsiElement; import com.intellij.refactoring.actions.SafeDeleteAction; import org.intellij.xquery.Assertions; import org.intellij.xquery.BaseFunctionalTestCase; import org.intellij.xquery.XQueryFlavour; import org.intellij.xquery.psi.XQueryArrowFunctionReference; import org.intellij.xquery.psi.XQueryFunctionCall; import org.intellij.xquery.psi.XQueryFunctionDecl; import org.intellij.xquery.psi.XQueryNamedFunctionRef; import org.intellij.xquery.psi.XQueryVarDecl; import org.intellij.xquery.psi.XQueryVarRef; import org.intellij.xquery.settings.XQuerySettings; import static com.intellij.psi.util.PsiTreeUtil.getParentOfType; import static org.intellij.xquery.Assertions.assertChildOf; import static org.intellij.xquery.reference.ReferenceUtil.getTargetOfReferenceAtCaret; /** * User: ligasgr * Date: 03/07/13 * Time: 21:44 */ public class XQueryFunctionReferenceTest extends BaseFunctionalTestCase { @Override protected String getTestDataPath() { return "src/testFunctional/testData/org/intellij/xquery/reference/function"; } public void testFunctionRenameInTheSameFile() { myFixture.configureByFiles("FunctionRenameInTheSameFile.xq"); myFixture.renameElementAtCaret("renamed"); myFixture.checkResultByFile("FunctionRenameInTheSameFile.xq", "FunctionRenameInTheSameFileAfter.xq", false); } public void testFunctionReferenceInLibraryModule() { myFixture.configureByFiles("FunctionReferenceInTheSameFile_Library.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromVariableDeclaration() { myFixture.configureByFiles("FunctionReferenceInTheSameFile_Global.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromFunctionArgument() { myFixture.configureByFiles("FunctionReferenceInTheSameFile_FunctionArgument.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromFlworExpression() { myFixture.configureByFiles("FunctionReferenceInTheSameFile_Flwor.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionNamedReference() { myFixture.configureByFiles("FunctionNamedReference.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryNamedFunctionRef.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromAnotherFile() { myFixture.configureByFiles("FunctionReferenceFromAnotherFile.xq", "FunctionReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFile.xq", functionDeclaration.getContainingFile().getName()); } public void testFunctionReferenceToNotExistingFunction() { myFixture.configureByFiles("FunctionReferenceToNotExistingFunction.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertNull(resolvedReference); } public void testFunctionReferenceToDuplicatedFunction() { myFixture.configureByFiles("FunctionReferenceToDuplicatedFunction.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertNull(resolvedReference); } public void testFunctionReferenceToFunctionDuplicatedInImport() { myFixture.configureByFiles("FunctionReferenceToFunctionDuplicatedInImport.xq", "FunctionReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertNull(resolvedReference); } public void testFunctionReferenceFromPrefixToDefaultNamespace() { myFixture.configureByFile("FunctionReferenceFromPrefixToDefaultNamespace.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromDefaultNamespaceToPrefix() { myFixture.configureByFile("FunctionReferenceFromDefaultNamespaceToPrefix.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromDefaultNamespaceToDefaultNamespace() { myFixture.configureByFile("FunctionReferenceFromDefaultNamespaceToDefaultNamespace.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); } public void testFunctionReferenceFromAnotherFileWithDefaultNamespace() { myFixture.configureByFiles("FunctionReferenceFromAnotherFileWithDefaultNamespace.xq", "FunctionReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFile.xq", functionDeclaration.getContainingFile().getName()); } public void testFunctionReferenceFromAnotherFileWithoutImportedPrefix() { myFixture.configureByFiles("FunctionReferenceFromAnotherFileWithoutImportedPrefix.xq", "FunctionReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFile.xq", functionDeclaration.getContainingFile().getName()); } public void testFunctionReferenceFromAnotherFileWithDefaultNamespaceToFileWithDefaultNamespace() { myFixture.configureByFiles("FunctionReferenceFromAnotherFileWithDefaultNamespaceToFileWithDefaultNamespace" + ".xq", "FunctionReferencedFileWithDefaultNamespace.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFileWithDefaultNamespace.xq", functionDeclaration.getContainingFile().getName ()); } public void testFunctionReferenceFromAnotherFileWithoutImportedPrefixToFileWithDefaultNamespace() { myFixture.configureByFiles("FunctionReferenceFromAnotherFileWithoutImportedPrefixToFileWithDefaultNamespace.xq", "FunctionReferencedFileWithDefaultNamespace.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFileWithDefaultNamespace.xq", functionDeclaration.getContainingFile().getName ()); } public void testFunctionReferenceFromAnotherFileWhichHasDefaultNamespace() { myFixture.configureByFiles("FunctionReferenceFromAnotherFileWhichHasDefaultNamespace.xq", "FunctionReferencedFileWithDefaultNamespace.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("FunctionReferencedFileWithDefaultNamespace.xq", functionDeclaration.getContainingFile().getName ()); } public void testFunctionReferenceWithDifferentArity() { myFixture.configureByFiles("FunctionReferenceWithDifferentArity.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals(2, functionDeclaration.getArity()); } public void testFunctionReferenceInArrowWithOneArgument() { myFixture.configureByFiles("FunctionReferenceInArrowWithOneArgument.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryArrowFunctionReference.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals(1, functionDeclaration.getArity()); } public void testFunctionReferenceInArrowWithTwoArguments() { myFixture.configureByFiles("FunctionReferenceInArrowWithTwoArguments.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryArrowFunctionReference.class); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals(2, functionDeclaration.getArity()); } public void testFunctionReferenceFromAnotherFileWhenMarkLogicFlavourUsed() { XQuerySettings settings = XQuerySettings.getInstance(myFixture.getProject()); XQueryFlavour previous = settings.getFlavour(); settings.setFlavour(XQueryFlavour.MARKLOGIC); myFixture.configureByFiles("MarkLogicReferenceFromAnotherFile.xq", "MarkLogicReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryFunctionCall.class); settings.setFlavour(previous); assertChildOf(resolvedReference, XQueryFunctionDecl.class); XQueryFunctionDecl functionDeclaration = (XQueryFunctionDecl) resolvedReference.getParent(); assertEquals("MarkLogicReferencedFile.xq", functionDeclaration.getContainingFile().getName()); } public void testFunctionSafeDelete() { myFixture.configureByFiles("FunctionSafeDelete.xq"); myFixture.testAction(new SafeDeleteAction()); myFixture.checkResultByFile("FunctionSafeDelete.xq", "FunctionSafeDeleteAfter.xq", false); } }