public void testIsVariable() { myFixture.configureByFiles("is_variable.ex"); PsiElement callable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(callable, Call.class); assertFalse("order_by is incorrectly marked as a variable", isVariable(callable)); }
public void testIsParameter() { myFixture.configureByFiles("planet.ex"); PsiElement parameter = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(parameter, UnqualifiedNoArgumentsCall.class); assertTrue("planet is not marked as a parameter", isParameter(parameter)); }
public void testIsVariable() { myFixture.configureByFiles("is_variable.ex"); @SuppressWarnings("ConstantConditions") PsiElement callable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getParent(); assertInstanceOf(callable, Call.class); assertFalse("parameter in tuple after Alias dot is incorrectly marked as a variable", isVariable(callable)); }
public void testVariableUseScope() { myFixture.configureByFiles("variable_use_scope.ex"); @SuppressWarnings("ConstantConditions") PsiElement callable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getParent(); assertInstanceOf(callable, UnqualifiedNoArgumentsCall.class); assertEquals( LocalSearchScope.EMPTY, variableUseScope((UnqualifiedNoArgumentsCall) callable) ); }
private void assertReferenceAndResolvedNameArityRange(@NotNull String name, int arity) { PsiElement elementAtCaret = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()); assertNotNull(elementAtCaret); PsiElement grandParent = elementAtCaret.getParent().getParent(); assertNotNull(grandParent); assertInstanceOf(grandParent, Call.class); Call grandParentCall = (Call) grandParent; assertEquals(name, grandParentCall.functionName()); assertEquals(arity, grandParentCall.resolvedFinalArity()); assertResolvedNameArityRange(grandParentCall, name, arity); }
public void testIs() { myFixture.configureByFiles("is.ex"); PsiElement callable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(callable, Call.class); assertFalse( "unresolvable no argument call in at bracket operation is incorrectly marked as a parameter", isParameter(callable) ); assertFalse( "unresolvable no argument call in at bracket operation is incorrectly marked as a variable", isVariable(callable) ); }
public void testIsParameter() { myFixture.configureByFiles("is_parameter.ex"); PsiElement variable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling() .getLastChild() .getLastChild(); assertInstanceOf(variable, UnqualifiedNoArgumentsCall.class); assertFalse("alias is marked as a parameter", isParameter(variable)); assertFalse("alias is marked as a variable", isVariable(variable)); }
private void assertUnresolvableReferenceNameArityRange(@NotNull String name, int arity) { PsiElement elementAtCaret = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()); assertNotNull(elementAtCaret); PsiElement grandParent = elementAtCaret.getParent().getParent(); assertNotNull(grandParent); assertInstanceOf(grandParent, Call.class); Call grandParentCall = (Call) grandParent; assertEquals(name, grandParentCall.functionName()); assertEquals(arity, grandParentCall.resolvedFinalArity()); PsiReference reference = grandParent.getReference(); assertNotNull(reference); PsiElement resolved = reference.resolve(); assertNull(resolved); }
public void testDoubleAliasesModuleQualifier() { myFixture.configureByFiles("double_aliased_module_qualifier.ex", "referenced.ex"); PsiElement elementAtCaret = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()); assertNotNull(elementAtCaret); PsiElement grandParent = elementAtCaret.getParent().getParent(); assertNotNull(grandParent); assertInstanceOf(grandParent, Call.class); PsiReference reference = grandParent.getReference(); assertNotNull(reference); PsiElement resolved = reference.resolve(); assertNull(resolved); }
public void testUnresolvedAliasQualifier() { myFixture.configureByFiles("unresolved_alias_qualifier.ex", "referenced.ex"); PsiElement elementAtCaret = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()); assertNotNull(elementAtCaret); PsiElement grandParent = elementAtCaret.getParent().getParent(); assertNotNull(grandParent); assertInstanceOf(grandParent, Call.class); PsiReference reference = grandParent.getReference(); assertNotNull(reference); PsiElement resolved = reference.resolve(); assertNull(resolved); }
public void testMapAccessQualifier() { myFixture.configureByFiles("map_access_qualifier.ex", "referenced.ex"); PsiElement elementAtCaret = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()); assertNotNull(elementAtCaret); PsiElement grandParent = elementAtCaret.getParent().getParent(); assertNotNull(grandParent); assertInstanceOf(grandParent, Call.class); PsiReference reference = grandParent.getReference(); assertNotNull(reference); PsiElement resolved = reference.resolve(); assertNull(resolved); }
public void testAmbiguousBackReference() { myFixture.configureByFiles("ambiguous_back.ex"); PsiElement ambiguous = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(ambiguous.getFirstChild(), ElixirIdentifier.class); PsiReference reference = ambiguous.getReference(); assertNotNull("`referenced` has no reference", reference); PsiElement resolved = reference.resolve(); assertNotNull("`referenced` not resolved", resolved); assertEquals( "ambiguous reference does not resolve to previous function declaration", "def referenced do\n\n end", resolved.getText() ); }
public void testAmbiguousForwardReference() { myFixture.configureByFiles("ambiguous_forward.ex"); PsiElement ambiguous = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(ambiguous.getFirstChild(), ElixirIdentifier.class); PsiReference reference = ambiguous.getReference(); assertNotNull("`referenced` has no reference", reference); PsiElement resolved = reference.resolve(); assertNotNull("`referenced` not resolved", resolved); assertEquals( "ambiguous reference does not resolve to forward function declaration", "def referenced do\n\n end", resolved.getText() ); }
public void testAmbiguousRecursiveReference() { myFixture.configureByFiles("ambiguous_recursive.ex"); PsiElement ambiguous = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling(); assertInstanceOf(ambiguous.getFirstChild(), ElixirIdentifier.class); PsiReference reference = ambiguous.getReference(); assertNotNull("`referenced` has no reference", reference); PsiElement resolved = reference.resolve(); assertNotNull("`referenced` not resolved", resolved); assertEquals( "ambiguous reference does not resolve to recursive function declaration", "def referenced do\n referenced\n\n a = 1\n end", resolved.getText() ); }
public void testIsVariable() { myFixture.configureByFiles("is_variable.ex"); PsiElement callable = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getPrevSibling() .getLastChild() .getLastChild() .getLastChild() .getLastChild() .getLastChild() .getLastChild(); assertInstanceOf(callable, Call.class); assertFalse("assoc is incorrectly marked as a variable", isVariable(callable)); }
public void testParenthesesRecursiveReference() { myFixture.configureByFiles("parentheses_recursive.ex"); PsiElement parenthesesCall = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getParent() .getParent(); assertInstanceOf(parenthesesCall.getFirstChild(), ElixirIdentifier.class); PsiReference reference = parenthesesCall.getReference(); assertNotNull("`referenced` has no reference", reference); PsiElement resolved = reference.resolve(); assertNotNull("`referenced` not resolved", resolved); assertEquals( "ambiguous reference does not resolve to recursive function declaration", "def referenced do\n referenced()\n\n a = 1\n end", resolved.getText() ); }
public void testParenthesesSingleCorrectArityReference() { myFixture.configureByFiles("parentheses_single_correct_arity.ex"); PsiElement parenthesesCall = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getParent() .getParent(); assertInstanceOf(parenthesesCall.getFirstChild(), ElixirIdentifier.class); PsiReference reference = parenthesesCall.getReference(); assertNotNull("`referenced` has no reference", reference); PsiElement resolved = reference.resolve(); assertNotNull("`referenced` not resolved", resolved); assertEquals( "parentheses 1-arity reference does not resolve to single 1-arity function declaration", "def referenced(_) do\n end", resolved.getText() ); }
public void testReference() { myFixture.configureByFiles("reference.ex", "suffix.ex", "nested.ex"); PsiElement alias = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getPrevSibling(); assertInstanceOf(alias, QualifiedAlias.class); PsiPolyVariantReference polyVariantReference = (PsiPolyVariantReference) alias.getReference(); assertNotNull(polyVariantReference); ResolveResult[] resolveResults = polyVariantReference.multiResolve(false); assertEquals(2, resolveResults.length); // alias assertEquals("alias Prefix.Suffix", resolveResults[0].getElement().getParent().getParent().getText()); // defmodule assertEquals("defmodule Prefix.Suffix.Nested do\nend", resolveResults[1].getElement().getText()); }
public void testFunctionNameMultipleSameArity() { myFixture.configureByFiles("function_name_multiple_same_arity.ex"); PsiElement parenthesesCall = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getParent() .getParent(); assertInstanceOf(parenthesesCall.getFirstChild(), ElixirIdentifier.class); PsiReference reference = parenthesesCall.getReference(); assertNotNull("`referenced` has no reference", reference); assertInstanceOf(reference, PsiPolyVariantReference.class); PsiPolyVariantReference polyVariantReference = (PsiPolyVariantReference) reference; ResolveResult[] resolveResults = polyVariantReference.multiResolve(false); assertNotEquals("Resolved to both clauses instead of selected clause", 2, resolveResults.length); assertEquals("Resolves to self", 1, resolveResults.length); PsiElement resolved = reference.resolve(); assertNotNull("Reference not resolved", resolved); assertEquals("def referenced(true) do\n end", resolved.getText()); }
public void testReference() { myFixture.configureByFiles("reference.ex", "suffix.ex"); PsiElement alias = myFixture .getFile() .findElementAt(myFixture.getCaretOffset()) .getParent() .getPrevSibling() .getFirstChild(); assertInstanceOf(alias, ElixirAlias.class); PsiPolyVariantReference polyVariantReference = (PsiPolyVariantReference) alias.getReference(); assertNotNull(polyVariantReference); ResolveResult[] resolveResults = polyVariantReference.multiResolve(false); assertEquals(resolveResults.length, 2); // alias assertEquals("alias Prefix.Suffix", resolveResults[0].getElement().getParent().getParent().getText()); // defmodule assertEquals("defmodule Prefix.Suffix do\nend", resolveResults[1].getElement().getText()); }