1try:
2    import unittest2 as unittest
3except ImportError:
4    import unittest
5
6from rope.refactor import multiproject, rename, move
7from ropetest import testutils
8
9
10class MultiProjectRefactoringTest(unittest.TestCase):
11
12    def setUp(self):
13        super(MultiProjectRefactoringTest, self).setUp()
14        self.project1 = testutils.sample_project(foldername='testproject1')
15        self.project2 = testutils.sample_project(foldername='testproject2')
16        self.mod1 = self.project1.root.create_file('mod1.py')
17        self.other = self.project1.root.create_file('other.py')
18        self.mod2 = self.project2.root.create_file('mod2.py')
19
20    def tearDown(self):
21        testutils.remove_project(self.project1)
22        testutils.remove_project(self.project2)
23        super(MultiProjectRefactoringTest, self).tearDown()
24
25    def test_trivial_rename(self):
26        self.mod1.write('var = 1\n')
27        refactoring = multiproject.MultiProjectRefactoring(
28            rename.Rename, [])
29        renamer = refactoring(self.project1, self.mod1, 1)
30        multiproject.perform(renamer.get_all_changes('newvar'))
31        self.assertEqual('newvar = 1\n', self.mod1.read())
32
33    def test_rename(self):
34        self.mod1.write('var = 1\n')
35        self.mod2.write('import mod1\nmyvar = mod1.var\n')
36        refactoring = multiproject.MultiProjectRefactoring(
37            rename.Rename, [self.project2])
38        renamer = refactoring(self.project1, self.mod1, 1)
39        multiproject.perform(renamer.get_all_changes('newvar'))
40        self.assertEqual('newvar = 1\n', self.mod1.read())
41        self.assertEqual('import mod1\nmyvar = mod1.newvar\n',
42                          self.mod2.read())
43
44    def test_move(self):
45        self.mod1.write('def a_func():\n    pass\n')
46        self.mod2.write('import mod1\nmyvar = mod1.a_func()\n')
47        refactoring = multiproject.MultiProjectRefactoring(
48            move.create_move, [self.project2])
49        renamer = refactoring(self.project1, self.mod1,
50                              self.mod1.read().index('_func'))
51        multiproject.perform(renamer.get_all_changes(self.other))
52        self.assertEqual('', self.mod1.read())
53        self.assertEqual('def a_func():\n    pass\n', self.other.read())
54        self.assertEqual('import other\nmyvar = other.a_func()\n',
55                          self.mod2.read())
56
57    def test_rename_from_the_project_not_containing_the_change(self):
58        self.project2.get_prefs().add('python_path', self.project1.address)
59        self.mod1.write('var = 1\n')
60        self.mod2.write('import mod1\nmyvar = mod1.var\n')
61        refactoring = multiproject.MultiProjectRefactoring(
62            rename.Rename, [self.project1])
63        renamer = refactoring(self.project2, self.mod2,
64                              self.mod2.read().rindex('var'))
65        multiproject.perform(renamer.get_all_changes('newvar'))
66        self.assertEqual('newvar = 1\n', self.mod1.read())
67        self.assertEqual('import mod1\nmyvar = mod1.newvar\n',
68                          self.mod2.read())
69
70
71if __name__ == '__main__':
72    unittest.main()
73