From 2a83c869640591aefed01b250a93def4085f2a25 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 6 Mar 2008 20:25:37 +0300 Subject: [PATCH] tests for multiple file resolve --- .../multiFile/fromImport/FromImport.py | 4 ++ .../multiFile/fromImport/ImportedFile.py | 2 + .../fromImportStar/FromImportStar.py | 4 ++ .../multiFile/fromImportStar/ImportedFile.py | 2 + .../resolve/multiFile/simple/ImportedFile.py | 2 + .../resolve/multiFile/simple/Simple.py | 2 + .../python/PyMultiFileResolveTest.java | 68 +++++++++++++++++++ 7 files changed, 84 insertions(+) create mode 100644 python/testData/resolve/multiFile/fromImport/FromImport.py create mode 100644 python/testData/resolve/multiFile/fromImport/ImportedFile.py create mode 100644 python/testData/resolve/multiFile/fromImportStar/FromImportStar.py create mode 100644 python/testData/resolve/multiFile/fromImportStar/ImportedFile.py create mode 100644 python/testData/resolve/multiFile/simple/ImportedFile.py create mode 100644 python/testData/resolve/multiFile/simple/Simple.py create mode 100644 python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java diff --git a/python/testData/resolve/multiFile/fromImport/FromImport.py b/python/testData/resolve/multiFile/fromImport/FromImport.py new file mode 100644 index 000000000000..60c7938d7245 --- /dev/null +++ b/python/testData/resolve/multiFile/fromImport/FromImport.py @@ -0,0 +1,4 @@ +from ImportedFile import func + +func() +# \ No newline at end of file diff --git a/python/testData/resolve/multiFile/fromImport/ImportedFile.py b/python/testData/resolve/multiFile/fromImport/ImportedFile.py new file mode 100644 index 000000000000..a54c6fc834ed --- /dev/null +++ b/python/testData/resolve/multiFile/fromImport/ImportedFile.py @@ -0,0 +1,2 @@ +def func(): + pass \ No newline at end of file diff --git a/python/testData/resolve/multiFile/fromImportStar/FromImportStar.py b/python/testData/resolve/multiFile/fromImportStar/FromImportStar.py new file mode 100644 index 000000000000..81ce62ff1124 --- /dev/null +++ b/python/testData/resolve/multiFile/fromImportStar/FromImportStar.py @@ -0,0 +1,4 @@ +from ImportedFile import * + +func() +# \ No newline at end of file diff --git a/python/testData/resolve/multiFile/fromImportStar/ImportedFile.py b/python/testData/resolve/multiFile/fromImportStar/ImportedFile.py new file mode 100644 index 000000000000..a54c6fc834ed --- /dev/null +++ b/python/testData/resolve/multiFile/fromImportStar/ImportedFile.py @@ -0,0 +1,2 @@ +def func(): + pass \ No newline at end of file diff --git a/python/testData/resolve/multiFile/simple/ImportedFile.py b/python/testData/resolve/multiFile/simple/ImportedFile.py new file mode 100644 index 000000000000..44d0305f342d --- /dev/null +++ b/python/testData/resolve/multiFile/simple/ImportedFile.py @@ -0,0 +1,2 @@ +def f(): + pass \ No newline at end of file diff --git a/python/testData/resolve/multiFile/simple/Simple.py b/python/testData/resolve/multiFile/simple/Simple.py new file mode 100644 index 000000000000..c38adc6e6e3f --- /dev/null +++ b/python/testData/resolve/multiFile/simple/Simple.py @@ -0,0 +1,2 @@ +import ImportedFile +# diff --git a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java new file mode 100644 index 000000000000..9f50245b3854 --- /dev/null +++ b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java @@ -0,0 +1,68 @@ +package com.jetbrains.python; + +import com.intellij.codeInsight.CodeInsightTestCase; +import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiReference; +import com.intellij.testFramework.PsiTestUtil; +import com.jetbrains.python.psi.PyFile; +import com.jetbrains.python.psi.PyFunction; + +/** + * @author yole + */ +public class PyMultiFileResolveTest extends CodeInsightTestCase { + public void testSimple() throws Exception { + PsiElement element = doResolve(); + assertTrue(element instanceof PyFile); + assertEquals("ImportedFile.py", ((PyFile) element).getName()); + } + + public void testFromImport() throws Exception { + PsiElement element = doResolve(); + assertTrue(element instanceof PyFunction); + assertEquals("func", ((PyFunction) element).getName()); + } + + public void testFromImportStar() throws Exception { + PsiElement element = doResolve(); + assertTrue(element instanceof PyFunction); + assertEquals("func", ((PyFunction) element).getName()); + } + + private PsiElement doResolve() throws Exception { + String testName = getTestName(true); + String fileName = getTestName(false) + ".py"; + String root = PathManager.getHomePath() + "/plugins/python/testData/resolve/multiFile/" + testName; + VirtualFile rootDir = PsiTestUtil.createTestProjectStructure(myProject, myModule, root, myFilesToDelete, false); + PsiTestUtil.addSourceContentToRoots(myModule, rootDir); + PsiDocumentManager.getInstance(myProject).commitAllDocuments(); + + VirtualFile sourceFile = rootDir.findChild(fileName); + assert sourceFile != null; + PsiFile psiFile = myPsiManager.findFile(sourceFile); + int offset = findMarkerOffset(psiFile); + final PsiReference ref = psiFile.findReferenceAt(offset); + return ref.resolve(); + } + + private int findMarkerOffset(final PsiFile psiFile) { + Document document = PsiDocumentManager.getInstance(myProject).getDocument(psiFile); + assert document != null; + int offset = -1; + for (int i=1; i"); + if (index>0) { + offset = document.getLineStartOffset(i-1) + index; + } + } + assert offset != -1; + return offset; + } +}