Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 1 | """Tests for distutils.command.sdist.""" |
| 2 | import os |
| 3 | import unittest |
| 4 | import shutil |
| 5 | import zipfile |
| 6 | from os.path import join |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 7 | import sys |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 8 | import tempfile |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 9 | import warnings |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 10 | |
Éric Araujo | 70ec44a | 2010-11-06 02:44:43 +0000 | [diff] [blame] | 11 | from test.support import captured_stdout, check_warnings, run_unittest |
Tarek Ziadé | aec039a | 2009-05-14 12:45:48 +0000 | [diff] [blame] | 12 | |
Éric Araujo | 70ec44a | 2010-11-06 02:44:43 +0000 | [diff] [blame] | 13 | from distutils.command.sdist import sdist, show_formats |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 14 | from distutils.core import Distribution |
| 15 | from distutils.tests.test_config import PyPIRCCommandTestCase |
Tarek Ziadé | da0dc2e | 2009-05-14 15:21:26 +0000 | [diff] [blame] | 16 | from distutils.errors import DistutilsExecError, DistutilsOptionError |
Tarek Ziadé | b18b936 | 2009-01-29 23:54:06 +0000 | [diff] [blame] | 17 | from distutils.spawn import find_executable |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 18 | from distutils.tests import support |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 19 | from distutils.log import WARN |
Tarek Ziadé | aec039a | 2009-05-14 12:45:48 +0000 | [diff] [blame] | 20 | from distutils.archive_util import ARCHIVE_FORMATS |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 21 | |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 22 | SETUP_PY = """ |
| 23 | from distutils.core import setup |
| 24 | import somecode |
| 25 | |
| 26 | setup(name='fake') |
| 27 | """ |
| 28 | |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 29 | MANIFEST = """\ |
Éric Araujo | da668ff | 2010-08-14 02:30:34 +0000 | [diff] [blame] | 30 | # file GENERATED by distutils, do NOT edit |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 31 | README |
Tarek Ziadé | 14d34a0 | 2009-02-17 23:10:18 +0000 | [diff] [blame] | 32 | inroot.txt |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 33 | setup.py |
Tarek Ziadé | de27e48 | 2009-02-16 21:51:13 +0000 | [diff] [blame] | 34 | data%(sep)sdata.dt |
| 35 | scripts%(sep)sscript.py |
Tarek Ziadé | a30337a | 2009-02-17 09:47:25 +0000 | [diff] [blame] | 36 | some%(sep)sfile.txt |
| 37 | some%(sep)sother_file.txt |
Tarek Ziadé | de27e48 | 2009-02-16 21:51:13 +0000 | [diff] [blame] | 38 | somecode%(sep)s__init__.py |
| 39 | somecode%(sep)sdoc.dat |
| 40 | somecode%(sep)sdoc.txt |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 41 | """ |
| 42 | |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 43 | class SDistTestCase(PyPIRCCommandTestCase): |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 44 | |
| 45 | def setUp(self): |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 46 | # PyPIRCCommandTestCase creates a temp dir already |
| 47 | # and put it in self.tmp_dir |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 48 | super(SDistTestCase, self).setUp() |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 49 | # setting up an environment |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 50 | self.old_path = os.getcwd() |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 51 | os.mkdir(join(self.tmp_dir, 'somecode')) |
| 52 | os.mkdir(join(self.tmp_dir, 'dist')) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 53 | # a package, and a README |
| 54 | self.write_file((self.tmp_dir, 'README'), 'xxx') |
| 55 | self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#') |
| 56 | self.write_file((self.tmp_dir, 'setup.py'), SETUP_PY) |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 57 | os.chdir(self.tmp_dir) |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 58 | |
| 59 | def tearDown(self): |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 60 | # back to normal |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 61 | os.chdir(self.old_path) |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 62 | super(SDistTestCase, self).tearDown() |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 63 | |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 64 | def get_cmd(self, metadata=None): |
| 65 | """Returns a cmd""" |
| 66 | if metadata is None: |
| 67 | metadata = {'name': 'fake', 'version': '1.0', |
| 68 | 'url': 'xxx', 'author': 'xxx', |
| 69 | 'author_email': 'xxx'} |
| 70 | dist = Distribution(metadata) |
| 71 | dist.script_name = 'setup.py' |
| 72 | dist.packages = ['somecode'] |
| 73 | dist.include_package_data = True |
| 74 | cmd = sdist(dist) |
| 75 | cmd.dist_dir = 'dist' |
| 76 | def _warn(*args): |
| 77 | pass |
| 78 | cmd.warn = _warn |
| 79 | return dist, cmd |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 80 | |
| 81 | def test_prune_file_list(self): |
| 82 | # this test creates a package with some vcs dirs in it |
| 83 | # and launch sdist to make sure they get pruned |
| 84 | # on all systems |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 85 | |
| 86 | # creating VCS directories with some files in them |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 87 | os.mkdir(join(self.tmp_dir, 'somecode', '.svn')) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 88 | self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx') |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 89 | |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 90 | os.mkdir(join(self.tmp_dir, 'somecode', '.hg')) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 91 | self.write_file((self.tmp_dir, 'somecode', '.hg', |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 92 | 'ok'), 'xxx') |
| 93 | |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 94 | os.mkdir(join(self.tmp_dir, 'somecode', '.git')) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 95 | self.write_file((self.tmp_dir, 'somecode', '.git', |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 96 | 'ok'), 'xxx') |
| 97 | |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 98 | # now building a sdist |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 99 | dist, cmd = self.get_cmd() |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 100 | |
| 101 | # zip is available universally |
| 102 | # (tar might not be installed under win32) |
| 103 | cmd.formats = ['zip'] |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 104 | |
| 105 | cmd.ensure_finalized() |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 106 | cmd.run() |
| 107 | |
| 108 | # now let's check what we have |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 109 | dist_folder = join(self.tmp_dir, 'dist') |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 110 | files = os.listdir(dist_folder) |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 111 | self.assertEqual(files, ['fake-1.0.zip']) |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 112 | |
| 113 | zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) |
| 114 | try: |
| 115 | content = zip_file.namelist() |
| 116 | finally: |
| 117 | zip_file.close() |
| 118 | |
| 119 | # making sure everything has been pruned correctly |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 120 | self.assertEqual(len(content), 4) |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 121 | |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 122 | def test_make_distribution(self): |
| 123 | |
Tarek Ziadé | b18b936 | 2009-01-29 23:54:06 +0000 | [diff] [blame] | 124 | # check if tar and gzip are installed |
| 125 | if (find_executable('tar') is None or |
| 126 | find_executable('gzip') is None): |
| 127 | return |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 128 | |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 129 | # now building a sdist |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 130 | dist, cmd = self.get_cmd() |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 131 | |
| 132 | # creating a gztar then a tar |
| 133 | cmd.formats = ['gztar', 'tar'] |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 134 | cmd.ensure_finalized() |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 135 | cmd.run() |
| 136 | |
| 137 | # making sure we have two files |
Tarek Ziadé | c1375d5 | 2009-02-14 14:35:51 +0000 | [diff] [blame] | 138 | dist_folder = join(self.tmp_dir, 'dist') |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 139 | result = os.listdir(dist_folder) |
| 140 | result.sort() |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 141 | self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz'] ) |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 142 | |
| 143 | os.remove(join(dist_folder, 'fake-1.0.tar')) |
| 144 | os.remove(join(dist_folder, 'fake-1.0.tar.gz')) |
| 145 | |
| 146 | # now trying a tar then a gztar |
| 147 | cmd.formats = ['tar', 'gztar'] |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 148 | |
| 149 | cmd.ensure_finalized() |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 150 | cmd.run() |
| 151 | |
| 152 | result = os.listdir(dist_folder) |
| 153 | result.sort() |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 154 | self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz']) |
Tarek Ziadé | 0302cf5 | 2009-01-26 17:23:20 +0000 | [diff] [blame] | 155 | |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 156 | def test_add_defaults(self): |
| 157 | |
| 158 | # http://bugs.python.org/issue2279 |
| 159 | |
| 160 | # add_default should also include |
| 161 | # data_files and package_data |
| 162 | dist, cmd = self.get_cmd() |
| 163 | |
| 164 | # filling data_files by pointing files |
| 165 | # in package_data |
| 166 | dist.package_data = {'': ['*.cfg', '*.dat'], |
| 167 | 'somecode': ['*.txt']} |
| 168 | self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') |
| 169 | self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#') |
| 170 | |
| 171 | # adding some data in data_files |
| 172 | data_dir = join(self.tmp_dir, 'data') |
| 173 | os.mkdir(data_dir) |
| 174 | self.write_file((data_dir, 'data.dt'), '#') |
Tarek Ziadé | a30337a | 2009-02-17 09:47:25 +0000 | [diff] [blame] | 175 | some_dir = join(self.tmp_dir, 'some') |
| 176 | os.mkdir(some_dir) |
Tarek Ziadé | 14d34a0 | 2009-02-17 23:10:18 +0000 | [diff] [blame] | 177 | self.write_file((self.tmp_dir, 'inroot.txt'), '#') |
Tarek Ziadé | a30337a | 2009-02-17 09:47:25 +0000 | [diff] [blame] | 178 | self.write_file((some_dir, 'file.txt'), '#') |
| 179 | self.write_file((some_dir, 'other_file.txt'), '#') |
| 180 | |
Tarek Ziadé | 14d34a0 | 2009-02-17 23:10:18 +0000 | [diff] [blame] | 181 | dist.data_files = [('data', ['data/data.dt', |
| 182 | 'inroot.txt', |
| 183 | 'notexisting']), |
Tarek Ziadé | a30337a | 2009-02-17 09:47:25 +0000 | [diff] [blame] | 184 | 'some/file.txt', |
| 185 | 'some/other_file.txt'] |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 186 | |
| 187 | # adding a script |
| 188 | script_dir = join(self.tmp_dir, 'scripts') |
| 189 | os.mkdir(script_dir) |
| 190 | self.write_file((script_dir, 'script.py'), '#') |
| 191 | dist.scripts = [join('scripts', 'script.py')] |
| 192 | |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 193 | cmd.formats = ['zip'] |
| 194 | cmd.use_defaults = True |
| 195 | |
| 196 | cmd.ensure_finalized() |
| 197 | cmd.run() |
| 198 | |
| 199 | # now let's check what we have |
| 200 | dist_folder = join(self.tmp_dir, 'dist') |
| 201 | files = os.listdir(dist_folder) |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 202 | self.assertEqual(files, ['fake-1.0.zip']) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 203 | |
| 204 | zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) |
| 205 | try: |
| 206 | content = zip_file.namelist() |
| 207 | finally: |
| 208 | zip_file.close() |
| 209 | |
| 210 | # making sure everything was added |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 211 | self.assertEqual(len(content), 11) |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 212 | |
| 213 | # checking the MANIFEST |
Éric Araujo | bee5cef | 2010-11-05 23:51:56 +0000 | [diff] [blame] | 214 | f = open(join(self.tmp_dir, 'MANIFEST')) |
| 215 | try: |
| 216 | manifest = f.read() |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 217 | self.assertEqual(manifest, MANIFEST % {'sep': os.sep}) |
Éric Araujo | bee5cef | 2010-11-05 23:51:56 +0000 | [diff] [blame] | 218 | finally: |
| 219 | f.close() |
Tarek Ziadé | 0d0506e | 2009-02-16 21:49:12 +0000 | [diff] [blame] | 220 | |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 221 | def test_metadata_check_option(self): |
| 222 | # testing the `medata-check` option |
| 223 | dist, cmd = self.get_cmd(metadata={}) |
| 224 | |
| 225 | # this should raise some warnings ! |
| 226 | # with the `check` subcommand |
| 227 | cmd.ensure_finalized() |
| 228 | cmd.run() |
| 229 | warnings = self.get_logs(WARN) |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 230 | self.assertEqual(len(warnings), 2) |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 231 | |
| 232 | # trying with a complete set of metadata |
| 233 | self.clear_logs() |
| 234 | dist, cmd = self.get_cmd() |
| 235 | cmd.ensure_finalized() |
| 236 | cmd.metadata_check = 0 |
| 237 | cmd.run() |
| 238 | warnings = self.get_logs(WARN) |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 239 | self.assertEqual(len(warnings), 0) |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 240 | |
| 241 | def test_check_metadata_deprecated(self): |
| 242 | # makes sure make_metadata is deprecated |
| 243 | dist, cmd = self.get_cmd() |
| 244 | with check_warnings() as w: |
| 245 | warnings.simplefilter("always") |
| 246 | cmd.check_metadata() |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 247 | self.assertEqual(len(w.warnings), 1) |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 248 | |
Tarek Ziadé | aec039a | 2009-05-14 12:45:48 +0000 | [diff] [blame] | 249 | def test_show_formats(self): |
| 250 | with captured_stdout() as stdout: |
| 251 | show_formats() |
| 252 | |
| 253 | # the output should be a header line + one line per format |
| 254 | num_formats = len(ARCHIVE_FORMATS.keys()) |
| 255 | output = [line for line in stdout.getvalue().split('\n') |
| 256 | if line.strip().startswith('--formats=')] |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 257 | self.assertEqual(len(output), num_formats) |
Tarek Ziadé | aec039a | 2009-05-14 12:45:48 +0000 | [diff] [blame] | 258 | |
Tarek Ziadé | da0dc2e | 2009-05-14 15:21:26 +0000 | [diff] [blame] | 259 | def test_finalize_options(self): |
| 260 | |
| 261 | dist, cmd = self.get_cmd() |
| 262 | cmd.finalize_options() |
| 263 | |
| 264 | # default options set by finalize |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 265 | self.assertEqual(cmd.manifest, 'MANIFEST') |
| 266 | self.assertEqual(cmd.template, 'MANIFEST.in') |
| 267 | self.assertEqual(cmd.dist_dir, 'dist') |
Tarek Ziadé | da0dc2e | 2009-05-14 15:21:26 +0000 | [diff] [blame] | 268 | |
| 269 | # formats has to be a string splitable on (' ', ',') or |
| 270 | # a stringlist |
| 271 | cmd.formats = 1 |
| 272 | self.assertRaises(DistutilsOptionError, cmd.finalize_options) |
| 273 | cmd.formats = ['zip'] |
| 274 | cmd.finalize_options() |
| 275 | |
| 276 | # formats has to be known |
| 277 | cmd.formats = 'supazipa' |
| 278 | self.assertRaises(DistutilsOptionError, cmd.finalize_options) |
| 279 | |
Tarek Ziadé | 05b3034 | 2009-10-02 23:56:02 +0000 | [diff] [blame] | 280 | |
Tarek Ziadé | c16a85c | 2010-05-17 10:38:53 +0000 | [diff] [blame] | 281 | def test_get_file_list(self): |
| 282 | # make sure MANIFEST is recalculated |
| 283 | dist, cmd = self.get_cmd() |
| 284 | |
| 285 | # filling data_files by pointing files in package_data |
| 286 | dist.package_data = {'somecode': ['*.txt']} |
| 287 | self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') |
| 288 | cmd.ensure_finalized() |
| 289 | cmd.run() |
| 290 | |
| 291 | f = open(cmd.manifest) |
| 292 | try: |
| 293 | manifest = [line.strip() for line in f.read().split('\n') |
| 294 | if line.strip() != ''] |
| 295 | finally: |
| 296 | f.close() |
| 297 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 298 | self.assertEqual(len(manifest), 5) |
Tarek Ziadé | c16a85c | 2010-05-17 10:38:53 +0000 | [diff] [blame] | 299 | |
| 300 | # adding a file |
| 301 | self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#') |
| 302 | |
| 303 | # make sure build_py is reinitinialized, like a fresh run |
| 304 | build_py = dist.get_command_obj('build_py') |
| 305 | build_py.finalized = False |
| 306 | build_py.ensure_finalized() |
| 307 | |
| 308 | cmd.run() |
| 309 | |
| 310 | f = open(cmd.manifest) |
| 311 | try: |
| 312 | manifest2 = [line.strip() for line in f.read().split('\n') |
| 313 | if line.strip() != ''] |
| 314 | finally: |
| 315 | f.close() |
| 316 | |
| 317 | # do we have the new file in MANIFEST ? |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame^] | 318 | self.assertEqual(len(manifest2), 6) |
Tarek Ziadé | c16a85c | 2010-05-17 10:38:53 +0000 | [diff] [blame] | 319 | self.assertIn('doc2.txt', manifest2[-1]) |
| 320 | |
Éric Araujo | da668ff | 2010-08-14 02:30:34 +0000 | [diff] [blame] | 321 | def test_manifest_marker(self): |
| 322 | # check that autogenerated MANIFESTs have a marker |
| 323 | dist, cmd = self.get_cmd() |
| 324 | cmd.ensure_finalized() |
| 325 | cmd.run() |
| 326 | |
| 327 | f = open(cmd.manifest) |
| 328 | try: |
| 329 | manifest = [line.strip() for line in f.read().split('\n') |
| 330 | if line.strip() != ''] |
| 331 | finally: |
| 332 | f.close() |
| 333 | |
| 334 | self.assertEqual(manifest[0], |
| 335 | '# file GENERATED by distutils, do NOT edit') |
| 336 | |
| 337 | def test_manual_manifest(self): |
| 338 | # check that a MANIFEST without a marker is left alone |
| 339 | dist, cmd = self.get_cmd() |
| 340 | cmd.ensure_finalized() |
| 341 | self.write_file((self.tmp_dir, cmd.manifest), 'README.manual') |
| 342 | cmd.run() |
| 343 | |
| 344 | f = open(cmd.manifest) |
| 345 | try: |
| 346 | manifest = [line.strip() for line in f.read().split('\n') |
| 347 | if line.strip() != ''] |
| 348 | finally: |
| 349 | f.close() |
| 350 | |
| 351 | self.assertEqual(manifest, ['README.manual']) |
Tarek Ziadé | c16a85c | 2010-05-17 10:38:53 +0000 | [diff] [blame] | 352 | |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 353 | def test_suite(): |
Tarek Ziadé | 5af55c6 | 2009-05-16 16:52:13 +0000 | [diff] [blame] | 354 | return unittest.makeSuite(SDistTestCase) |
Benjamin Peterson | 960cf0f | 2009-01-09 04:11:44 +0000 | [diff] [blame] | 355 | |
| 356 | if __name__ == "__main__": |
Éric Araujo | 70ec44a | 2010-11-06 02:44:43 +0000 | [diff] [blame] | 357 | run_unittest(test_suite()) |