/* * Copyright 2013-2015 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.variable; 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.XQueryCurrentItem; import org.intellij.xquery.psi.XQueryFunctionDecl; import org.intellij.xquery.psi.XQueryLetBinding; import org.intellij.xquery.psi.XQueryNextItem; import org.intellij.xquery.psi.XQueryParam; import org.intellij.xquery.psi.XQueryPositionalVar; import org.intellij.xquery.psi.XQueryPreviousItem; import org.intellij.xquery.psi.XQueryVarDecl; import org.intellij.xquery.psi.XQueryVarRef; import org.intellij.xquery.psi.XQueryWindowClause; import org.intellij.xquery.settings.XQuerySettings; import static com.intellij.psi.util.PsiTreeUtil.getParentOfType; import static org.intellij.xquery.reference.ReferenceUtil.getTargetOfReferenceAtCaret; /** * User: ligasgr * Date: 28/06/13 * Time: 13:25 */ public class XQueryVariableReferenceTest extends BaseFunctionalTestCase { @Override protected String getTestDataPath() { return "src/testFunctional/testData/org/intellij/xquery/reference/variable"; } public void testVariableRenameInTheSameFile() { myFixture.configureByFiles("VariableRenameInTheSameFile.xq"); myFixture.renameElementAtCaret("renamed"); myFixture.checkResultByFile("VariableRenameInTheSameFile.xq", "VariableRenameInTheSameFileAfter.xq", false); } public void testVariableReferenceOfGlobalVariable() { myFixture.configureByFiles("VariableReferenceInTheSameFile_Global.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryVarDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceOfFunctionArgument() { myFixture.configureByFiles("VariableReferenceInTheSameFile_FunctionArgument.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryFunctionDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceOfFlworExpressionReference() { myFixture.configureByFiles("VariableReferenceInTheSameFile_Flwor.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryLetBinding.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceScopeOfGlobalVariableFromQueryBody() { myFixture.configureByFiles("VariableReferenceScopes_Global.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryVarDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryLetBinding.class); Assertions.assertNotChildOf(resolvedReference, XQueryParam.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceScopeOfGlobalVariableFromAnotherGlobalVariable() { myFixture.configureByFiles("VariableReferenceScopes_GlobalVar.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryVarDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryLetBinding.class); Assertions.assertNotChildOf(resolvedReference, XQueryParam.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceScopeOfFunctionArgument() { myFixture.configureByFiles("VariableReferenceScopes_Function.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryParam.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryLetBinding.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceScopeOfLocalVariableReference() { myFixture.configureByFiles("VariableReferenceScopes_Local.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryLetBinding.class); Assertions.assertNotChildOf(resolvedReference, XQueryParam.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarDecl.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceFromAnotherFile() { myFixture.configureByFiles("VariableReferenceFromAnotherFile.xq", "VariableReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryVarDecl.class); XQueryVarDecl varDecl = getParentOfType(resolvedReference, XQueryVarDecl.class); assertEquals("VariableReferencedFile.xq", varDecl.getContainingFile().getName()); } public void testVariableReferenceToNotExistingVariable() { myFixture.configureByFiles("VariableReferenceToNotExistingVariable.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceToDuplicatedVariable() { myFixture.configureByFiles("VariableReferenceToDuplicatedVariable.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceToVariableDuplicatedInImport() { myFixture.configureByFiles("VariableReferenceToVariableDuplicatedInImport.xq", "VariableReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceOfCurrentItemInTumblingWindow() { myFixture.configureByFiles("VariableReferenceOfCurrentItemInTumblingWindow.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryCurrentItem.class); Assertions.assertChildOf(resolvedReference, XQueryWindowClause.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceOfNextItemInTumblingWindow() { myFixture.configureByFiles("VariableReferenceOfNextItemInTumblingWindow.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryNextItem.class); Assertions.assertChildOf(resolvedReference, XQueryWindowClause.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceOfPreviousItemInTumblingWindow() { myFixture.configureByFiles("VariableReferenceOfPreviousItemInTumblingWindow.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryPreviousItem.class); Assertions.assertChildOf(resolvedReference, XQueryWindowClause.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceOfPositionalVarInTumblingWindow() { myFixture.configureByFiles("VariableReferenceOfPositionalVarInTumblingWindow.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); Assertions.assertChildOf(resolvedReference, XQueryPositionalVar.class); Assertions.assertChildOf(resolvedReference, XQueryWindowClause.class); Assertions.assertNotChildOf(resolvedReference, XQueryVarRef.class); } public void testVariableReferenceFromAnotherFileWhenMarkLogicFlavourUsed() { XQuerySettings settings = XQuerySettings.getInstance(myFixture.getProject()); XQueryFlavour previous = settings.getFlavour(); settings.setFlavour(XQueryFlavour.MARKLOGIC); myFixture.configureByFiles("MarkLogicReferenceFromAnotherFile.xq", "MarkLogicReferencedFile.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); settings.setFlavour(previous); Assertions.assertChildOf(resolvedReference, XQueryVarDecl.class); XQueryVarDecl varDecl = getParentOfType(resolvedReference, XQueryVarDecl.class); assertEquals("MarkLogicReferencedFile.xq", varDecl.getContainingFile().getName()); } public void testVariableReferenceInLetBindingIsNotPointingToItsOwnDeclaredVariable() { myFixture.configureByFiles("VariableReferenceInLetBindingIsNotPointingToItsOwnDeclaredVariable.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceInForBindingIsNotPointingToItsOwnDeclaredVariable() { myFixture.configureByFiles("VariableReferenceInForBindingIsNotPointingToItsOwnDeclaredVariable.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceInLetBindingWillNotReferenceInternalVariablesOfSubExpressions() { myFixture.configureByFiles("VariableReferenceInLetBindingWillNotReferenceInternalVariablesOfSubExpressions.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceInLetBindingWillNotReferenceInternalVariablesOfSubExpressionsOfDifferentType() { myFixture.configureByFiles("VariableReferenceInLetBindingWillNotReferenceInternalVariablesOfSubExpressionsOfDifferentType.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceInForBindingWillNotReferenceInternalVariablesOfSubExpressions() { myFixture.configureByFiles("VariableReferenceInForBindingWillNotReferenceInternalVariablesOfSubExpressions.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceInForBindingWillNotReferenceInternalVariablesOfSubExpressionsOfDifferentType() { myFixture.configureByFiles("VariableReferenceInForBindingWillNotReferenceInternalVariablesOfSubExpressionsOfDifferentType.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableReferenceOfForBindingNestedInInExpressionWillNotReferenceVariableFromParentFor() { myFixture.configureByFiles("VariableReferenceOfForBindingNestedInInExpressionWillNotReferenceVariableFromParentFor.xq"); PsiElement resolvedReference = getTargetOfReferenceAtCaret(myFixture, XQueryVarRef.class); assertNull(resolvedReference); } public void testVariableSafeDelete() { myFixture.configureByFiles("VariableSafeDelete.xq"); myFixture.testAction(new SafeDeleteAction()); myFixture.checkResultByFile("VariableSafeDelete.xq", "VariableSafeDeleteAfter.xq", false); } }