Skip to content

Commit

Permalink
Merge pull request #596 from python-rope/lieryan-589-testutils
Browse files Browse the repository at this point in the history
Fix #589 Cleanup testutils.sample_project()
  • Loading branch information
lieryan committed Dec 14, 2022
2 parents bb73cf3 + a046db6 commit eeacfed
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 37 deletions.
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

0 comments on commit eeacfed

Please sign in to comment.