+++ /dev/null
-"""Support code for distutils test cases."""\r
-import os\r
-import shutil\r
-import tempfile\r
-from copy import deepcopy\r
-import warnings\r
-\r
-from distutils import log\r
-from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL\r
-from distutils.core import Distribution\r
-\r
-def capture_warnings(func):\r
- def _capture_warnings(*args, **kw):\r
- with warnings.catch_warnings():\r
- warnings.simplefilter("ignore")\r
- return func(*args, **kw)\r
- return _capture_warnings\r
-\r
-class LoggingSilencer(object):\r
-\r
- def setUp(self):\r
- super(LoggingSilencer, self).setUp()\r
- self.threshold = log.set_threshold(log.FATAL)\r
- # catching warnings\r
- # when log will be replaced by logging\r
- # we won't need such monkey-patch anymore\r
- self._old_log = log.Log._log\r
- log.Log._log = self._log\r
- self.logs = []\r
-\r
- def tearDown(self):\r
- log.set_threshold(self.threshold)\r
- log.Log._log = self._old_log\r
- super(LoggingSilencer, self).tearDown()\r
-\r
- def _log(self, level, msg, args):\r
- if level not in (DEBUG, INFO, WARN, ERROR, FATAL):\r
- raise ValueError('%s wrong log level' % str(level))\r
- self.logs.append((level, msg, args))\r
-\r
- def get_logs(self, *levels):\r
- def _format(msg, args):\r
- if len(args) == 0:\r
- return msg\r
- return msg % args\r
- return [_format(msg, args) for level, msg, args\r
- in self.logs if level in levels]\r
-\r
- def clear_logs(self):\r
- self.logs = []\r
-\r
-class TempdirManager(object):\r
- """Mix-in class that handles temporary directories for test cases.\r
-\r
- This is intended to be used with unittest.TestCase.\r
- """\r
-\r
- def setUp(self):\r
- super(TempdirManager, self).setUp()\r
- self.tempdirs = []\r
-\r
- def tearDown(self):\r
- super(TempdirManager, self).tearDown()\r
- while self.tempdirs:\r
- d = self.tempdirs.pop()\r
- shutil.rmtree(d, os.name in ('nt', 'cygwin'))\r
-\r
- def mkdtemp(self):\r
- """Create a temporary directory that will be cleaned up.\r
-\r
- Returns the path of the directory.\r
- """\r
- d = tempfile.mkdtemp()\r
- self.tempdirs.append(d)\r
- return d\r
-\r
- def write_file(self, path, content='xxx'):\r
- """Writes a file in the given path.\r
-\r
-\r
- path can be a string or a sequence.\r
- """\r
- if isinstance(path, (list, tuple)):\r
- path = os.path.join(*path)\r
- f = open(path, 'w')\r
- try:\r
- f.write(content)\r
- finally:\r
- f.close()\r
-\r
- def create_dist(self, pkg_name='foo', **kw):\r
- """Will generate a test environment.\r
-\r
- This function creates:\r
- - a Distribution instance using keywords\r
- - a temporary directory with a package structure\r
-\r
- It returns the package directory and the distribution\r
- instance.\r
- """\r
- tmp_dir = self.mkdtemp()\r
- pkg_dir = os.path.join(tmp_dir, pkg_name)\r
- os.mkdir(pkg_dir)\r
- dist = Distribution(attrs=kw)\r
-\r
- return pkg_dir, dist\r
-\r
-class DummyCommand:\r
- """Class to store options for retrieval via set_undefined_options()."""\r
-\r
- def __init__(self, **kwargs):\r
- for kw, val in kwargs.items():\r
- setattr(self, kw, val)\r
-\r
- def ensure_finalized(self):\r
- pass\r
-\r
-class EnvironGuard(object):\r
-\r
- def setUp(self):\r
- super(EnvironGuard, self).setUp()\r
- self.old_environ = deepcopy(os.environ)\r
-\r
- def tearDown(self):\r
- for key, value in self.old_environ.items():\r
- if os.environ.get(key) != value:\r
- os.environ[key] = value\r
-\r
- for key in os.environ.keys():\r
- if key not in self.old_environ:\r
- del os.environ[key]\r
-\r
- super(EnvironGuard, self).tearDown()\r