Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/refactor/restructuretest.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 from rope.refactor import restructure
2 from ropetest import testutils
3
4 import unittest
5
6
7 class RestructureTest(unittest.TestCase):
8
9 def setUp(self):
10 super(RestructureTest, self).setUp()
11 self.project = testutils.sample_project()
12 self.pycore = self.project.pycore
13 self.mod = testutils.create_module(self.project, 'mod')
14
15 def tearDown(self):
16 testutils.remove_project(self.project)
17 super(RestructureTest, self).tearDown()
18
19 def test_trivial_case(self):
20 refactoring = restructure.Restructure(self.project,
21 'a = 1', 'a = 0')
22 self.mod.write('b = 1\n')
23 self.project.do(refactoring.get_changes())
24 self.assertEquals('b = 1\n', self.mod.read())
25
26 def test_replacing_simple_patterns(self):
27 refactoring = restructure.Restructure(self.project,
28 'a = 1', 'a = int(1)')
29 self.mod.write('a = 1\nb = 1\n')
30 self.project.do(refactoring.get_changes())
31 self.assertEquals('a = int(1)\nb = 1\n', self.mod.read())
32
33 def test_replacing_patterns_with_normal_names(self):
34 refactoring = restructure.Restructure(
35 self.project, '${a} = 1', '${a} = int(1)', args={'a': 'exact'})
36 self.mod.write('a = 1\nb = 1\n')
37 self.project.do(refactoring.get_changes())
38 self.assertEquals('a = int(1)\nb = 1\n', self.mod.read())
39
40 def test_replacing_patterns_with_any_names(self):
41 refactoring = restructure.Restructure(self.project,
42 '${a} = 1', '${a} = int(1)')
43 self.mod.write('a = 1\nb = 1\n')
44 self.project.do(refactoring.get_changes())
45 self.assertEquals('a = int(1)\nb = int(1)\n', self.mod.read())
46
47 def test_replacing_patterns_with_any_names2(self):
48 refactoring = restructure.Restructure(
49 self.project, '${x} + ${x}', '${x} * 2')
50 self.mod.write('a = 1 + 1\n')
51 self.project.do(refactoring.get_changes())
52 self.assertEquals('a = 1 * 2\n', self.mod.read())
53
54 def test_replacing_patterns_with_checks(self):
55 self.mod.write('def f(p=1):\n return p\ng = f\ng()\n')
56 refactoring = restructure.Restructure(
57 self.project, '${f}()', '${f}(2)', args={'f': 'object=mod.f'})
58 self.project.do(refactoring.get_changes())
59 self.assertEquals('def f(p=1):\n return p\ng = f\ng(2)\n',
60 self.mod.read())
61
62 def test_replacing_assignments_with_sets(self):
63 refactoring = restructure.Restructure(
64 self.project, '${a} = ${b}', '${a}.set(${b})')
65 self.mod.write('a = 1\nb = 1\n')
66 self.project.do(refactoring.get_changes())
67 self.assertEquals('a.set(1)\nb.set(1)\n', self.mod.read())
68
69 def test_replacing_sets_with_assignments(self):
70 refactoring = restructure.Restructure(
71 self.project, '${a}.set(${b})', '${a} = ${b}')
72 self.mod.write('a.set(1)\nb.set(1)\n')
73 self.project.do(refactoring.get_changes())
74 self.assertEquals('a = 1\nb = 1\n', self.mod.read())
75
76 def test_using_make_checks(self):
77 self.mod.write('def f(p=1):\n return p\ng = f\ng()\n')
78 refactoring = restructure.Restructure(
79 self.project, '${f}()', '${f}(2)', args={'f': 'object=mod.f'})
80 self.project.do(refactoring.get_changes())
81 self.assertEquals('def f(p=1):\n return p\ng = f\ng(2)\n',
82 self.mod.read())
83
84 def test_using_make_checking_builtin_types(self):
85 self.mod.write('a = 1 + 1\n')
86 refactoring = restructure.Restructure(
87 self.project, '${i} + ${i}', '${i} * 2',
88 args={'i': 'type=__builtin__.int'})
89 self.project.do(refactoring.get_changes())
90 self.assertEquals('a = 1 * 2\n', self.mod.read())
91
92 def test_auto_indentation_when_no_indentation(self):
93 self.mod.write('a = 2\n')
94 refactoring = restructure.Restructure(
95 self.project, '${a} = 2', '${a} = 1\n${a} += 1')
96 self.project.do(refactoring.get_changes())
97 self.assertEquals('a = 1\na += 1\n', self.mod.read())
98
99 def test_auto_indentation(self):
100 self.mod.write('def f():\n a = 2\n')
101 refactoring = restructure.Restructure(
102 self.project, '${a} = 2', '${a} = 1\n${a} += 1')
103 self.project.do(refactoring.get_changes())
104 self.assertEquals('def f():\n a = 1\n a += 1\n', self.mod.read())
105
106 def test_auto_indentation_and_not_indenting_blanks(self):
107 self.mod.write('def f():\n a = 2\n')
108 refactoring = restructure.Restructure(
109 self.project, '${a} = 2', '${a} = 1\n\n${a} += 1')
110 self.project.do(refactoring.get_changes())
111 self.assertEquals('def f():\n a = 1\n\n a += 1\n',
112 self.mod.read())
113
114 def test_importing_names(self):
115 self.mod.write('a = 2\n')
116 refactoring = restructure.Restructure(
117 self.project, '${a} = 2', '${a} = myconsts.two',
118 imports=['import myconsts'])
119 self.project.do(refactoring.get_changes())
120 self.assertEquals('import myconsts\na = myconsts.two\n',
121 self.mod.read())
122
123 def test_not_importing_names_when_there_are_no_changes(self):
124 self.mod.write('a = True\n')
125 refactoring = restructure.Restructure(
126 self.project, '${a} = 2', '${a} = myconsts.two',
127 imports=['import myconsts'])
128 self.project.do(refactoring.get_changes())
129 self.assertEquals('a = True\n', self.mod.read())
130
131 def test_handling_containing_matches(self):
132 self.mod.write('a = 1 / 2 / 3\n')
133 refactoring = restructure.Restructure(
134 self.project, '${a} / ${b}', '${a} // ${b}')
135 self.project.do(refactoring.get_changes())
136 self.assertEquals('a = 1 // 2 // 3\n', self.mod.read())
137
138 def test_handling_overlapping_matches(self):
139 self.mod.write('a = 1\na = 1\na = 1\n')
140 refactoring = restructure.Restructure(
141 self.project, 'a = 1\na = 1\n', 'b = 1')
142 self.project.do(refactoring.get_changes())
143 self.assertEquals('b = 1\na = 1\n', self.mod.read())
144
145 def test_preventing_stack_overflow_when_matching(self):
146 self.mod.write('1\n')
147 refactoring = restructure.Restructure(self.project, '${a}', '${a}')
148 self.project.do(refactoring.get_changes())
149 self.assertEquals('1\n', self.mod.read())
150
151 def test_performing_a_restructuring_to_all_modules(self):
152 mod2 = testutils.create_module(self.project, 'mod2')
153 self.mod.write('a = 1\n')
154 mod2.write('b = 1\n')
155 refactoring = restructure.Restructure(self.project, '1', '2 / 1')
156 self.project.do(refactoring.get_changes())
157 self.assertEquals('a = 2 / 1\n', self.mod.read())
158 self.assertEquals('b = 2 / 1\n', mod2.read())
159
160 def test_performing_a_restructuring_to_selected_modules(self):
161 mod2 = testutils.create_module(self.project, 'mod2')
162 self.mod.write('a = 1\n')
163 mod2.write('b = 1\n')
164 refactoring = restructure.Restructure(self.project, '1', '2 / 1')
165 self.project.do(refactoring.get_changes(resources=[mod2]))
166 self.assertEquals('a = 1\n', self.mod.read())
167 self.assertEquals('b = 2 / 1\n', mod2.read())
168
169 def test_unsure_argument_of_default_wildcard(self):
170 self.mod.write('def f(p):\n return p * 2\nx = "" * 2\ni = 1 * 2\n')
171 refactoring = restructure.Restructure(
172 self.project, '${s} * 2', 'dup(${s})',
173 args={'s': {'type': '__builtins__.str', 'unsure': True}})
174 self.project.do(refactoring.get_changes())
175 self.assertEquals('def f(p):\n return dup(p)\nx = dup("")\n'
176 'i = 1 * 2\n', self.mod.read())
177
178 def test_statement_after_string_and_column(self):
179 mod_text = 'def f(x):\n if a == "a": raise Exception("test")\n'
180 self.mod.write(mod_text)
181 refactoring = restructure.Restructure(self.project, '${a}', '${a}')
182 self.project.do(refactoring.get_changes())
183 self.assertEquals(mod_text, self.mod.read())
184
185
186 if __name__ == '__main__':
187 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698