blob: cdcbc3786233aa6303dc5ca168aab6e67bff3ce5 [file] [log] [blame]
Fred Drakeb8ab8b62004-06-17 20:14:50 +00001"""Support code for distutils test cases."""
Tarek Ziadéc1375d52009-02-14 14:35:51 +00002import os
Fred Drakeb8ab8b62004-06-17 20:14:50 +00003import shutil
4import tempfile
5
Fred Drakeedcac8f2004-08-03 18:53:07 +00006from distutils import log
Tarek Ziadébaf51802009-03-31 21:37:16 +00007from distutils.core import Distribution
Tarek Ziadé29bbb962009-05-10 12:02:35 +00008from test.support import EnvironmentVarGuard
Fred Drakeedcac8f2004-08-03 18:53:07 +00009
10class LoggingSilencer(object):
11
12 def setUp(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000013 super().setUp()
Fred Drakeedcac8f2004-08-03 18:53:07 +000014 self.threshold = log.set_threshold(log.FATAL)
15
16 def tearDown(self):
17 log.set_threshold(self.threshold)
Guido van Rossumcd16bf62007-06-13 18:07:49 +000018 super().tearDown()
Fred Drakeedcac8f2004-08-03 18:53:07 +000019
Fred Drakeb8ab8b62004-06-17 20:14:50 +000020
21class TempdirManager(object):
22 """Mix-in class that handles temporary directories for test cases.
23
24 This is intended to be used with unittest.TestCase.
25 """
26
27 def setUp(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000028 super().setUp()
Fred Drakeb8ab8b62004-06-17 20:14:50 +000029 self.tempdirs = []
30
31 def tearDown(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000032 super().tearDown()
Fred Drakeb8ab8b62004-06-17 20:14:50 +000033 while self.tempdirs:
34 d = self.tempdirs.pop()
Tarek Ziadéc1375d52009-02-14 14:35:51 +000035 shutil.rmtree(d, os.name in ('nt', 'cygwin'))
Fred Drakeb8ab8b62004-06-17 20:14:50 +000036
37 def mkdtemp(self):
38 """Create a temporary directory that will be cleaned up.
39
40 Returns the path of the directory.
41 """
42 d = tempfile.mkdtemp()
43 self.tempdirs.append(d)
44 return d
45
Tarek Ziadébaf51802009-03-31 21:37:16 +000046 def write_file(self, path, content='xxx'):
Tarek Ziadé0d0506e2009-02-16 21:49:12 +000047 """Writes a file in the given path.
48
49
50 path can be a string or a sequence.
51 """
52 if isinstance(path, (list, tuple)):
53 path = os.path.join(*path)
54 f = open(path, 'w')
55 try:
56 f.write(content)
57 finally:
58 f.close()
Fred Drakeb8ab8b62004-06-17 20:14:50 +000059
Tarek Ziadébaf51802009-03-31 21:37:16 +000060 def create_dist(self, pkg_name='foo', **kw):
61 """Will generate a test environment.
62
63 This function creates:
64 - a Distribution instance using keywords
65 - a temporary directory with a package structure
66
67 It returns the package directory and the distribution
68 instance.
69 """
70 tmp_dir = self.mkdtemp()
71 pkg_dir = os.path.join(tmp_dir, pkg_name)
72 os.mkdir(pkg_dir)
73 dist = Distribution(attrs=kw)
74
75 return pkg_dir, dist
76
Fred Drakeb8ab8b62004-06-17 20:14:50 +000077class DummyCommand:
78 """Class to store options for retrieval via set_undefined_options()."""
79
80 def __init__(self, **kwargs):
81 for kw, val in kwargs.items():
82 setattr(self, kw, val)
83
84 def ensure_finalized(self):
85 pass
Tarek Ziadé29bbb962009-05-10 12:02:35 +000086
87class EnvironGuard(object):
88
89 def setUp(self):
90 super(EnvironGuard, self).setUp()
91 self.environ = EnvironmentVarGuard()
92
93 def tearDown(self):
94 self.environ.__exit__()
95 super(EnvironGuard, self).tearDown()