| 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()
|
|
|