void () { myFixture.copyDirectoryToProject(getTestName(true), ""); myFixture.configureByFile("spam.py"); final ASTNode functionNode = myFixture.getElementAtCaret().getNode(); // We need IDENTIFIER node final ASTNode[] functionChildren = functionNode.getChildren(TokenSet.create(PyTokenTypes.IDENTIFIER)); assert functionChildren.length == 1 : "Wrong number of identifiers: " + functionChildren.length; final PsiElement element = functionChildren[0].getPsi(); LineMarkerInfo<?> lineMarkerInfo = new PyLineMarkerProvider().getLineMarkerInfo(element); Assert.assertNotNull("No gutter displayed", lineMarkerInfo); GutterIconNavigationHandler<PsiElement> handler = (GutterIconNavigationHandler<PsiElement>)lineMarkerInfo.getNavigationHandler(); Assert.assertNotNull("Gutter has no navigation handle", handler); handler.navigate(new MouseEvent(new JLabel(), 0, 0, 0, 0, 0, 0, false), element); final NavigatablePsiElement[] targets = PyLineMarkerNavigator.getNavigationTargets(element); Assert.assertNotNull("No navigation targets found", targets); Assert.assertThat("Wrong number of targets found", targets, Matchers.arrayWithSize(1)); final NavigatablePsiElement parentMethod = targets[0]; Assert.assertThat("Navigation target has wrong type", parentMethod, Matchers.instanceOf(PyPossibleClassMember.class)); final PyClass parentClass = ((PyPossibleClassMember)parentMethod).getContainingClass(); Assert.assertNotNull("Function overrides other function, but no parent displayed", parentClass); Assert.assertEquals("Wrong parent class name", "Eggs", parentClass.getName()); }