fixed PY-9329 Instance attribute defined outside init: disable inspection in testCases methods which start with setUp

This commit is contained in:
Ekaterina Tuzova
2013-08-26 16:00:14 +04:00
parent f3430e2056
commit 500cdb68de
4 changed files with 21 additions and 5 deletions
@@ -2,7 +2,6 @@ package com.jetbrains.python.inspections;
import com.intellij.codeInspection.LocalInspectionToolSession;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.psi.PsiElementVisitor;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.PyNames;
@@ -52,10 +51,8 @@ public class PyAttributeOutsideInitInspection extends PyInspection {
public void visitPyFunction(PyFunction node) {
final PyClass containingClass = node.getContainingClass();
if (containingClass == null) return;
if (PythonUnitTestUtil.isUnitTestCaseClass(containingClass) || ApplicationManager.getApplication().isUnitTestMode()) {
final String functionName = node.getName();
if (functionName != null && functionName.startsWith("setUp"))
return;
if (PythonUnitTestUtil.isUnitTestCaseClass(containingClass)) {
return;
}
Map<String, PyTargetExpression> attributesInInit = new HashMap<String, PyTargetExpression>();
@@ -2,6 +2,7 @@ package com.jetbrains.python.testing;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.containers.Stack;
@@ -50,6 +51,11 @@ public class PythonUnitTestUtil {
}
private static boolean isUnitTestCaseClass(PyClass cls, HashSet<String> testQualifiedNames) {
if (ApplicationManager.getApplication().isUnitTestMode()) {
for (PyExpression expression : cls.getSuperClassExpressions()) {
if (expression.getText().equals("TestCase")) return true;
}
}
for (PyClassLikeType type : cls.getAncestorTypes(TypeEvalContext.codeInsightFallback())) {
if (type != null && testQualifiedNames.contains(type.getClassQName())) {
return true;
@@ -0,0 +1,9 @@
__author__ = 'ktisha'
from unittest import TestCase
class MyTestCase(TestCase):
def setUp(self):
self.my = 1
def test(self):
self.my = 2
@@ -23,6 +23,10 @@ public class PyAttributeOutsideInitInspectionTest extends PyTestCase {
doTest();
}
public void testUnitTest() {
doTest();
}
public void testFromSuperClassWithoutInit() {
doTest();
}