Index: tools/telemetry/third_party/rope/ropetest/testutils.py |
diff --git a/tools/telemetry/third_party/rope/ropetest/testutils.py b/tools/telemetry/third_party/rope/ropetest/testutils.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e13421a7e876f844646498c8a7168adf0737e767 |
--- /dev/null |
+++ b/tools/telemetry/third_party/rope/ropetest/testutils.py |
@@ -0,0 +1,98 @@ |
+import os.path |
+import shutil |
+import sys |
+import logging |
+logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s', |
+ level=logging.INFO) |
+ |
+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.debug("Using %s as root of the project.", root) |
+ # Using these prefs for faster tests |
+ prefs = {'save_objectdb': False, 'save_history': False, |
+ 'validate_objectdb': False, 'automatic_soa': False, |
+ 'ignored_resources': ['.ropeproject', '*.pyc'], |
+ 'import_dynload_stdmods': False} |
+ prefs.update(kwds) |
+ remove_recursively(root) |
+ project = rope.base.project.Project(root, **prefs) |
+ return project |
+ |
+create_module = generate.create_module |
+create_package = generate.create_package |
+ |
+ |
+def remove_project(project): |
+ project.close() |
+ remove_recursively(project.address) |
+ |
+ |
+def remove_recursively(path): |
+ import time |
+ # windows sometimes raises exceptions instead of removing files |
+ if os.name == 'nt' or sys.platform == 'cygwin': |
+ for i in range(12): |
+ try: |
+ _remove_recursively(path) |
+ except OSError as e: |
+ if e.errno not in (13, 16, 32): |
+ raise |
+ time.sleep(0.3) |
+ else: |
+ break |
+ else: |
+ _remove_recursively(path) |
+ |
+ |
+def _remove_recursively(path): |
+ if not os.path.exists(path): |
+ return |
+ if os.path.isfile(path): |
+ os.remove(path) |
+ else: |
+ shutil.rmtree(path) |
+ |
+ |
+def run_only_for_25(func): |
+ """Should be used as a decorator for a unittest.TestCase test method""" |
+ if sys.version_info >= (2, 5, 0): |
+ return func |
+ else: |
+ def do_nothing(self): |
+ pass |
+ return do_nothing |
+ |
+ |
+def only_for(version): |
+ """Should be used as a decorator for a unittest.TestCase test method""" |
+ def decorator(func): |
+ if sys.version >= version: |
+ return func |
+ else: |
+ def do_nothing(self): |
+ pass |
+ return do_nothing |
+ return decorator |
+ |
+ |
+def run_only_for_unix(func): |
+ """Should be used as a decorator for a unittest.TestCase test method""" |
+ if os.name == 'posix': |
+ return func |
+ else: |
+ def do_nothing(self): |
+ pass |
+ return do_nothing |