Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #589 Cleanup testutils.sample_project() #596

Merged
merged 7 commits into from Dec 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -3,6 +3,7 @@
- #533 Refactoring to Remove usage of unicode type
- #559 Improve handling of whitespace in import and from-import statements
- #581 Remove functions in rope.base.ast that has functionally identical implementation in stdlib's ast
- #589 Fix issue with `sample_project()` creating directories where it shouldn't when running tests

# Release 1.5.1

Expand Down
1 change: 1 addition & 0 deletions rope/base/project.py
Expand Up @@ -212,6 +212,7 @@ def __init__(
"""
if projectroot != "/":
projectroot = _realpath(projectroot).rstrip("/\\")
assert isinstance(projectroot, str)
self._address = projectroot
self._ropefolder_name = ropefolder
if not os.path.exists(self._address):
Expand Down
42 changes: 20 additions & 22 deletions ropetest/projecttest.py
@@ -1,7 +1,7 @@
import os.path
import shutil
from textwrap import dedent
import tempfile
import unittest
from textwrap import dedent

from rope.base.exceptions import RopeError, ResourceNotFoundError
from rope.base.fscommands import FileSystemCommands
Expand Down Expand Up @@ -222,17 +222,15 @@ def test_nonempty_get_children2(self):
)

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)
with tempfile.TemporaryDirectory(suffix="bad_dir") as bad_dir:
os.chmod(bad_dir, 0o000)
try:
parent = self.project.get_resource(self.sample_folder)

parent.get_children()
parent.get_children()

finally:
os.chmod(bad_dir, 0o755)
finally:
os.chmod(bad_dir, 0o755)

def test_getting_files(self):
files = self.project.root.get_files()
Expand Down Expand Up @@ -1005,7 +1003,7 @@ def test_none_project_rope_folder(self):
self.assertTrue(self.project.ropefolder is None)

def test_getting_project_rope_folder(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
self.assertTrue(self.project.ropefolder.exists())
self.assertEqual(".ropeproject", self.project.ropefolder.path)

Expand Down Expand Up @@ -1083,7 +1081,7 @@ def test_ignored_resources_and_prefixes(self):
self.assertFalse(self.project.is_ignored(myfile))

def test_loading_config_dot_py(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
config = self.project.get_file(".ropeproject/config.py")
if not config.exists():
config.create()
Expand All @@ -1094,13 +1092,13 @@ def project_opened(project):
project.root.create_file("loaded")
"""))
self.project.close()
self.project = Project(self.project.address, ropefolder=".ropeproject")
self.project = Project(self.project.address)
self.assertTrue(self.project.get_file("loaded").exists())
myfile = self.project.get_file("myfile.txt")
self.assertTrue(self.project.is_ignored(myfile))

def test_loading_pyproject(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
config = self.project.get_file("pyproject.toml")
if not config.exists():
config.create()
Expand All @@ -1109,23 +1107,23 @@ def test_loading_pyproject(self):
ignored_resources=["pyproject.py"]
"""))
self.project.close()
self.project = Project(self.project.address, ropefolder=".ropeproject")
self.project = Project(self.project.address)
myfile = self.project.get_file("pyproject.py")
self.assertTrue(self.project.is_ignored(myfile))

def test_loading_pyproject_empty_file(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
config = self.project.get_file("pyproject.toml")
if not config.exists():
config.create()
config.write("")
self.project.close()
self.project = Project(self.project.address, ropefolder=".ropeproject")
self.project = Project(self.project.address)
myfile = self.project.get_file("pyproject.py")
self.assertFalse(self.project.is_ignored(myfile))

def test_loading_pyproject_no_tool_section(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
config = self.project.get_file("pyproject.toml")
if not config.exists():
config.create()
Expand All @@ -1134,12 +1132,12 @@ def test_loading_pyproject_no_tool_section(self):
name = 'testproject'
"""))
self.project.close()
self.project = Project(self.project.address, ropefolder=".ropeproject")
self.project = Project(self.project.address)
myfile = self.project.get_file("pyproject.py")
self.assertFalse(self.project.is_ignored(myfile))

def test_loading_pyproject_no_tool_rope_section(self):
self.project = testutils.sample_project(ropefolder=".ropeproject")
self.project = testutils.sample_project()
config = self.project.get_file("pyproject.toml")
if not config.exists():
config.create()
Expand All @@ -1148,7 +1146,7 @@ def test_loading_pyproject_no_tool_rope_section(self):
name = 'testproject'
"""))
self.project.close()
self.project = Project(self.project.address, ropefolder=".ropeproject")
self.project = Project(self.project.address)
myfile = self.project.get_file("pyproject.py")
self.assertFalse(self.project.is_ignored(myfile))

Expand Down
26 changes: 11 additions & 15 deletions ropetest/testutils.py
@@ -1,26 +1,23 @@
import logging
import os.path
import shutil
import sys
import logging

logging.basicConfig(format="%(levelname)s:%(funcName)s:%(message)s", level=logging.INFO)
import tempfile
import unittest
from pathlib import Path

import rope.base.project
from rope.contrib import generate


def sample_project(root=None, foldername=None, **kwds):
if root is None:
root = "sample_project"
if foldername:
root = foldername
# HACK: Using ``/dev/shm/`` for faster tests
if os.name == "posix":
if os.path.isdir("/dev/shm") and os.access("/dev/shm", os.W_OK):
root = "/dev/shm/" + root
elif os.path.isdir("/tmp") and os.access("/tmp", os.W_OK):
root = "/tmp/" + root
logging.basicConfig(format="%(levelname)s:%(funcName)s:%(message)s", level=logging.INFO)

RUN_TMP_DIR = tempfile.mkdtemp(prefix="ropetest-run-")


def sample_project(foldername=None, **kwds):
root = Path(tempfile.mkdtemp(prefix="project-", dir=RUN_TMP_DIR))
root /= foldername if foldername else "sample_project"
logging.debug("Using %s as root of the project.", root)
# Using these prefs for faster tests
prefs = {
Expand All @@ -32,7 +29,6 @@ def sample_project(root=None, foldername=None, **kwds):
"import_dynload_stdmods": False,
}
prefs.update(kwds)
remove_recursively(root)
project = rope.base.project.Project(root, **prefs)
return project

Expand Down