]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/distutils/tests/support.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / distutils / tests / support.py
CommitLineData
4710c53d 1"""Support code for distutils test cases."""\r
2import os\r
3import shutil\r
4import tempfile\r
5from copy import deepcopy\r
6import warnings\r
7\r
8from distutils import log\r
9from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL\r
10from distutils.core import Distribution\r
11\r
12def capture_warnings(func):\r
13 def _capture_warnings(*args, **kw):\r
14 with warnings.catch_warnings():\r
15 warnings.simplefilter("ignore")\r
16 return func(*args, **kw)\r
17 return _capture_warnings\r
18\r
19class LoggingSilencer(object):\r
20\r
21 def setUp(self):\r
22 super(LoggingSilencer, self).setUp()\r
23 self.threshold = log.set_threshold(log.FATAL)\r
24 # catching warnings\r
25 # when log will be replaced by logging\r
26 # we won't need such monkey-patch anymore\r
27 self._old_log = log.Log._log\r
28 log.Log._log = self._log\r
29 self.logs = []\r
30\r
31 def tearDown(self):\r
32 log.set_threshold(self.threshold)\r
33 log.Log._log = self._old_log\r
34 super(LoggingSilencer, self).tearDown()\r
35\r
36 def _log(self, level, msg, args):\r
37 if level not in (DEBUG, INFO, WARN, ERROR, FATAL):\r
38 raise ValueError('%s wrong log level' % str(level))\r
39 self.logs.append((level, msg, args))\r
40\r
41 def get_logs(self, *levels):\r
42 def _format(msg, args):\r
43 if len(args) == 0:\r
44 return msg\r
45 return msg % args\r
46 return [_format(msg, args) for level, msg, args\r
47 in self.logs if level in levels]\r
48\r
49 def clear_logs(self):\r
50 self.logs = []\r
51\r
52class TempdirManager(object):\r
53 """Mix-in class that handles temporary directories for test cases.\r
54\r
55 This is intended to be used with unittest.TestCase.\r
56 """\r
57\r
58 def setUp(self):\r
59 super(TempdirManager, self).setUp()\r
60 self.tempdirs = []\r
61\r
62 def tearDown(self):\r
63 super(TempdirManager, self).tearDown()\r
64 while self.tempdirs:\r
65 d = self.tempdirs.pop()\r
66 shutil.rmtree(d, os.name in ('nt', 'cygwin'))\r
67\r
68 def mkdtemp(self):\r
69 """Create a temporary directory that will be cleaned up.\r
70\r
71 Returns the path of the directory.\r
72 """\r
73 d = tempfile.mkdtemp()\r
74 self.tempdirs.append(d)\r
75 return d\r
76\r
77 def write_file(self, path, content='xxx'):\r
78 """Writes a file in the given path.\r
79\r
80\r
81 path can be a string or a sequence.\r
82 """\r
83 if isinstance(path, (list, tuple)):\r
84 path = os.path.join(*path)\r
85 f = open(path, 'w')\r
86 try:\r
87 f.write(content)\r
88 finally:\r
89 f.close()\r
90\r
91 def create_dist(self, pkg_name='foo', **kw):\r
92 """Will generate a test environment.\r
93\r
94 This function creates:\r
95 - a Distribution instance using keywords\r
96 - a temporary directory with a package structure\r
97\r
98 It returns the package directory and the distribution\r
99 instance.\r
100 """\r
101 tmp_dir = self.mkdtemp()\r
102 pkg_dir = os.path.join(tmp_dir, pkg_name)\r
103 os.mkdir(pkg_dir)\r
104 dist = Distribution(attrs=kw)\r
105\r
106 return pkg_dir, dist\r
107\r
108class DummyCommand:\r
109 """Class to store options for retrieval via set_undefined_options()."""\r
110\r
111 def __init__(self, **kwargs):\r
112 for kw, val in kwargs.items():\r
113 setattr(self, kw, val)\r
114\r
115 def ensure_finalized(self):\r
116 pass\r
117\r
118class EnvironGuard(object):\r
119\r
120 def setUp(self):\r
121 super(EnvironGuard, self).setUp()\r
122 self.old_environ = deepcopy(os.environ)\r
123\r
124 def tearDown(self):\r
125 for key, value in self.old_environ.items():\r
126 if os.environ.get(key) != value:\r
127 os.environ[key] = value\r
128\r
129 for key in os.environ.keys():\r
130 if key not in self.old_environ:\r
131 del os.environ[key]\r
132\r
133 super(EnvironGuard, self).tearDown()\r