OLD | NEW |
(Empty) | |
| 1 try: |
| 2 import unittest2 as unittest |
| 3 except ImportError: |
| 4 import unittest |
| 5 |
| 6 from rope.base import exceptions |
| 7 from rope.contrib.findit import (find_occurrences, find_implementations, |
| 8 find_definition) |
| 9 from ropetest import testutils |
| 10 |
| 11 |
| 12 class FindItTest(unittest.TestCase): |
| 13 |
| 14 def setUp(self): |
| 15 super(FindItTest, self).setUp() |
| 16 self.project = testutils.sample_project() |
| 17 |
| 18 def tearDown(self): |
| 19 testutils.remove_project(self.project) |
| 20 super(FindItTest, self).tearDown() |
| 21 |
| 22 def test_finding_occurrences(self): |
| 23 mod = testutils.create_module(self.project, 'mod') |
| 24 mod.write('a_var = 1\n') |
| 25 result = find_occurrences(self.project, mod, 1) |
| 26 self.assertEquals(mod, result[0].resource) |
| 27 self.assertEquals(0, result[0].offset) |
| 28 self.assertEquals(False, result[0].unsure) |
| 29 |
| 30 def test_finding_occurrences_in_more_than_one_module(self): |
| 31 mod1 = testutils.create_module(self.project, 'mod1') |
| 32 mod2 = testutils.create_module(self.project, 'mod2') |
| 33 mod1.write('a_var = 1\n') |
| 34 mod2.write('import mod1\nmy_var = mod1.a_var') |
| 35 result = find_occurrences(self.project, mod1, 1) |
| 36 self.assertEquals(2, len(result)) |
| 37 modules = (result[0].resource, result[1].resource) |
| 38 self.assertTrue(mod1 in modules and mod2 in modules) |
| 39 |
| 40 def test_finding_occurrences_matching_when_unsure(self): |
| 41 mod1 = testutils.create_module(self.project, 'mod1') |
| 42 mod1.write('class C(object):\n def a_func(self):\n pass\n' |
| 43 'def f(arg):\n arg.a_func()\n') |
| 44 result = find_occurrences( |
| 45 self.project, mod1, mod1.read().index('a_func'), unsure=True) |
| 46 self.assertEquals(2, len(result)) |
| 47 |
| 48 def test_find_occurrences_resources_parameter(self): |
| 49 mod1 = testutils.create_module(self.project, 'mod1') |
| 50 mod2 = testutils.create_module(self.project, 'mod2') |
| 51 mod1.write('a_var = 1\n') |
| 52 mod2.write('import mod1\nmy_var = mod1.a_var') |
| 53 result = find_occurrences(self.project, mod1, 1, resources=[mod1]) |
| 54 self.assertEquals(1, len(result)) |
| 55 self.assertEquals((mod1, 0), (result[0].resource, result[0].offset)) |
| 56 |
| 57 def test_find_occurrences_and_class_hierarchies(self): |
| 58 mod1 = testutils.create_module(self.project, 'mod1') |
| 59 mod1.write('class A(object):\n def f():\n pass\n' |
| 60 'class B(A):\n def f():\n pass\n') |
| 61 offset = mod1.read().rindex('f') |
| 62 result1 = find_occurrences(self.project, mod1, offset) |
| 63 result2 = find_occurrences(self.project, mod1, |
| 64 offset, in_hierarchy=True) |
| 65 self.assertEquals(1, len(result1)) |
| 66 self.assertEquals(2, len(result2)) |
| 67 |
| 68 def test_trivial_find_implementations(self): |
| 69 mod1 = testutils.create_module(self.project, 'mod1') |
| 70 mod1.write('class A(object):\n def f(self):\n pass\n') |
| 71 offset = mod1.read().rindex('f(') |
| 72 result = find_implementations(self.project, mod1, offset) |
| 73 self.assertEquals([], result) |
| 74 |
| 75 def test_find_implementations_and_not_returning_parents(self): |
| 76 mod1 = testutils.create_module(self.project, 'mod1') |
| 77 mod1.write('class A(object):\n def f(self):\n pass\n' |
| 78 'class B(A):\n def f(self):\n pass\n') |
| 79 offset = mod1.read().rindex('f(') |
| 80 result = find_implementations(self.project, mod1, offset) |
| 81 self.assertEquals([], result) |
| 82 |
| 83 def test_find_implementations_real_implementation(self): |
| 84 mod1 = testutils.create_module(self.project, 'mod1') |
| 85 mod1.write('class A(object):\n def f(self):\n pass\n' |
| 86 'class B(A):\n def f(self):\n pass\n') |
| 87 offset = mod1.read().index('f(') |
| 88 result = find_implementations(self.project, mod1, offset) |
| 89 self.assertEquals(1, len(result)) |
| 90 self.assertEquals(mod1.read().rindex('f('), result[0].offset) |
| 91 |
| 92 def test_find_implementations_real_implementation_simple(self): |
| 93 mod1 = testutils.create_module(self.project, 'mod1') |
| 94 mod1.write('class A(object):\n pass\n') |
| 95 offset = mod1.read().index('A') |
| 96 with self.assertRaises(exceptions.BadIdentifierError): |
| 97 find_implementations(self.project, mod1, offset) |
| 98 |
| 99 def test_trivial_find_definition(self): |
| 100 code = 'def a_func():\n pass\na_func()' |
| 101 result = find_definition(self.project, code, code.rindex('a_func')) |
| 102 start = code.index('a_func') |
| 103 self.assertEquals(start, result.offset) |
| 104 self.assertEquals(None, result.resource) |
| 105 self.assertEquals(1, result.lineno) |
| 106 self.assertEquals((start, start + len('a_func')), result.region) |
| 107 |
| 108 def test_find_definition_in_other_modules(self): |
| 109 mod1 = testutils.create_module(self.project, 'mod1') |
| 110 mod1.write('var = 1\n') |
| 111 code = 'import mod1\nprint(mod1.var)\n' |
| 112 result = find_definition(self.project, code, code.index('var')) |
| 113 self.assertEquals(mod1, result.resource) |
| 114 self.assertEquals(0, result.offset) |
| 115 |
| 116 |
| 117 def suite(): |
| 118 result = unittest.TestSuite() |
| 119 result.addTests(unittest.makeSuite(FindItTest)) |
| 120 return result |
| 121 |
| 122 if __name__ == '__main__': |
| 123 unittest.main() |
OLD | NEW |