PY-18816 Extract assertType() methods in PyTestCase to remove duplication

This commit is contained in:
Mikhail Golubev
2017-07-19 19:28:31 +03:00
parent 7145542fc2
commit 36e9721382
6 changed files with 24 additions and 41 deletions
@@ -47,6 +47,7 @@ import org.junit.Test;
import java.io.File;
import java.util.Set;
import static com.jetbrains.python.fixtures.PyTestCase.assertType;
import static org.junit.Assert.*;
/**
@@ -145,10 +146,7 @@ public class PythonSkeletonsTest extends PyEnvTestCase {
ApplicationManager.getApplication().runReadAction(() -> {
final PyExpression expr = myFixture.findElementByText("expr", PyExpression.class);
final PsiFile file = myFixture.getFile();
final TypeEvalContext context = TypeEvalContext.codeAnalysis(file.getProject(), file);
final PyType type = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(type, context);
assertEquals("int", actualType);
assertType("int", expr, TypeEvalContext.codeAnalysis(file.getProject(), file));
});
}
});
@@ -18,11 +18,9 @@ package com.jetbrains.python;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightProjectDescriptor;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
/**
@@ -616,10 +614,4 @@ public class Py3TypeTest extends PyTestCase {
assertType(expectedType, expr, TypeEvalContext.codeAnalysis(project, containingFile));
assertType(expectedType, expr, TypeEvalContext.userInitiated(project, containingFile));
}
private static void assertType(String expectedType, PyExpression expr, TypeEvalContext context) {
final PyType actual = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals(expectedType, actualType);
}
}
@@ -16,7 +16,6 @@
package com.jetbrains.python;
import com.google.common.collect.ImmutableList;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.documentation.docstrings.DocStringFormat;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
@@ -2005,9 +2004,7 @@ public class PyTypeTest extends PyTestCase {
}
private static void doTest(final String expectedType, final PyExpression expr, final TypeEvalContext context) {
PyType actual = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals(expectedType, actualType);
assertType(expectedType, expr, context);
}
private void doTest(@NotNull final String expectedType, @NotNull final String text) {
@@ -2017,9 +2014,7 @@ public class PyTypeTest extends PyTestCase {
private static void checkTypes(@NotNull String expectedType, @Nullable PyExpression expr) {
assertNotNull(expr);
for (TypeEvalContext context : getTypeEvalContexts(expr)) {
final PyType actual = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals("Failed in " + context, expectedType, actualType);
assertType(expectedType, expr, context);
}
}
@@ -21,11 +21,9 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.testFramework.LightProjectDescriptor;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -993,13 +991,7 @@ public class PyTypingTest extends PyTestCase {
final PyExpression expr = myFixture.findElementByText("expr", PyExpression.class);
final TypeEvalContext codeAnalysis = TypeEvalContext.codeAnalysis(expr.getProject(),expr.getContainingFile());
final TypeEvalContext userInitiated = TypeEvalContext.userInitiated(expr.getProject(), expr.getContainingFile()).withTracing();
assertType(expectedType, expr, codeAnalysis, "code analysis");
assertType(expectedType, expr, userInitiated, "user initiated");
}
private static void assertType(String expectedType, PyExpression expr, TypeEvalContext context, String contextName) {
final PyType actual = context.getType(expr);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals("Failed in " + contextName + " context", expectedType, actualType);
assertType("Failed in code analysis context", expectedType, expr, codeAnalysis);
assertType("Failed in user initiated context", expectedType, expr, userInitiated);
}
}
@@ -62,14 +62,14 @@ import com.jetbrains.python.PythonHelpersLocator;
import com.jetbrains.python.PythonLanguage;
import com.jetbrains.python.PythonTestUtil;
import com.jetbrains.python.documentation.PyDocumentationSettings;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.documentation.docstrings.DocStringFormat;
import com.jetbrains.python.formatter.PyCodeStyleSettings;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyUtil;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyFileImpl;
import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.Assert;
@@ -434,5 +434,19 @@ public abstract class PyTestCase extends UsefulTestCase {
assertNotNull(file);
return file.findElementAt(myFixture.getCaretOffset());
}
public static void assertType(@NotNull String expectedType, @NotNull PyTypedElement element, @NotNull TypeEvalContext context) {
assertType("Failed in " + context + " context", expectedType, element, context);
}
public static void assertType(@NotNull String message,
@NotNull String expectedType,
@NotNull PyTypedElement element,
@NotNull TypeEvalContext context) {
final PyType actual = context.getType(element);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals(message, expectedType, actualType);
}
}
@@ -24,11 +24,9 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.CodeInsightTestFixture;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyTypedElement;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -78,12 +76,6 @@ public class PyiTypeTest extends PyTestCase {
assertType(expectedType, typedElement, TypeEvalContext.userInitiated(project, containingFile));
}
private static void assertType(@NotNull String expectedType, @NotNull PyTypedElement element, @NotNull TypeEvalContext context) {
final PyType actual = context.getType(element);
final String actualType = PythonDocumentationProvider.getTypeName(actual, context);
assertEquals("Failed in " + context + " context", expectedType, actualType);
}
public void testFunctionParameter() {
doTest("int");
}