"""Tests for elpy.ropebackend."""
|
|
|
|
import os
|
|
|
|
import mock
|
|
|
|
from elpy import ropebackend
|
|
from elpy.tests import compat
|
|
from elpy.tests.support import BackendTestCase
|
|
from elpy.tests.support import RPCGetCompletionsTests
|
|
from elpy.tests.support import RPCGetCompletionDocstringTests
|
|
from elpy.tests.support import RPCGetCompletionLocationTests
|
|
from elpy.tests.support import RPCGetDefinitionTests
|
|
from elpy.tests.support import RPCGetCalltipTests
|
|
from elpy.tests.support import RPCGetDocstringTests
|
|
|
|
|
|
class RopeBackendTestCase(BackendTestCase):
|
|
def setUp(self):
|
|
super(RopeBackendTestCase, self).setUp()
|
|
self.backend = ropebackend.RopeBackend(self.project_root)
|
|
|
|
|
|
class ShouldCallValidateTest(object):
|
|
def test_should_call_validate(self):
|
|
with mock.patch.object(self.backend, 'validate') as validate:
|
|
self.rpc(None, "", 0)
|
|
|
|
self.assertTrue(validate.called)
|
|
|
|
|
|
class TestInit(RopeBackendTestCase):
|
|
def test_should_have_rope_as_name(self):
|
|
self.assertEqual(self.backend.name, "rope")
|
|
|
|
def test_should_patch_project_files(self):
|
|
self.project_file("foo.txt", "")
|
|
self.project_file("baddir/file.py", "")
|
|
|
|
self.backend.project.validate()
|
|
|
|
actual = [f.real_path for f in
|
|
self.backend.project.file_list.get_files()]
|
|
self.assertEqual([os.path.join(self.project_root, "foo.txt")],
|
|
actual)
|
|
|
|
|
|
class TestValidate(RopeBackendTestCase):
|
|
def test_should_call_validate_after_timeout(self):
|
|
with mock.patch("time.time") as t:
|
|
t.return_value = 10
|
|
self.backend.validate()
|
|
with mock.patch.object(self.backend, 'project') as project:
|
|
t.return_value = 10 + ropebackend.VALIDATE_EVERY_SECONDS + 1
|
|
self.backend.validate()
|
|
|
|
self.assertTrue(project.validate.called)
|
|
|
|
def test_should_not_call_validate_before_timeout(self):
|
|
with mock.patch("time.time") as t:
|
|
t.return_value = 10
|
|
self.backend.validate()
|
|
with mock.patch.object(self.backend, 'project') as project:
|
|
t.return_value = 10 + ropebackend.VALIDATE_EVERY_SECONDS - 1
|
|
self.backend.validate()
|
|
|
|
self.assertFalse(project.validate.called)
|
|
|
|
|
|
class TestRPCGetCompletions(RPCGetCompletionsTests,
|
|
RopeBackendTestCase):
|
|
pass
|
|
|
|
|
|
class TestRPCGetCompletionDocstring(RPCGetCompletionDocstringTests,
|
|
RopeBackendTestCase):
|
|
pass
|
|
|
|
|
|
class TestRPCGetCompletionLocation(RPCGetCompletionLocationTests,
|
|
RopeBackendTestCase):
|
|
pass
|
|
|
|
|
|
class TestRPCGetDefinition(RPCGetDefinitionTests,
|
|
ShouldCallValidateTest,
|
|
RopeBackendTestCase):
|
|
pass
|
|
|
|
|
|
class TestRPCGetCalltip(RPCGetCalltipTests,
|
|
ShouldCallValidateTest,
|
|
RopeBackendTestCase):
|
|
ADD_CALLTIP = 'Add.add(a, b)'
|
|
RADIX_CALLTIP = "Decimal.radix()"
|
|
if compat.PYTHON3:
|
|
THREAD_CALLTIP = (
|
|
"threading.Thread(group=None, target=None, "
|
|
"name=None, args=(), kwargs=None, daemon=None, *)"
|
|
)
|
|
KEYS_CALLTIP = "builtins.keys()"
|
|
else:
|
|
THREAD_CALLTIP = (
|
|
"threading.Thread(group=None, target=None, "
|
|
"name=None, args=(), kwargs=None, verbose=None)"
|
|
)
|
|
KEYS_CALLTIP = "__builtin__.keys()"
|
|
|
|
|
|
class TestRPCGetDocstring(RPCGetDocstringTests,
|
|
ShouldCallValidateTest,
|
|
RopeBackendTestCase):
|
|
pass
|
|
|
|
|
|
class TestGetPythonProjectFiles(RopeBackendTestCase):
|
|
def test(self):
|
|
self.project_file("foo.txt", "")
|
|
self.project_file("gooddir/__init__.py", "")
|
|
self.project_file("gooddir/file.py", "")
|
|
self.project_file("baddir/file.py", "")
|
|
expected = set(os.path.join(self.project_root, name)
|
|
for name in ["foo.txt", "gooddir/__init__.py",
|
|
"gooddir/file.py"])
|
|
project = self.backend.project
|
|
|
|
actual = set(resource.real_path
|
|
for resource
|
|
in ropebackend.get_python_project_files(project))
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
class TestPatchProjectFiles(RopeBackendTestCase):
|
|
def test(self):
|
|
self.project_file("foo.txt", "")
|
|
self.project_file("gooddir/__init__.py", "")
|
|
self.project_file("gooddir/file.py", "")
|
|
self.project_file("baddir/file.py", "")
|
|
expected = set(os.path.join(self.project_root, name)
|
|
for name in ["foo.txt", "gooddir/__init__.py",
|
|
"gooddir/file.py"])
|
|
|
|
actual = set(resource.real_path
|
|
for resource
|
|
in self.backend.project.get_files())
|
|
self.assertEqual(expected, actual)
|