import os
|
|
import unittest
|
|
import shutil
|
|
import sys
|
|
import tempfile
|
|
|
|
import mock
|
|
|
|
import elpy.pydocutils
|
|
|
|
|
|
class TestGetPydocCompletions(unittest.TestCase):
|
|
def test_should_return_top_level_modules(self):
|
|
modules = elpy.pydocutils.get_pydoc_completions("")
|
|
self.assertIn('sys', modules)
|
|
self.assertIn('json', modules)
|
|
|
|
def test_should_return_submodules(self):
|
|
modules = elpy.pydocutils.get_pydoc_completions("elpy")
|
|
self.assertIn("elpy.rpc", modules)
|
|
self.assertIn("elpy.server", modules)
|
|
modules = elpy.pydocutils.get_pydoc_completions("os")
|
|
self.assertIn("os.path", modules)
|
|
|
|
def test_should_find_objects_in_module(self):
|
|
self.assertIn("elpy.tests.test_pydocutils.TestGetPydocCompletions",
|
|
elpy.pydocutils.get_pydoc_completions
|
|
("elpy.tests.test_pydocutils"))
|
|
|
|
def test_should_find_attributes_of_objects(self):
|
|
attribs = elpy.pydocutils.get_pydoc_completions(
|
|
"elpy.tests.test_pydocutils.TestGetPydocCompletions")
|
|
self.assertIn("elpy.tests.test_pydocutils.TestGetPydocCompletions."
|
|
"test_should_find_attributes_of_objects",
|
|
attribs)
|
|
|
|
def test_should_return_none_for_inexisting_module(self):
|
|
self.assertEqual([],
|
|
elpy.pydocutils.get_pydoc_completions
|
|
("does_not_exist"))
|
|
|
|
def test_should_work_for_unicode_strings(self):
|
|
self.assertIsNotNone(elpy.pydocutils.get_pydoc_completions
|
|
(u"sys"))
|
|
|
|
def test_should_find_partial_completions(self):
|
|
self.assertIn("multiprocessing",
|
|
elpy.pydocutils.get_pydoc_completions
|
|
("multiprocess"))
|
|
self.assertIn("multiprocessing.util",
|
|
elpy.pydocutils.get_pydoc_completions
|
|
("multiprocessing.ut"))
|
|
|
|
def test_should_ignore_trailing_dot(self):
|
|
self.assertIn("elpy.pydocutils",
|
|
elpy.pydocutils.get_pydoc_completions
|
|
("elpy."))
|
|
|
|
|
|
class TestGetModules(unittest.TestCase):
|
|
def test_should_return_top_level_modules(self):
|
|
modules = elpy.pydocutils.get_modules()
|
|
self.assertIn('sys', modules)
|
|
self.assertIn('json', modules)
|
|
|
|
def test_should_return_submodules(self):
|
|
modules = elpy.pydocutils.get_modules("elpy")
|
|
self.assertIn("rpc", modules)
|
|
self.assertIn("server", modules)
|
|
|
|
@mock.patch.object(elpy.pydocutils, 'safeimport')
|
|
def test_should_catch_import_errors(self, safeimport):
|
|
def raise_function(message):
|
|
raise elpy.pydocutils.ErrorDuringImport(message,
|
|
(None, None, None))
|
|
safeimport.side_effect = raise_function
|
|
self.assertEqual([], elpy.pydocutils.get_modules("foo.bar"))
|
|
|
|
def test_should_not_fail_for_permission_denied(self):
|
|
tmpdir = tempfile.mkdtemp(prefix="test-elpy-get-modules-")
|
|
sys.path.append(tmpdir)
|
|
os.chmod(tmpdir, 0o000)
|
|
try:
|
|
elpy.pydocutils.get_modules()
|
|
finally:
|
|
os.chmod(tmpdir, 0o755)
|
|
shutil.rmtree(tmpdir)
|
|
sys.path.remove(tmpdir)
|