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

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/projecttest.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 import os
2 import os.path
3 import shutil
4 try:
5 import unittest2 as unittest
6 except ImportError:
7 import unittest
8
9 from rope.base.exceptions import RopeError, ResourceNotFoundError
10 from rope.base.fscommands import FileSystemCommands
11 from rope.base.libutils import path_to_resource
12 from rope.base.project import Project, NoProject, _realpath
13 from ropetest import testutils
14 from rope.base.resourceobserver import FilteredResourceObserver
15
16
17 class ProjectTest(unittest.TestCase):
18
19 def setUp(self):
20 unittest.TestCase.setUp(self)
21 self.project = testutils.sample_project(foldername='sampleproject',
22 ropefolder=None)
23 self.project_root = self.project.address
24 self._make_sample_project()
25 self.no_project = NoProject()
26
27 def _make_sample_project(self):
28 self.sample_file = 'sample_file.txt'
29 self.sample_path = os.path.join(self.project_root, 'sample_file.txt')
30 if not os.path.exists(self.project_root):
31 os.mkdir(self.project_root)
32 self.sample_folder = 'sample_folder'
33 os.mkdir(os.path.join(self.project_root, self.sample_folder))
34 sample = open(self.sample_path, 'w')
35 sample.write('sample text\n')
36 sample.close()
37
38 def tearDown(self):
39 testutils.remove_project(self.project)
40 unittest.TestCase.tearDown(self)
41
42 def test_project_creation(self):
43 self.assertEquals(_realpath(self.project_root),
44 self.project.address)
45
46 def test_getting_project_file(self):
47 project_file = self.project.get_resource(self.sample_file)
48 self.assertTrue(project_file is not None)
49
50 def test_project_file_reading(self):
51 projectFile = self.project.get_resource(self.sample_file)
52 self.assertEquals('sample text\n', projectFile.read())
53
54 def test_getting_not_existing_project_file(self):
55 with self.assertRaises(ResourceNotFoundError):
56 self.project.get_resource('DoesNotExistFile.txt')
57
58 def test_writing_in_project_files(self):
59 project_file = self.project.get_resource(self.sample_file)
60 project_file.write('another text\n')
61 self.assertEquals('another text\n', project_file.read())
62
63 def test_creating_files(self):
64 project_file = 'newfile.txt'
65 self.project.root.create_file(project_file)
66 newFile = self.project.get_resource(project_file)
67 self.assertTrue(newFile is not None)
68
69 def test_creating_files_that_already_exist(self):
70 with self.assertRaises(RopeError):
71 self.project.root.create_file(self.sample_file)
72
73 def test_making_root_folder_if_it_does_not_exist(self):
74 project = Project('sampleproject2')
75 try:
76 self.assertTrue(os.path.exists('sampleproject2') and
77 os.path.isdir('sampleproject2'))
78 finally:
79 testutils.remove_project(project)
80
81 def test_failure_when_project_root_exists_and_is_a_file(self):
82 project_root = 'sampleproject2'
83 try:
84 open(project_root, 'w').close()
85 with self.assertRaises(RopeError):
86 Project(project_root)
87 finally:
88 testutils.remove_recursively(project_root)
89
90 def test_creating_folders(self):
91 folderName = 'SampleFolder'
92 self.project.root.create_folder(folderName)
93 folderPath = os.path.join(self.project.address, folderName)
94 self.assertTrue(os.path.exists(folderPath) and
95 os.path.isdir(folderPath))
96
97 def test_making_folder_that_already_exists(self):
98 folderName = 'SampleFolder'
99 with self.assertRaises(RopeError):
100 self.project.root.create_folder(folderName)
101 self.project.root.create_folder(folderName)
102
103 def test_failing_if_creating_folder_while_file_already_exists(self):
104 folderName = 'SampleFolder'
105 with self.assertRaises(RopeError):
106 self.project.root.create_file(folderName)
107 self.project.root.create_folder(folderName)
108
109 def test_creating_file_inside_folder(self):
110 folder_name = 'sampleFolder'
111 file_name = 'sample2.txt'
112 file_path = folder_name + '/' + file_name
113 parent_folder = self.project.root.create_folder(folder_name)
114 parent_folder.create_file(file_name)
115 file = self.project.get_resource(file_path)
116 file.write('sample notes')
117 self.assertEquals(file_path, file.path)
118 self.assertEquals('sample notes',
119 open(os.path.join(self.project.address,
120 file_path)).read())
121
122 def test_failing_when_creating_file_inside_non_existent_folder(self):
123 with self.assertRaises(ResourceNotFoundError):
124 self.project.root.create_file('NonexistentFolder/SomeFile.txt')
125
126 def test_nested_directories(self):
127 folder_name = 'SampleFolder'
128 parent = self.project.root.create_folder(folder_name)
129 parent.create_folder(folder_name)
130 folder_path = os.path.join(self.project.address,
131 folder_name, folder_name)
132 self.assertTrue(os.path.exists(folder_path) and
133 os.path.isdir(folder_path))
134
135 def test_removing_files(self):
136 self.assertTrue(os.path.exists(self.sample_path))
137 self.project.get_resource(self.sample_file).remove()
138 self.assertFalse(os.path.exists(self.sample_path))
139
140 def test_removing_files_invalidating_in_project_resource_pool(self):
141 root_folder = self.project.root
142 my_file = root_folder.create_file('my_file.txt')
143 my_file.remove()
144 self.assertFalse(root_folder.has_child('my_file.txt'))
145
146 def test_removing_directories(self):
147 self.assertTrue(os.path.exists(os.path.join(self.project.address,
148 self.sample_folder)))
149 self.project.get_resource(self.sample_folder).remove()
150 self.assertFalse(os.path.exists(os.path.join(self.project.address,
151 self.sample_folder)))
152
153 def test_removing_non_existent_files(self):
154 with self.assertRaises(ResourceNotFoundError):
155 self.project.get_resource('NonExistentFile.txt').remove()
156
157 def test_removing_nested_files(self):
158 file_name = self.sample_folder + '/sample_file.txt'
159 self.project.root.create_file(file_name)
160 self.project.get_resource(file_name).remove()
161 self.assertTrue(os.path.exists(os.path.join(self.project.address,
162 self.sample_folder)))
163 self.assertTrue(not os.path.exists(os.path.join(self.project.address,
164 file_name)))
165
166 def test_file_get_name(self):
167 file = self.project.get_resource(self.sample_file)
168 self.assertEquals(self.sample_file, file.name)
169 file_name = 'nestedFile.txt'
170 parent = self.project.get_resource(self.sample_folder)
171 filePath = self.sample_folder + '/' + file_name
172 parent.create_file(file_name)
173 nestedFile = self.project.get_resource(filePath)
174 self.assertEquals(file_name, nestedFile.name)
175
176 def test_folder_get_name(self):
177 folder = self.project.get_resource(self.sample_folder)
178 self.assertEquals(self.sample_folder, folder.name)
179
180 def test_file_get_path(self):
181 file = self.project.get_resource(self.sample_file)
182 self.assertEquals(self.sample_file, file.path)
183 fileName = 'nestedFile.txt'
184 parent = self.project.get_resource(self.sample_folder)
185 filePath = self.sample_folder + '/' + fileName
186 parent.create_file(fileName)
187 nestedFile = self.project.get_resource(filePath)
188 self.assertEquals(filePath, nestedFile.path)
189
190 def test_folder_get_path(self):
191 folder = self.project.get_resource(self.sample_folder)
192 self.assertEquals(self.sample_folder, folder.path)
193
194 def test_is_folder(self):
195 self.assertTrue(self.project.get_resource(
196 self.sample_folder).is_folder())
197 self.assertTrue(not self.project.get_resource(
198 self.sample_file).is_folder())
199
200 def testget_children(self):
201 children = self.project.get_resource(self.sample_folder).get_children()
202 self.assertEquals([], children)
203
204 def test_nonempty_get_children(self):
205 file_name = 'nestedfile.txt'
206 filePath = self.sample_folder + '/' + file_name
207 parent = self.project.get_resource(self.sample_folder)
208 parent.create_file(file_name)
209 children = parent.get_children()
210 self.assertEquals(1, len(children))
211 self.assertEquals(filePath, children[0].path)
212
213 def test_nonempty_get_children2(self):
214 file_name = 'nestedfile.txt'
215 folder_name = 'nestedfolder.txt'
216 filePath = self.sample_folder + '/' + file_name
217 folderPath = self.sample_folder + '/' + folder_name
218 parent = self.project.get_resource(self.sample_folder)
219 parent.create_file(file_name)
220 parent.create_folder(folder_name)
221 children = parent.get_children()
222 self.assertEquals(2, len(children))
223 self.assertTrue(filePath == children[0].path or
224 filePath == children[1].path)
225 self.assertTrue(folderPath == children[0].path or
226 folderPath == children[1].path)
227
228 def test_does_not_fail_for_permission_denied(self):
229 bad_dir = os.path.join(self.sample_folder, "bad_dir")
230 os.makedirs(bad_dir)
231 self.addCleanup(shutil.rmtree, bad_dir)
232 os.chmod(bad_dir, 0o000)
233 try:
234 parent = self.project.get_resource(self.sample_folder)
235
236 parent.get_children()
237
238 finally:
239 os.chmod(bad_dir, 0o755)
240
241 def test_getting_files(self):
242 files = self.project.root.get_files()
243 self.assertEquals(1, len(files))
244 self.assertTrue(self.project.get_resource(self.sample_file) in files)
245
246 def test_getting_folders(self):
247 folders = self.project.root.get_folders()
248 self.assertEquals(1, len(folders))
249 self.assertTrue(self.project.get_resource(
250 self.sample_folder) in folders)
251
252 def test_nested_folder_get_files(self):
253 parent = self.project.root.create_folder('top')
254 parent.create_file('file1.txt')
255 parent.create_file('file2.txt')
256 files = parent.get_files()
257 self.assertEquals(2, len(files))
258 self.assertTrue(self.project.get_resource('top/file2.txt') in files)
259 self.assertEquals(0, len(parent.get_folders()))
260
261 def test_nested_folder_get_folders(self):
262 parent = self.project.root.create_folder('top')
263 parent.create_folder('dir1')
264 parent.create_folder('dir2')
265 folders = parent.get_folders()
266 self.assertEquals(2, len(folders))
267 self.assertTrue(self.project.get_resource('top/dir1') in folders)
268 self.assertEquals(0, len(parent.get_files()))
269
270 def test_root_folder(self):
271 root_folder = self.project.root
272 self.assertEquals(2, len(root_folder.get_children()))
273 self.assertEquals('', root_folder.path)
274 self.assertEquals('', root_folder.name)
275
276 def test_get_all_files(self):
277 files = tuple(self.project.get_files())
278 self.assertEquals(1, len(files))
279 self.assertEquals(self.sample_file, files[0].name)
280
281 def test_get_all_files_after_changing(self):
282 self.assertEquals(1, len(self.project.get_files()))
283 myfile = self.project.root.create_file('myfile.txt')
284 self.assertEquals(2, len(self.project.get_files()))
285 myfile.move('newfile.txt')
286 self.assertEquals(2, len(self.project.get_files()))
287 self.project.get_file('newfile.txt').remove()
288 self.assertEquals(1, len(self.project.get_files()))
289
290 def test_multifile_get_all_files(self):
291 fileName = 'nestedFile.txt'
292 parent = self.project.get_resource(self.sample_folder)
293 parent.create_file(fileName)
294 files = list(self.project.get_files())
295 self.assertEquals(2, len(files))
296 self.assertTrue(fileName == files[0].name or fileName == files[1].name)
297
298 def test_ignoring_dot_pyc_files_in_get_files(self):
299 root = self.project.address
300 src_folder = os.path.join(root, 'src')
301 os.mkdir(src_folder)
302 test_pyc = os.path.join(src_folder, 'test.pyc')
303 open(test_pyc, 'w').close()
304 for x in self.project.get_files():
305 self.assertNotEquals('src/test.pyc', x.path)
306
307 def test_folder_creating_files(self):
308 projectFile = 'NewFile.txt'
309 self.project.root.create_file(projectFile)
310 new_file = self.project.get_resource(projectFile)
311 self.assertTrue(new_file is not None and not new_file.is_folder())
312
313 def test_folder_creating_nested_files(self):
314 project_file = 'NewFile.txt'
315 parent_folder = self.project.get_resource(self.sample_folder)
316 parent_folder.create_file(project_file)
317 new_file = self.project.get_resource(self.sample_folder
318 + '/' + project_file)
319 self.assertTrue(new_file is not None and not new_file.is_folder())
320
321 def test_folder_creating_files2(self):
322 projectFile = 'newfolder'
323 self.project.root.create_folder(projectFile)
324 new_folder = self.project.get_resource(projectFile)
325 self.assertTrue(new_folder is not None and new_folder.is_folder())
326
327 def test_folder_creating_nested_files2(self):
328 project_file = 'newfolder'
329 parent_folder = self.project.get_resource(self.sample_folder)
330 parent_folder.create_folder(project_file)
331 new_folder = self.project.get_resource(self.sample_folder
332 + '/' + project_file)
333 self.assertTrue(new_folder is not None and new_folder.is_folder())
334
335 def test_folder_get_child(self):
336 folder = self.project.root
337 folder.create_file('myfile.txt')
338 folder.create_folder('myfolder')
339 self.assertEquals(self.project.get_resource('myfile.txt'),
340 folder.get_child('myfile.txt'))
341 self.assertEquals(self.project.get_resource('myfolder'),
342 folder.get_child('myfolder'))
343
344 def test_folder_get_child_nested(self):
345 root = self.project.root
346 folder = root.create_folder('myfolder')
347 folder.create_file('myfile.txt')
348 folder.create_folder('myfolder')
349 self.assertEquals(self.project.get_resource('myfolder/myfile.txt'),
350 folder.get_child('myfile.txt'))
351 self.assertEquals(self.project.get_resource('myfolder/myfolder'),
352 folder.get_child('myfolder'))
353
354 def test_project_root_is_root_folder(self):
355 self.assertEquals('', self.project.root.path)
356
357 def test_moving_files(self):
358 root_folder = self.project.root
359 my_file = root_folder.create_file('my_file.txt')
360 my_file.move('my_other_file.txt')
361 self.assertFalse(my_file.exists())
362 root_folder.get_child('my_other_file.txt')
363
364 def test_moving_folders(self):
365 root_folder = self.project.root
366 my_folder = root_folder.create_folder('my_folder')
367 my_file = my_folder.create_file('my_file.txt')
368 my_folder.move('new_folder')
369 self.assertFalse(root_folder.has_child('my_folder'))
370 self.assertFalse(my_file.exists())
371 self.assertTrue(root_folder.get_child('new_folder') is not None)
372
373 def test_moving_destination_folders(self):
374 root_folder = self.project.root
375 my_folder = root_folder.create_folder('my_folder')
376 my_file = root_folder.create_file('my_file.txt')
377 my_file.move('my_folder')
378 self.assertFalse(root_folder.has_child('my_file.txt'))
379 self.assertFalse(my_file.exists())
380 my_folder.get_child('my_file.txt')
381
382 def test_moving_files_and_resource_objects(self):
383 root_folder = self.project.root
384 my_file = root_folder.create_file('my_file.txt')
385 old_hash = hash(my_file)
386 my_file.move('my_other_file.txt')
387 self.assertEquals(old_hash, hash(my_file))
388
389 def test_file_encoding_reading(self):
390 sample_file = self.project.root.create_file('my_file.txt')
391 contents = u'# -*- coding: utf-8 -*-\n' \
392 '#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
393 file = open(sample_file.real_path, 'w')
394 file.write(contents.encode('utf-8'))
395 file.close()
396 self.assertEquals(contents, sample_file.read())
397
398 def test_file_encoding_writing(self):
399 sample_file = self.project.root.create_file('my_file.txt')
400 contents = u'# -*- coding: utf-8 -*-\n' \
401 '\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
402 sample_file.write(contents)
403 self.assertEquals(contents, sample_file.read())
404
405 def test_using_utf8_when_writing_in_case_of_errors(self):
406 sample_file = self.project.root.create_file('my_file.txt')
407 contents = u'\n\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
408 sample_file.write(contents)
409 self.assertEquals(contents, sample_file.read())
410
411 def test_encoding_declaration_in_the_second_line(self):
412 sample_file = self.project.root.create_file('my_file.txt')
413 contents = '\n# -*- coding: latin-1 -*-\n\xa9\n'
414 file = open(sample_file.real_path, 'wb')
415 file.write(contents)
416 file.close()
417 self.assertEquals(contents, sample_file.read().encode('latin-1'))
418
419 def test_read_bytes(self):
420 sample_file = self.project.root.create_file('my_file.txt')
421 contents = '\n# -*- coding: latin-1 -*-\n\xa9\n'
422 file = open(sample_file.real_path, 'wb')
423 file.write(contents)
424 file.close()
425 self.assertEquals(contents, sample_file.read_bytes())
426
427 # TODO: Detecting utf-16 encoding
428 def xxx_test_using_utf16(self):
429 sample_file = self.project.root.create_file('my_file.txt')
430 contents = '# -*- coding: utf-16 -*-\n# This is a sample file ...\n'
431 file = open(sample_file.real_path, 'w')
432 file.write(contents.encode('utf-16'))
433 file.close()
434 sample_file.write(contents)
435 self.assertEquals(contents, sample_file.read())
436
437 # XXX: supporting utf_8_sig
438 def xxx_test_file_encoding_reading_for_notepad_styles(self):
439 sample_file = self.project.root.create_file('my_file.txt')
440 contents = u'#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
441 file = open(sample_file.real_path, 'w')
442 # file.write('\xef\xbb\xbf')
443 file.write(contents.encode('utf-8-sig'))
444 file.close()
445 self.assertEquals(contents, sample_file.read())
446
447 def test_using_project_get_file(self):
448 myfile = self.project.get_file(self.sample_file)
449 self.assertTrue(myfile.exists())
450
451 def test_using_file_create(self):
452 myfile = self.project.get_file('myfile.txt')
453 self.assertFalse(myfile.exists())
454 myfile.create()
455 self.assertTrue(myfile.exists())
456 self.assertFalse(myfile.is_folder())
457
458 def test_using_folder_create(self):
459 myfolder = self.project.get_folder('myfolder')
460 self.assertFalse(myfolder.exists())
461 myfolder.create()
462 self.assertTrue(myfolder.exists())
463 self.assertTrue(myfolder.is_folder())
464
465 def test_exception_when_creating_twice(self):
466 with self.assertRaises(RopeError):
467 myfile = self.project.get_file('myfile.txt')
468 myfile.create()
469 myfile.create()
470
471 def test_exception_when_parent_does_not_exist(self):
472 with self.assertRaises(ResourceNotFoundError):
473 myfile = self.project.get_file('myfolder/myfile.txt')
474 myfile.create()
475
476 def test_simple_path_to_resource(self):
477 myfile = self.project.root.create_file('myfile.txt')
478 self.assertEquals(myfile, path_to_resource(self.project,
479 myfile.real_path))
480 self.assertEquals(myfile, path_to_resource(
481 self.project, myfile.real_path, type='file'))
482 myfolder = self.project.root.create_folder('myfolder')
483 self.assertEquals(myfolder, path_to_resource(self.project,
484 myfolder.real_path))
485 self.assertEquals(myfolder, path_to_resource(
486 self.project, myfolder.real_path, type='folder'))
487
488 @testutils.run_only_for_unix
489 def test_ignoring_symlinks_inside_project(self):
490 project2 = testutils.sample_project(folder_name='sampleproject2')
491 mod = project2.root.create_file('mod.py')
492 try:
493 path = os.path.join(self.project.address, 'linkedfile.txt')
494 os.symlink(mod.real_path, path)
495 files = self.project.root.get_files()
496 self.assertEquals(1, len(files))
497 finally:
498 testutils.remove_project(project2)
499
500 def test_getting_empty_source_folders(self):
501 self.assertEquals([], self.project.get_source_folders())
502
503 def test_root_source_folder(self):
504 self.project.root.create_file('sample.py')
505 source_folders = self.project.get_source_folders()
506 self.assertEquals(1, len(source_folders))
507 self.assertTrue(self.project.root in source_folders)
508
509 def test_root_source_folder2(self):
510 self.project.root.create_file('mod1.py')
511 self.project.root.create_file('mod2.py')
512 source_folders = self.project.get_source_folders()
513 self.assertEquals(1, len(source_folders))
514 self.assertTrue(self.project.root in source_folders)
515
516 def test_src_source_folder(self):
517 src = self.project.root.create_folder('src')
518 src.create_file('sample.py')
519 source_folders = self.project.get_source_folders()
520 self.assertEquals(1, len(source_folders))
521 self.assertTrue(self.project.get_resource('src') in source_folders)
522
523 def test_packages(self):
524 src = self.project.root.create_folder('src')
525 pkg = src.create_folder('package')
526 pkg.create_file('__init__.py')
527 source_folders = self.project.get_source_folders()
528 self.assertEquals(1, len(source_folders))
529 self.assertTrue(src in source_folders)
530
531 def test_multi_source_folders(self):
532 src = self.project.root.create_folder('src')
533 package = src.create_folder('package')
534 package.create_file('__init__.py')
535 test = self.project.root.create_folder('test')
536 test.create_file('alltests.py')
537 source_folders = self.project.get_source_folders()
538 self.assertEquals(2, len(source_folders))
539 self.assertTrue(src in source_folders)
540 self.assertTrue(test in source_folders)
541
542 def test_multi_source_folders2(self):
543 testutils.create_module(self.project, 'mod1')
544 src = self.project.root.create_folder('src')
545 package = testutils.create_package(self.project, 'package', src)
546 testutils.create_module(self.project, 'mod2', package)
547 source_folders = self.project.get_source_folders()
548 self.assertEquals(2, len(source_folders))
549 self.assertTrue(self.project.root in source_folders and
550 src in source_folders)
551
552
553 class ResourceObserverTest(unittest.TestCase):
554
555 def setUp(self):
556 super(ResourceObserverTest, self).setUp()
557 self.project = testutils.sample_project()
558
559 def tearDown(self):
560 testutils.remove_project(self.project)
561 super(ResourceObserverTest, self).tearDown()
562
563 def test_resource_change_observer(self):
564 sample_file = self.project.root.create_file('my_file.txt')
565 sample_file.write('a sample file version 1')
566 sample_observer = _SampleObserver()
567 self.project.add_observer(sample_observer)
568 sample_file.write('a sample file version 2')
569 self.assertEquals(1, sample_observer.change_count)
570 self.assertEquals(sample_file, sample_observer.last_changed)
571
572 def test_resource_change_observer_after_removal(self):
573 sample_file = self.project.root.create_file('my_file.txt')
574 sample_file.write('text')
575 sample_observer = _SampleObserver()
576 self.project.add_observer(FilteredResourceObserver(sample_observer,
577 [sample_file]))
578 sample_file.remove()
579 self.assertEquals(1, sample_observer.change_count)
580 self.assertEquals(sample_file, sample_observer.last_removed)
581
582 def test_resource_change_observer2(self):
583 sample_file = self.project.root.create_file('my_file.txt')
584 sample_observer = _SampleObserver()
585 self.project.add_observer(sample_observer)
586 self.project.remove_observer(sample_observer)
587 sample_file.write('a sample file version 2')
588 self.assertEquals(0, sample_observer.change_count)
589
590 def test_resource_change_observer_for_folders(self):
591 root_folder = self.project.root
592 my_folder = root_folder.create_folder('my_folder')
593 my_folder_observer = _SampleObserver()
594 root_folder_observer = _SampleObserver()
595 self.project.add_observer(
596 FilteredResourceObserver(my_folder_observer, [my_folder]))
597 self.project.add_observer(
598 FilteredResourceObserver(root_folder_observer, [root_folder]))
599 my_file = my_folder.create_file('my_file.txt')
600 self.assertEquals(1, my_folder_observer.change_count)
601 my_file.move('another_file.txt')
602 self.assertEquals(2, my_folder_observer.change_count)
603 self.assertEquals(1, root_folder_observer.change_count)
604 self.project.get_resource('another_file.txt').remove()
605 self.assertEquals(2, my_folder_observer.change_count)
606 self.assertEquals(2, root_folder_observer.change_count)
607
608 def test_resource_change_observer_after_moving(self):
609 sample_file = self.project.root.create_file('my_file.txt')
610 sample_observer = _SampleObserver()
611 self.project.add_observer(sample_observer)
612 sample_file.move('new_file.txt')
613 self.assertEquals(1, sample_observer.change_count)
614 self.assertEquals((sample_file,
615 self.project.get_resource('new_file.txt')),
616 sample_observer.last_moved)
617
618 def test_revalidating_files(self):
619 root = self.project.root
620 my_file = root.create_file('my_file.txt')
621 sample_observer = _SampleObserver()
622 self.project.add_observer(FilteredResourceObserver(sample_observer,
623 [my_file]))
624 os.remove(my_file.real_path)
625 self.project.validate(root)
626 self.assertEquals(my_file, sample_observer.last_removed)
627 self.assertEquals(1, sample_observer.change_count)
628
629 def test_revalidating_files_and_no_changes2(self):
630 root = self.project.root
631 my_file = root.create_file('my_file.txt')
632 sample_observer = _SampleObserver()
633 self.project.add_observer(FilteredResourceObserver(sample_observer,
634 [my_file]))
635 self.project.validate(root)
636 self.assertEquals(None, sample_observer.last_moved)
637 self.assertEquals(0, sample_observer.change_count)
638
639 def test_revalidating_folders(self):
640 root = self.project.root
641 my_folder = root.create_folder('myfolder')
642 my_file = my_folder.create_file('myfile.txt') # noqa
643 sample_observer = _SampleObserver()
644 self.project.add_observer(FilteredResourceObserver(sample_observer,
645 [my_folder]))
646 testutils.remove_recursively(my_folder.real_path)
647 self.project.validate(root)
648 self.assertEquals(my_folder, sample_observer.last_removed)
649 self.assertEquals(1, sample_observer.change_count)
650
651 def test_removing_and_adding_resources_to_filtered_observer(self):
652 my_file = self.project.root.create_file('my_file.txt')
653 sample_observer = _SampleObserver()
654 filtered_observer = FilteredResourceObserver(sample_observer)
655 self.project.add_observer(filtered_observer)
656 my_file.write('1')
657 self.assertEquals(0, sample_observer.change_count)
658 filtered_observer.add_resource(my_file)
659 my_file.write('2')
660 self.assertEquals(1, sample_observer.change_count)
661 filtered_observer.remove_resource(my_file)
662 my_file.write('3')
663 self.assertEquals(1, sample_observer.change_count)
664
665 def test_validation_and_changing_files(self):
666 my_file = self.project.root.create_file('my_file.txt')
667 sample_observer = _SampleObserver()
668 timekeeper = _MockChangeIndicator()
669 filtered_observer = FilteredResourceObserver(
670 sample_observer, [my_file], timekeeper=timekeeper)
671 self.project.add_observer(filtered_observer)
672 self._write_file(my_file.real_path)
673 timekeeper.set_indicator(my_file, 1)
674 self.project.validate(self.project.root)
675 self.assertEquals(1, sample_observer.change_count)
676
677 def test_validation_and_changing_files2(self):
678 my_file = self.project.root.create_file('my_file.txt')
679 sample_observer = _SampleObserver()
680 timekeeper = _MockChangeIndicator()
681 self.project.add_observer(FilteredResourceObserver(
682 sample_observer, [my_file],
683 timekeeper=timekeeper))
684 timekeeper.set_indicator(my_file, 1)
685 my_file.write('hey')
686 self.assertEquals(1, sample_observer.change_count)
687 self.project.validate(self.project.root)
688 self.assertEquals(1, sample_observer.change_count)
689
690 def test_not_reporting_multiple_changes_to_folders(self):
691 root = self.project.root
692 file1 = root.create_file('file1.txt')
693 file2 = root.create_file('file2.txt')
694 sample_observer = _SampleObserver()
695 self.project.add_observer(FilteredResourceObserver(
696 sample_observer, [root, file1, file2]))
697 os.remove(file1.real_path)
698 os.remove(file2.real_path)
699 self.assertEquals(0, sample_observer.change_count)
700 self.project.validate(self.project.root)
701 self.assertEquals(3, sample_observer.change_count)
702
703 def _write_file(self, path):
704 my_file = open(path, 'w')
705 my_file.write('\n')
706 my_file.close()
707
708 def test_moving_and_being_interested_about_a_folder_and_a_child(self):
709 my_folder = self.project.root.create_folder('my_folder')
710 my_file = my_folder.create_file('my_file.txt')
711 sample_observer = _SampleObserver()
712 filtered_observer = FilteredResourceObserver(
713 sample_observer, [my_folder, my_file])
714 self.project.add_observer(filtered_observer)
715 my_folder.move('new_folder')
716 self.assertEquals(2, sample_observer.change_count)
717
718 def test_contains_for_folders(self):
719 folder1 = self.project.root.create_folder('folder')
720 folder2 = self.project.root.create_folder('folder2')
721 self.assertFalse(folder1.contains(folder2))
722
723 def test_validating_when_created(self):
724 root = self.project.root
725 my_file = self.project.get_file('my_file.txt')
726 sample_observer = _SampleObserver()
727 self.project.add_observer(FilteredResourceObserver(sample_observer,
728 [my_file]))
729 open(my_file.real_path, 'w').close()
730 self.project.validate(root)
731 self.assertEquals(my_file, sample_observer.last_created)
732 self.assertEquals(1, sample_observer.change_count)
733
734 def test_validating_twice_when_created(self):
735 root = self.project.root
736 my_file = self.project.get_file('my_file.txt')
737 sample_observer = _SampleObserver()
738 self.project.add_observer(FilteredResourceObserver(sample_observer,
739 [my_file]))
740 open(my_file.real_path, 'w').close()
741 self.project.validate(root)
742 self.project.validate(root)
743 self.assertEquals(my_file, sample_observer.last_created)
744 self.assertEquals(1, sample_observer.change_count)
745
746 def test_changes_and_adding_resources(self):
747 root = self.project.root # noqa
748 file1 = self.project.get_file('file1.txt')
749 file2 = self.project.get_file('file2.txt')
750 file1.create()
751 sample_observer = _SampleObserver()
752 self.project.add_observer(FilteredResourceObserver(sample_observer,
753 [file1, file2]))
754 file1.move(file2.path)
755 self.assertEquals(2, sample_observer.change_count)
756 self.assertEquals(file2, sample_observer.last_created)
757 self.assertEquals((file1, file2), sample_observer.last_moved)
758
759 def test_validating_get_files_list(self):
760 root = self.project.root # noqa
761 self.assertEquals(0, len(self.project.get_files()))
762 file = open(os.path.join(self.project.address, 'myfile.txt'), 'w')
763 file.close()
764 self.project.validate()
765 self.assertEquals(1, len(self.project.get_files()))
766
767 def test_clear_observered_resources_for_filtered_observers(self):
768 sample_file = self.project.root.create_file('myfile.txt')
769 sample_observer = _SampleObserver()
770 filtered = FilteredResourceObserver(sample_observer)
771 self.project.add_observer(filtered)
772 filtered.add_resource(sample_file)
773 filtered.clear_resources()
774 sample_file.write('1')
775 self.assertEquals(0, sample_observer.change_count)
776
777
778 class _MockChangeIndicator(object):
779
780 def __init__(self):
781 self.times = {}
782
783 def set_indicator(self, resource, time):
784 self.times[resource] = time
785
786 def get_indicator(self, resource):
787 return self.times.get(resource, 0)
788
789
790 class _SampleObserver(object):
791
792 def __init__(self):
793 self.change_count = 0
794 self.last_changed = None
795 self.last_moved = None
796 self.last_created = None
797 self.last_removed = None
798
799 def resource_changed(self, resource):
800 self.last_changed = resource
801 self.change_count += 1
802
803 def resource_moved(self, resource, new_resource):
804 self.last_moved = (resource, new_resource)
805 self.change_count += 1
806
807 def resource_created(self, resource):
808 self.last_created = resource
809 self.change_count += 1
810
811 def resource_removed(self, resource):
812 self.last_removed = resource
813 self.change_count += 1
814
815
816 class OutOfProjectTest(unittest.TestCase):
817
818 def setUp(self):
819 super(OutOfProjectTest, self).setUp()
820 self.test_directory = 'temp_test_directory'
821 testutils.remove_recursively(self.test_directory)
822 os.mkdir(self.test_directory)
823 self.project = testutils.sample_project()
824 self.no_project = NoProject()
825
826 def tearDown(self):
827 testutils.remove_project(self.project)
828 testutils.remove_recursively(self.test_directory)
829 super(OutOfProjectTest, self).tearDown()
830
831 def test_simple_out_of_project_file(self):
832 sample_file_path = os.path.join(self.test_directory, 'sample.txt')
833 sample_file = open(sample_file_path, 'w')
834 sample_file.write('sample content\n')
835 sample_file.close()
836 sample_resource = self.no_project.get_resource(sample_file_path)
837 self.assertEquals('sample content\n', sample_resource.read())
838
839 def test_simple_out_of_project_folder(self):
840 sample_folder_path = os.path.join(self.test_directory, 'sample_folder')
841 os.mkdir(sample_folder_path)
842 sample_folder = self.no_project.get_resource(sample_folder_path)
843 self.assertEquals([], sample_folder.get_children())
844
845 sample_file_path = os.path.join(sample_folder_path, 'sample.txt')
846 open(sample_file_path, 'w').close()
847 sample_resource = self.no_project.get_resource(sample_file_path)
848 self.assertEquals(sample_resource, sample_folder.get_children()[0])
849
850 def test_using_absolute_path(self):
851 sample_file_path = os.path.join(self.test_directory, 'sample.txt')
852 open(sample_file_path, 'w').close()
853 normal_sample_resource = self.no_project.get_resource(sample_file_path)
854 absolute_sample_resource = \
855 self.no_project.get_resource(os.path.abspath(sample_file_path))
856 self.assertEquals(normal_sample_resource, absolute_sample_resource)
857
858 def test_folder_get_child(self):
859 sample_folder_path = os.path.join(self.test_directory, 'sample_folder')
860 os.mkdir(sample_folder_path)
861 sample_folder = self.no_project.get_resource(sample_folder_path)
862 self.assertEquals([], sample_folder.get_children())
863
864 sample_file_path = os.path.join(sample_folder_path, 'sample.txt')
865 open(sample_file_path, 'w').close()
866 sample_resource = self.no_project.get_resource(sample_file_path)
867 self.assertTrue(sample_folder.has_child('sample.txt'))
868 self.assertFalse(sample_folder.has_child('doesnothave.txt'))
869 self.assertEquals(sample_resource,
870 sample_folder.get_child('sample.txt'))
871
872 def test_out_of_project_files_and_path_to_resource(self):
873 sample_file_path = os.path.join(self.test_directory, 'sample.txt')
874 sample_file = open(sample_file_path, 'w')
875 sample_file.write('sample content\n')
876 sample_file.close()
877 sample_resource = self.no_project.get_resource(sample_file_path)
878 self.assertEquals(sample_resource,
879 path_to_resource(self.project, sample_file_path))
880
881
882 class _MockFSCommands(object):
883 def __init__(self):
884 self.log = ''
885 self.fscommands = FileSystemCommands()
886
887 def create_file(self, path):
888 self.log += 'create_file '
889 self.fscommands.create_file(path)
890
891 def create_folder(self, path):
892 self.log += 'create_folder '
893 self.fscommands.create_folder(path)
894
895 def move(self, path, new_location):
896 self.log += 'move '
897 self.fscommands.move(path, new_location)
898
899 def remove(self, path):
900 self.log += 'remove '
901 self.fscommands.remove(path)
902
903
904 class RopeFolderTest(unittest.TestCase):
905
906 def setUp(self):
907 super(RopeFolderTest, self).setUp()
908 self.project = None
909
910 def tearDown(self):
911 if self.project:
912 testutils.remove_project(self.project)
913 super(RopeFolderTest, self).tearDown()
914
915 def test_none_project_rope_folder(self):
916 self.project = testutils.sample_project(ropefolder=None)
917 self.assertTrue(self.project.ropefolder is None)
918
919 def test_getting_project_rope_folder(self):
920 self.project = testutils.sample_project(ropefolder='.ropeproject')
921 self.assertTrue(self.project.ropefolder.exists())
922 self.assertTrue('.ropeproject', self.project.ropefolder.path)
923
924 def test_setting_ignored_resources(self):
925 self.project = testutils.sample_project(
926 ignored_resources=['myfile.txt'])
927 myfile = self.project.get_file('myfile.txt')
928 file2 = self.project.get_file('file2.txt')
929 self.assertTrue(self.project.is_ignored(myfile))
930 self.assertFalse(self.project.is_ignored(file2))
931
932 def test_ignored_folders(self):
933 self.project = testutils.sample_project(ignored_resources=['myfolder'])
934 myfolder = self.project.root.create_folder('myfolder')
935 self.assertTrue(self.project.is_ignored(myfolder))
936 myfile = myfolder.create_file('myfile.txt')
937 self.assertTrue(self.project.is_ignored(myfile))
938
939 def test_ignored_resources_and_get_files(self):
940 self.project = testutils.sample_project(
941 ignored_resources=['myfile.txt'], ropefolder=None)
942 myfile = self.project.get_file('myfile.txt')
943 self.assertEquals(0, len(self.project.get_files()))
944 myfile.create()
945 self.assertEquals(0, len(self.project.get_files()))
946
947 def test_ignored_resources_and_get_files2(self):
948 self.project = testutils.sample_project(
949 ignored_resources=['myfile.txt'], ropefolder=None)
950 myfile = self.project.root.create_file('myfile.txt') # noqa
951 self.assertEquals(0, len(self.project.get_files()))
952
953 def test_setting_ignored_resources_patterns(self):
954 self.project = testutils.sample_project(ignored_resources=['m?file.*'])
955 myfile = self.project.get_file('myfile.txt')
956 file2 = self.project.get_file('file2.txt')
957 self.assertTrue(self.project.is_ignored(myfile))
958 self.assertFalse(self.project.is_ignored(file2))
959
960 def test_star_should_not_include_slashes(self):
961 self.project = testutils.sample_project(ignored_resources=['f*.txt'])
962 folder = self.project.root.create_folder('folder')
963 file1 = folder.create_file('myfile.txt')
964 file2 = folder.create_file('file2.txt')
965 self.assertFalse(self.project.is_ignored(file1))
966 self.assertTrue(self.project.is_ignored(file2))
967
968 def test_normal_fscommands(self):
969 fscommands = _MockFSCommands()
970 self.project = testutils.sample_project(fscommands=fscommands)
971 myfile = self.project.get_file('myfile.txt')
972 myfile.create()
973 self.assertTrue('create_file ', fscommands.log)
974
975 def test_fscommands_and_ignored_resources(self):
976 fscommands = _MockFSCommands()
977 self.project = testutils.sample_project(
978 fscommands=fscommands,
979 ignored_resources=['myfile.txt'], ropefolder=None)
980 myfile = self.project.get_file('myfile.txt')
981 myfile.create()
982 self.assertEquals('', fscommands.log)
983
984 def test_ignored_resources_and_prefixes(self):
985 self.project = testutils.sample_project(
986 ignored_resources=['.hg'])
987 myfile = self.project.root.create_file('.hgignore')
988 self.assertFalse(self.project.is_ignored(myfile))
989
990 def test_loading_config_dot_py(self):
991 self.project = testutils.sample_project(ropefolder='.ropeproject')
992 config = self.project.get_file('.ropeproject/config.py')
993 if not config.exists():
994 config.create()
995 config.write('def set_prefs(prefs):\n'
996 ' prefs["ignored_resources"] = ["myfile.txt"]\n'
997 'def project_opened(project):\n'
998 ' project.root.create_file("loaded")\n')
999 self.project.close()
1000 self.project = Project(self.project.address, ropefolder='.ropeproject')
1001 self.assertTrue(self.project.get_file('loaded').exists())
1002 myfile = self.project.get_file('myfile.txt')
1003 self.assertTrue(self.project.is_ignored(myfile))
1004
1005 def test_ignoring_syntax_errors(self):
1006 self.project = testutils.sample_project(ropefolder=None,
1007 ignore_syntax_errors=True)
1008 mod = testutils.create_module(self.project, 'mod')
1009 mod.write('xyz print')
1010 pymod = self.project.get_pymodule(mod) # noqa
1011
1012 def test_compressed_history(self):
1013 self.project = testutils.sample_project(compress_history=True)
1014 mod = testutils.create_module(self.project, 'mod')
1015 mod.write('')
1016
1017 def test_compressed_objectdb(self):
1018 self.project = testutils.sample_project(compress_objectdb=True)
1019 mod = testutils.create_module(self.project, 'mod')
1020 self.project.pycore.analyze_module(mod)
1021
1022 def test_nested_dot_ropeproject_folder(self):
1023 self.project = testutils.sample_project(ropefolder='.f1/f2')
1024 ropefolder = self.project.ropefolder
1025 self.assertEquals('.f1/f2', ropefolder.path)
1026 self.assertTrue(ropefolder.exists())
1027
1028
1029 def suite():
1030 result = unittest.TestSuite()
1031 result.addTests(unittest.makeSuite(ProjectTest))
1032 result.addTests(unittest.makeSuite(ResourceObserverTest))
1033 result.addTests(unittest.makeSuite(OutOfProjectTest))
1034 result.addTests(unittest.makeSuite(RopeFolderTest))
1035 return result
1036
1037 if __name__ == '__main__':
1038 unittest.main()
OLDNEW
« no previous file with comments | « tools/telemetry/third_party/rope/ropetest/objectinfertest.py ('k') | tools/telemetry/third_party/rope/ropetest/pycoretest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698