From c6ab7f76f3cd0dd12b633eaabded5367b11b35a3 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 24 Dec 2009 19:44:45 +0300 Subject: [PATCH] convert test to PyLightFixtureTestCase --- .../PyUnresolvedReferencesInspection.java | 8 +- .../inspections/AddFieldAddConstructor.py | 2 +- .../inspections/AddFieldFromInstance.py | 2 +- .../inspections/AddFieldFromMethod.py | 2 +- python/testData/inspections/AddImportDoc.py | 2 +- .../inspections/AddMethodFromInstance.py | 2 +- .../inspections/AddMethodFromMethod.py | 2 +- python/testData/inspections/AddSelf.py | 2 +- .../inspections/AddToImportFromList.py | 2 +- .../testData/inspections/QualifyByImport.py | 2 +- .../inspections/RemoveTrailingSemicolon.py | 2 +- python/testData/inspections/RenameToSelf.py | 2 +- .../com/jetbrains/python/PyQuickFixTest.java | 115 ++++++------------ 13 files changed, 52 insertions(+), 93 deletions(-) diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index 13a3c9d776ac..957354d67fed 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -87,10 +87,10 @@ public class PyUnresolvedReferencesInspection extends LocalInspectionTool { } @NotNull - static List proposeImportFixes(final PyElement node, String ref_text) { + static Collection proposeImportFixes(final PyElement node, String ref_text) { PsiFile exisitng_import_file = null; // if there's a matching existing import, this it the file it imports ImportFromExistingFix fix = null; - List fixes = new ArrayList(2); + Collection fixes = new HashSet(2); Set seen_file_names = new HashSet(); // true import names // maybe the name is importable via some existing 'import foo' statement, and only needs a qualifier. // walk up collecting all such statements and analyzing @@ -279,10 +279,10 @@ public class PyUnresolvedReferencesInspection extends LocalInspectionTool { } // look in other imported modules for this whole name if (! ref_in_import) { - List import_fixes = proposeImportFixes(node, ref_text); + Collection import_fixes = proposeImportFixes(node, ref_text); if (import_fixes.size() > 0) { actions.addAll(import_fixes); - Object first_action = import_fixes.get(0); + Object first_action = import_fixes.iterator().next(); if (first_action instanceof HintAction) { hint_action = ((HintAction)first_action); } diff --git a/python/testData/inspections/AddFieldAddConstructor.py b/python/testData/inspections/AddFieldAddConstructor.py index d68c345ea44c..142be452fa33 100644 --- a/python/testData/inspections/AddFieldAddConstructor.py +++ b/python/testData/inspections/AddFieldAddConstructor.py @@ -5,4 +5,4 @@ class A: class B(A): def foo(self): - return self.x + return self.x diff --git a/python/testData/inspections/AddFieldFromInstance.py b/python/testData/inspections/AddFieldFromInstance.py index 3d1290dd4379..85f7724d6b0c 100644 --- a/python/testData/inspections/AddFieldFromInstance.py +++ b/python/testData/inspections/AddFieldFromInstance.py @@ -4,4 +4,4 @@ class A: a = A() -a.y+1 +a.y+1 diff --git a/python/testData/inspections/AddFieldFromMethod.py b/python/testData/inspections/AddFieldFromMethod.py index 897bd9b0383d..6680c07a9282 100644 --- a/python/testData/inspections/AddFieldFromMethod.py +++ b/python/testData/inspections/AddFieldFromMethod.py @@ -3,4 +3,4 @@ class A: self.x = 1 def foo(self): - a = self.y + a = self.y diff --git a/python/testData/inspections/AddImportDoc.py b/python/testData/inspections/AddImportDoc.py index e8b8a9fa6e83..21eacb04e0da 100644 --- a/python/testData/inspections/AddImportDoc.py +++ b/python/testData/inspections/AddImportDoc.py @@ -1,4 +1,4 @@ "Doc comment stays intact" -AddImportDoc.foo +AddImportDoc.foo foo = 1 diff --git a/python/testData/inspections/AddMethodFromInstance.py b/python/testData/inspections/AddMethodFromInstance.py index e114cf9f5666..07024b2fa6e5 100644 --- a/python/testData/inspections/AddMethodFromInstance.py +++ b/python/testData/inspections/AddMethodFromInstance.py @@ -4,4 +4,4 @@ class A: a = A() -a.y() +a.y() diff --git a/python/testData/inspections/AddMethodFromMethod.py b/python/testData/inspections/AddMethodFromMethod.py index bee15e3c1190..84cb7101c4f0 100644 --- a/python/testData/inspections/AddMethodFromMethod.py +++ b/python/testData/inspections/AddMethodFromMethod.py @@ -3,4 +3,4 @@ class A: self.x = 1 def foo(self, a): - self.y(1, a) + self.y(1, a) diff --git a/python/testData/inspections/AddSelf.py b/python/testData/inspections/AddSelf.py index 7affecd6841e..06916a26f40c 100644 --- a/python/testData/inspections/AddSelf.py +++ b/python/testData/inspections/AddSelf.py @@ -1,3 +1,3 @@ class A: - def foo(): # Add 'self' + def foo(): # Add 'self' pass diff --git a/python/testData/inspections/AddToImportFromList.py b/python/testData/inspections/AddToImportFromList.py index 0e908235b701..373ff05ff3af 100644 --- a/python/testData/inspections/AddToImportFromList.py +++ b/python/testData/inspections/AddToImportFromList.py @@ -1,3 +1,3 @@ from AddToImportFromFoo import bar -foo # must get imported +foo # must get imported diff --git a/python/testData/inspections/QualifyByImport.py b/python/testData/inspections/QualifyByImport.py index 5b3905668ac5..70e969c8998f 100644 --- a/python/testData/inspections/QualifyByImport.py +++ b/python/testData/inspections/QualifyByImport.py @@ -1,3 +1,3 @@ import QualifyByImportFoo -foo # must be qualified +foo # must be qualified diff --git a/python/testData/inspections/RemoveTrailingSemicolon.py b/python/testData/inspections/RemoveTrailingSemicolon.py index 464e5991ca8a..5dc39b9dc2bb 100644 --- a/python/testData/inspections/RemoveTrailingSemicolon.py +++ b/python/testData/inspections/RemoveTrailingSemicolon.py @@ -1 +1 @@ -a = 4; b = 5; \ No newline at end of file +a = 4; b = 5; \ No newline at end of file diff --git a/python/testData/inspections/RenameToSelf.py b/python/testData/inspections/RenameToSelf.py index b8fed41e3a2f..e4a2a2ab4b08 100644 --- a/python/testData/inspections/RenameToSelf.py +++ b/python/testData/inspections/RenameToSelf.py @@ -1,3 +1,3 @@ class A: - def foo(slf): # Rename to 'self' + def foo(slf): # Rename to 'self' pass diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java index 0e5d5ec77b25..fd44fa387ce6 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -1,30 +1,26 @@ package com.jetbrains.python; -import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase; -import com.intellij.codeInsight.daemon.impl.HighlightInfo; -import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase; import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.openapi.editor.markup.GutterIconRenderer; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.SdkModificator; +import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; +import com.intellij.testFramework.LightProjectDescriptor; +import com.jetbrains.python.fixtures.PyLightFixtureTestCase; import com.jetbrains.python.inspections.PyMethodParametersInspection; import com.jetbrains.python.inspections.PyTrailingSemicolonInspection; import com.jetbrains.python.inspections.PyUnresolvedReferencesInspection; -import gnu.trove.TIntObjectHashMap; +import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NonNls; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.io.File; /** * Test actions that various inspections add. * User: dcheryasov * Date: Nov 29, 2008 12:47:08 AM */ -public class PyQuickFixTest extends DaemonAnalyzerTestCase { +public class PyQuickFixTest extends PyLightFixtureTestCase { public void testAddImport() throws Exception { doInspectionTest("AddImport.py", PyUnresolvedReferencesInspection.class, PyBundle.message("ACT.NAME.add.import"), true, true); @@ -106,20 +102,6 @@ public class PyQuickFixTest extends DaemonAnalyzerTestCase { ); } - protected VirtualFile[] loadFiles(String[] names) { - VirtualFile[] ret = new VirtualFile[names.length]; - String prefix = getTestDataPath(); - for (int i=0; i < names.length; i += 1) { - ret[i] = getVirtualFile(prefix+names[i]); - } - return ret; - } - - protected void doTest(VirtualFile[] vFile, boolean checkWarnings, boolean checkInfos) throws Exception { - configureByFiles(null, vFile); - doDoTest(checkWarnings, checkInfos); - } - protected @NonNls String getTestDataPath() { return PythonTestUtil.getTestDataPath() + "/inspections/"; } @@ -148,68 +130,32 @@ public class PyQuickFixTest extends DaemonAnalyzerTestCase { boolean applyFix, boolean available ) throws Exception { - final LocalInspectionTool tool = (LocalInspectionTool)inspectionClass.newInstance(); - enableInspectionTool(tool); - configureByFiles(null, testFiles); - Collection infos = doDoTest(true, false); - - doQuickFixTest(infos, quickFixName, applyFix, available, testFiles[0]); - disableInspectionTool(tool.getShortName()); - } - - protected void doQuickFixTest(Collection infos, - String quickFixName, - boolean applyFix, - boolean shouldBeAvailable, - String s) throws Exception { - final List availableActions = new ArrayList(1); - - TIntObjectHashMap map = new TIntObjectHashMap(infos.size()); - for (HighlightInfo info : infos) { - final GutterIconRenderer renderer = info.getGutterIconRenderer(); - if (renderer == null) { - assertFalse("There should be one intention for highlight info", map.containsKey(info.startOffset)); - map.put(info.startOffset, info); - - if (info.quickFixActionRanges != null) { - for (Pair pair : info.quickFixActionRanges) { - IntentionAction action = pair.first.getAction(); - availableActions.add(action); - } - } - } - } - - final IntentionAction intentionAction = LightQuickFixTestCase.findActionWithText(availableActions, quickFixName); - if (shouldBeAvailable) { + myFixture.enableInspections(inspectionClass); + myFixture.configureByFiles(testFiles); + myFixture.checkHighlighting(true, false, false); + final IntentionAction intentionAction = myFixture.findSingleIntention(quickFixName); + if (available) { assertNotNull(intentionAction); + if (applyFix) { + myFixture.launchAction(intentionAction); + + myFixture.checkResultByFile(graftBeforeExt(testFiles [0], "_after")); + } } else { assertNull(intentionAction); } - - if (applyFix && shouldBeAvailable) { - intentionAction.invoke(myProject, myEditor, myFile); - - checkResultByFile(graftBeforeExt(s, "_after")); - } } // Turns "name.ext" to "name_insertion.ext" - private @NonNls String graftBeforeExt(String name, String insertion) { + + @NonNls + private static String graftBeforeExt(String name, String insertion) { int dotpos = name.indexOf('.'); if (dotpos < 0) dotpos = name.length(); return name.substring(0, dotpos) + insertion + name.substring(dotpos, name.length()); } - /* - @Override - protected Sdk getProjectJDK() { - return createMockJdk(PathManager.getHomePath() + "/plugins/python/testData/mockPythonJDK"); - } - */ - - /* private static Sdk createMockJdk(String jdkHome) { File jdkHomeFile = new File(jdkHome); if (!jdkHomeFile.exists()) return null; @@ -226,5 +172,18 @@ public class PyQuickFixTest extends DaemonAnalyzerTestCase { jdk.setVersionString("2.5"); return jdk; } - */ -} \ No newline at end of file + + protected static class PyWithSdkProjectDescriptor extends PyLightProjectDescriptor { + @Override + public Sdk getSdk() { + return createMockJdk(PathManager.getHomePath() + "/plugins/python/testData/mockPythonJDK"); + } + } + + private static final LightProjectDescriptor ourProjectDescriptor = new PyWithSdkProjectDescriptor(); + + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return ourProjectDescriptor; + } +}