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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/rope/ropetest/projecttest.py
diff --git a/tools/telemetry/third_party/rope/ropetest/projecttest.py b/tools/telemetry/third_party/rope/ropetest/projecttest.py
new file mode 100644
index 0000000000000000000000000000000000000000..f52648f8313d8dd7efc2872a2fc0a2185e4588f6
--- /dev/null
+++ b/tools/telemetry/third_party/rope/ropetest/projecttest.py
@@ -0,0 +1,1038 @@
+import os
+import os.path
+import shutil
+try:
+ import unittest2 as unittest
+except ImportError:
+ import unittest
+
+from rope.base.exceptions import RopeError, ResourceNotFoundError
+from rope.base.fscommands import FileSystemCommands
+from rope.base.libutils import path_to_resource
+from rope.base.project import Project, NoProject, _realpath
+from ropetest import testutils
+from rope.base.resourceobserver import FilteredResourceObserver
+
+
+class ProjectTest(unittest.TestCase):
+
+ def setUp(self):
+ unittest.TestCase.setUp(self)
+ self.project = testutils.sample_project(foldername='sampleproject',
+ ropefolder=None)
+ self.project_root = self.project.address
+ self._make_sample_project()
+ self.no_project = NoProject()
+
+ def _make_sample_project(self):
+ self.sample_file = 'sample_file.txt'
+ self.sample_path = os.path.join(self.project_root, 'sample_file.txt')
+ if not os.path.exists(self.project_root):
+ os.mkdir(self.project_root)
+ self.sample_folder = 'sample_folder'
+ os.mkdir(os.path.join(self.project_root, self.sample_folder))
+ sample = open(self.sample_path, 'w')
+ sample.write('sample text\n')
+ sample.close()
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ unittest.TestCase.tearDown(self)
+
+ def test_project_creation(self):
+ self.assertEquals(_realpath(self.project_root),
+ self.project.address)
+
+ def test_getting_project_file(self):
+ project_file = self.project.get_resource(self.sample_file)
+ self.assertTrue(project_file is not None)
+
+ def test_project_file_reading(self):
+ projectFile = self.project.get_resource(self.sample_file)
+ self.assertEquals('sample text\n', projectFile.read())
+
+ def test_getting_not_existing_project_file(self):
+ with self.assertRaises(ResourceNotFoundError):
+ self.project.get_resource('DoesNotExistFile.txt')
+
+ def test_writing_in_project_files(self):
+ project_file = self.project.get_resource(self.sample_file)
+ project_file.write('another text\n')
+ self.assertEquals('another text\n', project_file.read())
+
+ def test_creating_files(self):
+ project_file = 'newfile.txt'
+ self.project.root.create_file(project_file)
+ newFile = self.project.get_resource(project_file)
+ self.assertTrue(newFile is not None)
+
+ def test_creating_files_that_already_exist(self):
+ with self.assertRaises(RopeError):
+ self.project.root.create_file(self.sample_file)
+
+ def test_making_root_folder_if_it_does_not_exist(self):
+ project = Project('sampleproject2')
+ try:
+ self.assertTrue(os.path.exists('sampleproject2') and
+ os.path.isdir('sampleproject2'))
+ finally:
+ testutils.remove_project(project)
+
+ def test_failure_when_project_root_exists_and_is_a_file(self):
+ project_root = 'sampleproject2'
+ try:
+ open(project_root, 'w').close()
+ with self.assertRaises(RopeError):
+ Project(project_root)
+ finally:
+ testutils.remove_recursively(project_root)
+
+ def test_creating_folders(self):
+ folderName = 'SampleFolder'
+ self.project.root.create_folder(folderName)
+ folderPath = os.path.join(self.project.address, folderName)
+ self.assertTrue(os.path.exists(folderPath) and
+ os.path.isdir(folderPath))
+
+ def test_making_folder_that_already_exists(self):
+ folderName = 'SampleFolder'
+ with self.assertRaises(RopeError):
+ self.project.root.create_folder(folderName)
+ self.project.root.create_folder(folderName)
+
+ def test_failing_if_creating_folder_while_file_already_exists(self):
+ folderName = 'SampleFolder'
+ with self.assertRaises(RopeError):
+ self.project.root.create_file(folderName)
+ self.project.root.create_folder(folderName)
+
+ def test_creating_file_inside_folder(self):
+ folder_name = 'sampleFolder'
+ file_name = 'sample2.txt'
+ file_path = folder_name + '/' + file_name
+ parent_folder = self.project.root.create_folder(folder_name)
+ parent_folder.create_file(file_name)
+ file = self.project.get_resource(file_path)
+ file.write('sample notes')
+ self.assertEquals(file_path, file.path)
+ self.assertEquals('sample notes',
+ open(os.path.join(self.project.address,
+ file_path)).read())
+
+ def test_failing_when_creating_file_inside_non_existent_folder(self):
+ with self.assertRaises(ResourceNotFoundError):
+ self.project.root.create_file('NonexistentFolder/SomeFile.txt')
+
+ def test_nested_directories(self):
+ folder_name = 'SampleFolder'
+ parent = self.project.root.create_folder(folder_name)
+ parent.create_folder(folder_name)
+ folder_path = os.path.join(self.project.address,
+ folder_name, folder_name)
+ self.assertTrue(os.path.exists(folder_path) and
+ os.path.isdir(folder_path))
+
+ def test_removing_files(self):
+ self.assertTrue(os.path.exists(self.sample_path))
+ self.project.get_resource(self.sample_file).remove()
+ self.assertFalse(os.path.exists(self.sample_path))
+
+ def test_removing_files_invalidating_in_project_resource_pool(self):
+ root_folder = self.project.root
+ my_file = root_folder.create_file('my_file.txt')
+ my_file.remove()
+ self.assertFalse(root_folder.has_child('my_file.txt'))
+
+ def test_removing_directories(self):
+ self.assertTrue(os.path.exists(os.path.join(self.project.address,
+ self.sample_folder)))
+ self.project.get_resource(self.sample_folder).remove()
+ self.assertFalse(os.path.exists(os.path.join(self.project.address,
+ self.sample_folder)))
+
+ def test_removing_non_existent_files(self):
+ with self.assertRaises(ResourceNotFoundError):
+ self.project.get_resource('NonExistentFile.txt').remove()
+
+ def test_removing_nested_files(self):
+ file_name = self.sample_folder + '/sample_file.txt'
+ self.project.root.create_file(file_name)
+ self.project.get_resource(file_name).remove()
+ self.assertTrue(os.path.exists(os.path.join(self.project.address,
+ self.sample_folder)))
+ self.assertTrue(not os.path.exists(os.path.join(self.project.address,
+ file_name)))
+
+ def test_file_get_name(self):
+ file = self.project.get_resource(self.sample_file)
+ self.assertEquals(self.sample_file, file.name)
+ file_name = 'nestedFile.txt'
+ parent = self.project.get_resource(self.sample_folder)
+ filePath = self.sample_folder + '/' + file_name
+ parent.create_file(file_name)
+ nestedFile = self.project.get_resource(filePath)
+ self.assertEquals(file_name, nestedFile.name)
+
+ def test_folder_get_name(self):
+ folder = self.project.get_resource(self.sample_folder)
+ self.assertEquals(self.sample_folder, folder.name)
+
+ def test_file_get_path(self):
+ file = self.project.get_resource(self.sample_file)
+ self.assertEquals(self.sample_file, file.path)
+ fileName = 'nestedFile.txt'
+ parent = self.project.get_resource(self.sample_folder)
+ filePath = self.sample_folder + '/' + fileName
+ parent.create_file(fileName)
+ nestedFile = self.project.get_resource(filePath)
+ self.assertEquals(filePath, nestedFile.path)
+
+ def test_folder_get_path(self):
+ folder = self.project.get_resource(self.sample_folder)
+ self.assertEquals(self.sample_folder, folder.path)
+
+ def test_is_folder(self):
+ self.assertTrue(self.project.get_resource(
+ self.sample_folder).is_folder())
+ self.assertTrue(not self.project.get_resource(
+ self.sample_file).is_folder())
+
+ def testget_children(self):
+ children = self.project.get_resource(self.sample_folder).get_children()
+ self.assertEquals([], children)
+
+ def test_nonempty_get_children(self):
+ file_name = 'nestedfile.txt'
+ filePath = self.sample_folder + '/' + file_name
+ parent = self.project.get_resource(self.sample_folder)
+ parent.create_file(file_name)
+ children = parent.get_children()
+ self.assertEquals(1, len(children))
+ self.assertEquals(filePath, children[0].path)
+
+ def test_nonempty_get_children2(self):
+ file_name = 'nestedfile.txt'
+ folder_name = 'nestedfolder.txt'
+ filePath = self.sample_folder + '/' + file_name
+ folderPath = self.sample_folder + '/' + folder_name
+ parent = self.project.get_resource(self.sample_folder)
+ parent.create_file(file_name)
+ parent.create_folder(folder_name)
+ children = parent.get_children()
+ self.assertEquals(2, len(children))
+ self.assertTrue(filePath == children[0].path or
+ filePath == children[1].path)
+ self.assertTrue(folderPath == children[0].path or
+ folderPath == children[1].path)
+
+ def test_does_not_fail_for_permission_denied(self):
+ bad_dir = os.path.join(self.sample_folder, "bad_dir")
+ os.makedirs(bad_dir)
+ self.addCleanup(shutil.rmtree, bad_dir)
+ os.chmod(bad_dir, 0o000)
+ try:
+ parent = self.project.get_resource(self.sample_folder)
+
+ parent.get_children()
+
+ finally:
+ os.chmod(bad_dir, 0o755)
+
+ def test_getting_files(self):
+ files = self.project.root.get_files()
+ self.assertEquals(1, len(files))
+ self.assertTrue(self.project.get_resource(self.sample_file) in files)
+
+ def test_getting_folders(self):
+ folders = self.project.root.get_folders()
+ self.assertEquals(1, len(folders))
+ self.assertTrue(self.project.get_resource(
+ self.sample_folder) in folders)
+
+ def test_nested_folder_get_files(self):
+ parent = self.project.root.create_folder('top')
+ parent.create_file('file1.txt')
+ parent.create_file('file2.txt')
+ files = parent.get_files()
+ self.assertEquals(2, len(files))
+ self.assertTrue(self.project.get_resource('top/file2.txt') in files)
+ self.assertEquals(0, len(parent.get_folders()))
+
+ def test_nested_folder_get_folders(self):
+ parent = self.project.root.create_folder('top')
+ parent.create_folder('dir1')
+ parent.create_folder('dir2')
+ folders = parent.get_folders()
+ self.assertEquals(2, len(folders))
+ self.assertTrue(self.project.get_resource('top/dir1') in folders)
+ self.assertEquals(0, len(parent.get_files()))
+
+ def test_root_folder(self):
+ root_folder = self.project.root
+ self.assertEquals(2, len(root_folder.get_children()))
+ self.assertEquals('', root_folder.path)
+ self.assertEquals('', root_folder.name)
+
+ def test_get_all_files(self):
+ files = tuple(self.project.get_files())
+ self.assertEquals(1, len(files))
+ self.assertEquals(self.sample_file, files[0].name)
+
+ def test_get_all_files_after_changing(self):
+ self.assertEquals(1, len(self.project.get_files()))
+ myfile = self.project.root.create_file('myfile.txt')
+ self.assertEquals(2, len(self.project.get_files()))
+ myfile.move('newfile.txt')
+ self.assertEquals(2, len(self.project.get_files()))
+ self.project.get_file('newfile.txt').remove()
+ self.assertEquals(1, len(self.project.get_files()))
+
+ def test_multifile_get_all_files(self):
+ fileName = 'nestedFile.txt'
+ parent = self.project.get_resource(self.sample_folder)
+ parent.create_file(fileName)
+ files = list(self.project.get_files())
+ self.assertEquals(2, len(files))
+ self.assertTrue(fileName == files[0].name or fileName == files[1].name)
+
+ def test_ignoring_dot_pyc_files_in_get_files(self):
+ root = self.project.address
+ src_folder = os.path.join(root, 'src')
+ os.mkdir(src_folder)
+ test_pyc = os.path.join(src_folder, 'test.pyc')
+ open(test_pyc, 'w').close()
+ for x in self.project.get_files():
+ self.assertNotEquals('src/test.pyc', x.path)
+
+ def test_folder_creating_files(self):
+ projectFile = 'NewFile.txt'
+ self.project.root.create_file(projectFile)
+ new_file = self.project.get_resource(projectFile)
+ self.assertTrue(new_file is not None and not new_file.is_folder())
+
+ def test_folder_creating_nested_files(self):
+ project_file = 'NewFile.txt'
+ parent_folder = self.project.get_resource(self.sample_folder)
+ parent_folder.create_file(project_file)
+ new_file = self.project.get_resource(self.sample_folder
+ + '/' + project_file)
+ self.assertTrue(new_file is not None and not new_file.is_folder())
+
+ def test_folder_creating_files2(self):
+ projectFile = 'newfolder'
+ self.project.root.create_folder(projectFile)
+ new_folder = self.project.get_resource(projectFile)
+ self.assertTrue(new_folder is not None and new_folder.is_folder())
+
+ def test_folder_creating_nested_files2(self):
+ project_file = 'newfolder'
+ parent_folder = self.project.get_resource(self.sample_folder)
+ parent_folder.create_folder(project_file)
+ new_folder = self.project.get_resource(self.sample_folder
+ + '/' + project_file)
+ self.assertTrue(new_folder is not None and new_folder.is_folder())
+
+ def test_folder_get_child(self):
+ folder = self.project.root
+ folder.create_file('myfile.txt')
+ folder.create_folder('myfolder')
+ self.assertEquals(self.project.get_resource('myfile.txt'),
+ folder.get_child('myfile.txt'))
+ self.assertEquals(self.project.get_resource('myfolder'),
+ folder.get_child('myfolder'))
+
+ def test_folder_get_child_nested(self):
+ root = self.project.root
+ folder = root.create_folder('myfolder')
+ folder.create_file('myfile.txt')
+ folder.create_folder('myfolder')
+ self.assertEquals(self.project.get_resource('myfolder/myfile.txt'),
+ folder.get_child('myfile.txt'))
+ self.assertEquals(self.project.get_resource('myfolder/myfolder'),
+ folder.get_child('myfolder'))
+
+ def test_project_root_is_root_folder(self):
+ self.assertEquals('', self.project.root.path)
+
+ def test_moving_files(self):
+ root_folder = self.project.root
+ my_file = root_folder.create_file('my_file.txt')
+ my_file.move('my_other_file.txt')
+ self.assertFalse(my_file.exists())
+ root_folder.get_child('my_other_file.txt')
+
+ def test_moving_folders(self):
+ root_folder = self.project.root
+ my_folder = root_folder.create_folder('my_folder')
+ my_file = my_folder.create_file('my_file.txt')
+ my_folder.move('new_folder')
+ self.assertFalse(root_folder.has_child('my_folder'))
+ self.assertFalse(my_file.exists())
+ self.assertTrue(root_folder.get_child('new_folder') is not None)
+
+ def test_moving_destination_folders(self):
+ root_folder = self.project.root
+ my_folder = root_folder.create_folder('my_folder')
+ my_file = root_folder.create_file('my_file.txt')
+ my_file.move('my_folder')
+ self.assertFalse(root_folder.has_child('my_file.txt'))
+ self.assertFalse(my_file.exists())
+ my_folder.get_child('my_file.txt')
+
+ def test_moving_files_and_resource_objects(self):
+ root_folder = self.project.root
+ my_file = root_folder.create_file('my_file.txt')
+ old_hash = hash(my_file)
+ my_file.move('my_other_file.txt')
+ self.assertEquals(old_hash, hash(my_file))
+
+ def test_file_encoding_reading(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = u'# -*- coding: utf-8 -*-\n' \
+ '#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
+ file = open(sample_file.real_path, 'w')
+ file.write(contents.encode('utf-8'))
+ file.close()
+ self.assertEquals(contents, sample_file.read())
+
+ def test_file_encoding_writing(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = u'# -*- coding: utf-8 -*-\n' \
+ '\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
+ sample_file.write(contents)
+ self.assertEquals(contents, sample_file.read())
+
+ def test_using_utf8_when_writing_in_case_of_errors(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = u'\n\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
+ sample_file.write(contents)
+ self.assertEquals(contents, sample_file.read())
+
+ def test_encoding_declaration_in_the_second_line(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = '\n# -*- coding: latin-1 -*-\n\xa9\n'
+ file = open(sample_file.real_path, 'wb')
+ file.write(contents)
+ file.close()
+ self.assertEquals(contents, sample_file.read().encode('latin-1'))
+
+ def test_read_bytes(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = '\n# -*- coding: latin-1 -*-\n\xa9\n'
+ file = open(sample_file.real_path, 'wb')
+ file.write(contents)
+ file.close()
+ self.assertEquals(contents, sample_file.read_bytes())
+
+ # TODO: Detecting utf-16 encoding
+ def xxx_test_using_utf16(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = '# -*- coding: utf-16 -*-\n# This is a sample file ...\n'
+ file = open(sample_file.real_path, 'w')
+ file.write(contents.encode('utf-16'))
+ file.close()
+ sample_file.write(contents)
+ self.assertEquals(contents, sample_file.read())
+
+ # XXX: supporting utf_8_sig
+ def xxx_test_file_encoding_reading_for_notepad_styles(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ contents = u'#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
+ file = open(sample_file.real_path, 'w')
+ # file.write('\xef\xbb\xbf')
+ file.write(contents.encode('utf-8-sig'))
+ file.close()
+ self.assertEquals(contents, sample_file.read())
+
+ def test_using_project_get_file(self):
+ myfile = self.project.get_file(self.sample_file)
+ self.assertTrue(myfile.exists())
+
+ def test_using_file_create(self):
+ myfile = self.project.get_file('myfile.txt')
+ self.assertFalse(myfile.exists())
+ myfile.create()
+ self.assertTrue(myfile.exists())
+ self.assertFalse(myfile.is_folder())
+
+ def test_using_folder_create(self):
+ myfolder = self.project.get_folder('myfolder')
+ self.assertFalse(myfolder.exists())
+ myfolder.create()
+ self.assertTrue(myfolder.exists())
+ self.assertTrue(myfolder.is_folder())
+
+ def test_exception_when_creating_twice(self):
+ with self.assertRaises(RopeError):
+ myfile = self.project.get_file('myfile.txt')
+ myfile.create()
+ myfile.create()
+
+ def test_exception_when_parent_does_not_exist(self):
+ with self.assertRaises(ResourceNotFoundError):
+ myfile = self.project.get_file('myfolder/myfile.txt')
+ myfile.create()
+
+ def test_simple_path_to_resource(self):
+ myfile = self.project.root.create_file('myfile.txt')
+ self.assertEquals(myfile, path_to_resource(self.project,
+ myfile.real_path))
+ self.assertEquals(myfile, path_to_resource(
+ self.project, myfile.real_path, type='file'))
+ myfolder = self.project.root.create_folder('myfolder')
+ self.assertEquals(myfolder, path_to_resource(self.project,
+ myfolder.real_path))
+ self.assertEquals(myfolder, path_to_resource(
+ self.project, myfolder.real_path, type='folder'))
+
+ @testutils.run_only_for_unix
+ def test_ignoring_symlinks_inside_project(self):
+ project2 = testutils.sample_project(folder_name='sampleproject2')
+ mod = project2.root.create_file('mod.py')
+ try:
+ path = os.path.join(self.project.address, 'linkedfile.txt')
+ os.symlink(mod.real_path, path)
+ files = self.project.root.get_files()
+ self.assertEquals(1, len(files))
+ finally:
+ testutils.remove_project(project2)
+
+ def test_getting_empty_source_folders(self):
+ self.assertEquals([], self.project.get_source_folders())
+
+ def test_root_source_folder(self):
+ self.project.root.create_file('sample.py')
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(1, len(source_folders))
+ self.assertTrue(self.project.root in source_folders)
+
+ def test_root_source_folder2(self):
+ self.project.root.create_file('mod1.py')
+ self.project.root.create_file('mod2.py')
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(1, len(source_folders))
+ self.assertTrue(self.project.root in source_folders)
+
+ def test_src_source_folder(self):
+ src = self.project.root.create_folder('src')
+ src.create_file('sample.py')
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(1, len(source_folders))
+ self.assertTrue(self.project.get_resource('src') in source_folders)
+
+ def test_packages(self):
+ src = self.project.root.create_folder('src')
+ pkg = src.create_folder('package')
+ pkg.create_file('__init__.py')
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(1, len(source_folders))
+ self.assertTrue(src in source_folders)
+
+ def test_multi_source_folders(self):
+ src = self.project.root.create_folder('src')
+ package = src.create_folder('package')
+ package.create_file('__init__.py')
+ test = self.project.root.create_folder('test')
+ test.create_file('alltests.py')
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(2, len(source_folders))
+ self.assertTrue(src in source_folders)
+ self.assertTrue(test in source_folders)
+
+ def test_multi_source_folders2(self):
+ testutils.create_module(self.project, 'mod1')
+ src = self.project.root.create_folder('src')
+ package = testutils.create_package(self.project, 'package', src)
+ testutils.create_module(self.project, 'mod2', package)
+ source_folders = self.project.get_source_folders()
+ self.assertEquals(2, len(source_folders))
+ self.assertTrue(self.project.root in source_folders and
+ src in source_folders)
+
+
+class ResourceObserverTest(unittest.TestCase):
+
+ def setUp(self):
+ super(ResourceObserverTest, self).setUp()
+ self.project = testutils.sample_project()
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(ResourceObserverTest, self).tearDown()
+
+ def test_resource_change_observer(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ sample_file.write('a sample file version 1')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(sample_observer)
+ sample_file.write('a sample file version 2')
+ self.assertEquals(1, sample_observer.change_count)
+ self.assertEquals(sample_file, sample_observer.last_changed)
+
+ def test_resource_change_observer_after_removal(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ sample_file.write('text')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [sample_file]))
+ sample_file.remove()
+ self.assertEquals(1, sample_observer.change_count)
+ self.assertEquals(sample_file, sample_observer.last_removed)
+
+ def test_resource_change_observer2(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(sample_observer)
+ self.project.remove_observer(sample_observer)
+ sample_file.write('a sample file version 2')
+ self.assertEquals(0, sample_observer.change_count)
+
+ def test_resource_change_observer_for_folders(self):
+ root_folder = self.project.root
+ my_folder = root_folder.create_folder('my_folder')
+ my_folder_observer = _SampleObserver()
+ root_folder_observer = _SampleObserver()
+ self.project.add_observer(
+ FilteredResourceObserver(my_folder_observer, [my_folder]))
+ self.project.add_observer(
+ FilteredResourceObserver(root_folder_observer, [root_folder]))
+ my_file = my_folder.create_file('my_file.txt')
+ self.assertEquals(1, my_folder_observer.change_count)
+ my_file.move('another_file.txt')
+ self.assertEquals(2, my_folder_observer.change_count)
+ self.assertEquals(1, root_folder_observer.change_count)
+ self.project.get_resource('another_file.txt').remove()
+ self.assertEquals(2, my_folder_observer.change_count)
+ self.assertEquals(2, root_folder_observer.change_count)
+
+ def test_resource_change_observer_after_moving(self):
+ sample_file = self.project.root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(sample_observer)
+ sample_file.move('new_file.txt')
+ self.assertEquals(1, sample_observer.change_count)
+ self.assertEquals((sample_file,
+ self.project.get_resource('new_file.txt')),
+ sample_observer.last_moved)
+
+ def test_revalidating_files(self):
+ root = self.project.root
+ my_file = root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [my_file]))
+ os.remove(my_file.real_path)
+ self.project.validate(root)
+ self.assertEquals(my_file, sample_observer.last_removed)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_revalidating_files_and_no_changes2(self):
+ root = self.project.root
+ my_file = root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [my_file]))
+ self.project.validate(root)
+ self.assertEquals(None, sample_observer.last_moved)
+ self.assertEquals(0, sample_observer.change_count)
+
+ def test_revalidating_folders(self):
+ root = self.project.root
+ my_folder = root.create_folder('myfolder')
+ my_file = my_folder.create_file('myfile.txt') # noqa
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [my_folder]))
+ testutils.remove_recursively(my_folder.real_path)
+ self.project.validate(root)
+ self.assertEquals(my_folder, sample_observer.last_removed)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_removing_and_adding_resources_to_filtered_observer(self):
+ my_file = self.project.root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ filtered_observer = FilteredResourceObserver(sample_observer)
+ self.project.add_observer(filtered_observer)
+ my_file.write('1')
+ self.assertEquals(0, sample_observer.change_count)
+ filtered_observer.add_resource(my_file)
+ my_file.write('2')
+ self.assertEquals(1, sample_observer.change_count)
+ filtered_observer.remove_resource(my_file)
+ my_file.write('3')
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_validation_and_changing_files(self):
+ my_file = self.project.root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ timekeeper = _MockChangeIndicator()
+ filtered_observer = FilteredResourceObserver(
+ sample_observer, [my_file], timekeeper=timekeeper)
+ self.project.add_observer(filtered_observer)
+ self._write_file(my_file.real_path)
+ timekeeper.set_indicator(my_file, 1)
+ self.project.validate(self.project.root)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_validation_and_changing_files2(self):
+ my_file = self.project.root.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ timekeeper = _MockChangeIndicator()
+ self.project.add_observer(FilteredResourceObserver(
+ sample_observer, [my_file],
+ timekeeper=timekeeper))
+ timekeeper.set_indicator(my_file, 1)
+ my_file.write('hey')
+ self.assertEquals(1, sample_observer.change_count)
+ self.project.validate(self.project.root)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_not_reporting_multiple_changes_to_folders(self):
+ root = self.project.root
+ file1 = root.create_file('file1.txt')
+ file2 = root.create_file('file2.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(
+ sample_observer, [root, file1, file2]))
+ os.remove(file1.real_path)
+ os.remove(file2.real_path)
+ self.assertEquals(0, sample_observer.change_count)
+ self.project.validate(self.project.root)
+ self.assertEquals(3, sample_observer.change_count)
+
+ def _write_file(self, path):
+ my_file = open(path, 'w')
+ my_file.write('\n')
+ my_file.close()
+
+ def test_moving_and_being_interested_about_a_folder_and_a_child(self):
+ my_folder = self.project.root.create_folder('my_folder')
+ my_file = my_folder.create_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ filtered_observer = FilteredResourceObserver(
+ sample_observer, [my_folder, my_file])
+ self.project.add_observer(filtered_observer)
+ my_folder.move('new_folder')
+ self.assertEquals(2, sample_observer.change_count)
+
+ def test_contains_for_folders(self):
+ folder1 = self.project.root.create_folder('folder')
+ folder2 = self.project.root.create_folder('folder2')
+ self.assertFalse(folder1.contains(folder2))
+
+ def test_validating_when_created(self):
+ root = self.project.root
+ my_file = self.project.get_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [my_file]))
+ open(my_file.real_path, 'w').close()
+ self.project.validate(root)
+ self.assertEquals(my_file, sample_observer.last_created)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_validating_twice_when_created(self):
+ root = self.project.root
+ my_file = self.project.get_file('my_file.txt')
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [my_file]))
+ open(my_file.real_path, 'w').close()
+ self.project.validate(root)
+ self.project.validate(root)
+ self.assertEquals(my_file, sample_observer.last_created)
+ self.assertEquals(1, sample_observer.change_count)
+
+ def test_changes_and_adding_resources(self):
+ root = self.project.root # noqa
+ file1 = self.project.get_file('file1.txt')
+ file2 = self.project.get_file('file2.txt')
+ file1.create()
+ sample_observer = _SampleObserver()
+ self.project.add_observer(FilteredResourceObserver(sample_observer,
+ [file1, file2]))
+ file1.move(file2.path)
+ self.assertEquals(2, sample_observer.change_count)
+ self.assertEquals(file2, sample_observer.last_created)
+ self.assertEquals((file1, file2), sample_observer.last_moved)
+
+ def test_validating_get_files_list(self):
+ root = self.project.root # noqa
+ self.assertEquals(0, len(self.project.get_files()))
+ file = open(os.path.join(self.project.address, 'myfile.txt'), 'w')
+ file.close()
+ self.project.validate()
+ self.assertEquals(1, len(self.project.get_files()))
+
+ def test_clear_observered_resources_for_filtered_observers(self):
+ sample_file = self.project.root.create_file('myfile.txt')
+ sample_observer = _SampleObserver()
+ filtered = FilteredResourceObserver(sample_observer)
+ self.project.add_observer(filtered)
+ filtered.add_resource(sample_file)
+ filtered.clear_resources()
+ sample_file.write('1')
+ self.assertEquals(0, sample_observer.change_count)
+
+
+class _MockChangeIndicator(object):
+
+ def __init__(self):
+ self.times = {}
+
+ def set_indicator(self, resource, time):
+ self.times[resource] = time
+
+ def get_indicator(self, resource):
+ return self.times.get(resource, 0)
+
+
+class _SampleObserver(object):
+
+ def __init__(self):
+ self.change_count = 0
+ self.last_changed = None
+ self.last_moved = None
+ self.last_created = None
+ self.last_removed = None
+
+ def resource_changed(self, resource):
+ self.last_changed = resource
+ self.change_count += 1
+
+ def resource_moved(self, resource, new_resource):
+ self.last_moved = (resource, new_resource)
+ self.change_count += 1
+
+ def resource_created(self, resource):
+ self.last_created = resource
+ self.change_count += 1
+
+ def resource_removed(self, resource):
+ self.last_removed = resource
+ self.change_count += 1
+
+
+class OutOfProjectTest(unittest.TestCase):
+
+ def setUp(self):
+ super(OutOfProjectTest, self).setUp()
+ self.test_directory = 'temp_test_directory'
+ testutils.remove_recursively(self.test_directory)
+ os.mkdir(self.test_directory)
+ self.project = testutils.sample_project()
+ self.no_project = NoProject()
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ testutils.remove_recursively(self.test_directory)
+ super(OutOfProjectTest, self).tearDown()
+
+ def test_simple_out_of_project_file(self):
+ sample_file_path = os.path.join(self.test_directory, 'sample.txt')
+ sample_file = open(sample_file_path, 'w')
+ sample_file.write('sample content\n')
+ sample_file.close()
+ sample_resource = self.no_project.get_resource(sample_file_path)
+ self.assertEquals('sample content\n', sample_resource.read())
+
+ def test_simple_out_of_project_folder(self):
+ sample_folder_path = os.path.join(self.test_directory, 'sample_folder')
+ os.mkdir(sample_folder_path)
+ sample_folder = self.no_project.get_resource(sample_folder_path)
+ self.assertEquals([], sample_folder.get_children())
+
+ sample_file_path = os.path.join(sample_folder_path, 'sample.txt')
+ open(sample_file_path, 'w').close()
+ sample_resource = self.no_project.get_resource(sample_file_path)
+ self.assertEquals(sample_resource, sample_folder.get_children()[0])
+
+ def test_using_absolute_path(self):
+ sample_file_path = os.path.join(self.test_directory, 'sample.txt')
+ open(sample_file_path, 'w').close()
+ normal_sample_resource = self.no_project.get_resource(sample_file_path)
+ absolute_sample_resource = \
+ self.no_project.get_resource(os.path.abspath(sample_file_path))
+ self.assertEquals(normal_sample_resource, absolute_sample_resource)
+
+ def test_folder_get_child(self):
+ sample_folder_path = os.path.join(self.test_directory, 'sample_folder')
+ os.mkdir(sample_folder_path)
+ sample_folder = self.no_project.get_resource(sample_folder_path)
+ self.assertEquals([], sample_folder.get_children())
+
+ sample_file_path = os.path.join(sample_folder_path, 'sample.txt')
+ open(sample_file_path, 'w').close()
+ sample_resource = self.no_project.get_resource(sample_file_path)
+ self.assertTrue(sample_folder.has_child('sample.txt'))
+ self.assertFalse(sample_folder.has_child('doesnothave.txt'))
+ self.assertEquals(sample_resource,
+ sample_folder.get_child('sample.txt'))
+
+ def test_out_of_project_files_and_path_to_resource(self):
+ sample_file_path = os.path.join(self.test_directory, 'sample.txt')
+ sample_file = open(sample_file_path, 'w')
+ sample_file.write('sample content\n')
+ sample_file.close()
+ sample_resource = self.no_project.get_resource(sample_file_path)
+ self.assertEquals(sample_resource,
+ path_to_resource(self.project, sample_file_path))
+
+
+class _MockFSCommands(object):
+ def __init__(self):
+ self.log = ''
+ self.fscommands = FileSystemCommands()
+
+ def create_file(self, path):
+ self.log += 'create_file '
+ self.fscommands.create_file(path)
+
+ def create_folder(self, path):
+ self.log += 'create_folder '
+ self.fscommands.create_folder(path)
+
+ def move(self, path, new_location):
+ self.log += 'move '
+ self.fscommands.move(path, new_location)
+
+ def remove(self, path):
+ self.log += 'remove '
+ self.fscommands.remove(path)
+
+
+class RopeFolderTest(unittest.TestCase):
+
+ def setUp(self):
+ super(RopeFolderTest, self).setUp()
+ self.project = None
+
+ def tearDown(self):
+ if self.project:
+ testutils.remove_project(self.project)
+ super(RopeFolderTest, self).tearDown()
+
+ def test_none_project_rope_folder(self):
+ self.project = testutils.sample_project(ropefolder=None)
+ self.assertTrue(self.project.ropefolder is None)
+
+ def test_getting_project_rope_folder(self):
+ self.project = testutils.sample_project(ropefolder='.ropeproject')
+ self.assertTrue(self.project.ropefolder.exists())
+ self.assertTrue('.ropeproject', self.project.ropefolder.path)
+
+ def test_setting_ignored_resources(self):
+ self.project = testutils.sample_project(
+ ignored_resources=['myfile.txt'])
+ myfile = self.project.get_file('myfile.txt')
+ file2 = self.project.get_file('file2.txt')
+ self.assertTrue(self.project.is_ignored(myfile))
+ self.assertFalse(self.project.is_ignored(file2))
+
+ def test_ignored_folders(self):
+ self.project = testutils.sample_project(ignored_resources=['myfolder'])
+ myfolder = self.project.root.create_folder('myfolder')
+ self.assertTrue(self.project.is_ignored(myfolder))
+ myfile = myfolder.create_file('myfile.txt')
+ self.assertTrue(self.project.is_ignored(myfile))
+
+ def test_ignored_resources_and_get_files(self):
+ self.project = testutils.sample_project(
+ ignored_resources=['myfile.txt'], ropefolder=None)
+ myfile = self.project.get_file('myfile.txt')
+ self.assertEquals(0, len(self.project.get_files()))
+ myfile.create()
+ self.assertEquals(0, len(self.project.get_files()))
+
+ def test_ignored_resources_and_get_files2(self):
+ self.project = testutils.sample_project(
+ ignored_resources=['myfile.txt'], ropefolder=None)
+ myfile = self.project.root.create_file('myfile.txt') # noqa
+ self.assertEquals(0, len(self.project.get_files()))
+
+ def test_setting_ignored_resources_patterns(self):
+ self.project = testutils.sample_project(ignored_resources=['m?file.*'])
+ myfile = self.project.get_file('myfile.txt')
+ file2 = self.project.get_file('file2.txt')
+ self.assertTrue(self.project.is_ignored(myfile))
+ self.assertFalse(self.project.is_ignored(file2))
+
+ def test_star_should_not_include_slashes(self):
+ self.project = testutils.sample_project(ignored_resources=['f*.txt'])
+ folder = self.project.root.create_folder('folder')
+ file1 = folder.create_file('myfile.txt')
+ file2 = folder.create_file('file2.txt')
+ self.assertFalse(self.project.is_ignored(file1))
+ self.assertTrue(self.project.is_ignored(file2))
+
+ def test_normal_fscommands(self):
+ fscommands = _MockFSCommands()
+ self.project = testutils.sample_project(fscommands=fscommands)
+ myfile = self.project.get_file('myfile.txt')
+ myfile.create()
+ self.assertTrue('create_file ', fscommands.log)
+
+ def test_fscommands_and_ignored_resources(self):
+ fscommands = _MockFSCommands()
+ self.project = testutils.sample_project(
+ fscommands=fscommands,
+ ignored_resources=['myfile.txt'], ropefolder=None)
+ myfile = self.project.get_file('myfile.txt')
+ myfile.create()
+ self.assertEquals('', fscommands.log)
+
+ def test_ignored_resources_and_prefixes(self):
+ self.project = testutils.sample_project(
+ ignored_resources=['.hg'])
+ myfile = self.project.root.create_file('.hgignore')
+ self.assertFalse(self.project.is_ignored(myfile))
+
+ def test_loading_config_dot_py(self):
+ self.project = testutils.sample_project(ropefolder='.ropeproject')
+ config = self.project.get_file('.ropeproject/config.py')
+ if not config.exists():
+ config.create()
+ config.write('def set_prefs(prefs):\n'
+ ' prefs["ignored_resources"] = ["myfile.txt"]\n'
+ 'def project_opened(project):\n'
+ ' project.root.create_file("loaded")\n')
+ self.project.close()
+ self.project = Project(self.project.address, ropefolder='.ropeproject')
+ self.assertTrue(self.project.get_file('loaded').exists())
+ myfile = self.project.get_file('myfile.txt')
+ self.assertTrue(self.project.is_ignored(myfile))
+
+ def test_ignoring_syntax_errors(self):
+ self.project = testutils.sample_project(ropefolder=None,
+ ignore_syntax_errors=True)
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write('xyz print')
+ pymod = self.project.get_pymodule(mod) # noqa
+
+ def test_compressed_history(self):
+ self.project = testutils.sample_project(compress_history=True)
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write('')
+
+ def test_compressed_objectdb(self):
+ self.project = testutils.sample_project(compress_objectdb=True)
+ mod = testutils.create_module(self.project, 'mod')
+ self.project.pycore.analyze_module(mod)
+
+ def test_nested_dot_ropeproject_folder(self):
+ self.project = testutils.sample_project(ropefolder='.f1/f2')
+ ropefolder = self.project.ropefolder
+ self.assertEquals('.f1/f2', ropefolder.path)
+ self.assertTrue(ropefolder.exists())
+
+
+def suite():
+ result = unittest.TestSuite()
+ result.addTests(unittest.makeSuite(ProjectTest))
+ result.addTests(unittest.makeSuite(ResourceObserverTest))
+ result.addTests(unittest.makeSuite(OutOfProjectTest))
+ result.addTests(unittest.makeSuite(RopeFolderTest))
+ return result
+
+if __name__ == '__main__':
+ unittest.main()
« 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