1
"""Tests for distutils.command.sdist."""
6
from os.path import join
10
from distutils.command.sdist import sdist
11
from distutils.core import Distribution
12
from distutils.tests.test_config import PyPIRCCommandTestCase
13
from distutils.errors import DistutilsExecError
14
from distutils.spawn import find_executable
15
from distutils.tests import support
18
from distutils.core import setup
29
scripts%(sep)sscript.py
31
some%(sep)sother_file.txt
32
somecode%(sep)s__init__.py
33
somecode%(sep)sdoc.dat
34
somecode%(sep)sdoc.txt
37
class sdistTestCase(support.LoggingSilencer, PyPIRCCommandTestCase):
40
# PyPIRCCommandTestCase creates a temp dir already
41
# and put it in self.tmp_dir
42
super(sdistTestCase, self).setUp()
43
# setting up an environment
44
self.old_path = os.getcwd()
45
os.mkdir(join(self.tmp_dir, 'somecode'))
46
os.mkdir(join(self.tmp_dir, 'dist'))
47
# a package, and a README
48
self.write_file((self.tmp_dir, 'README'), 'xxx')
49
self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#')
50
self.write_file((self.tmp_dir, 'setup.py'), SETUP_PY)
51
os.chdir(self.tmp_dir)
55
os.chdir(self.old_path)
56
super(sdistTestCase, self).tearDown()
58
def get_cmd(self, metadata=None):
61
metadata = {'name': 'fake', 'version': '1.0',
62
'url': 'xxx', 'author': 'xxx',
63
'author_email': 'xxx'}
64
dist = Distribution(metadata)
65
dist.script_name = 'setup.py'
66
dist.packages = ['somecode']
67
dist.include_package_data = True
75
def test_prune_file_list(self):
76
# this test creates a package with some vcs dirs in it
77
# and launch sdist to make sure they get pruned
80
# creating VCS directories with some files in them
81
os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
82
self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx')
84
os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
85
self.write_file((self.tmp_dir, 'somecode', '.hg',
88
os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
89
self.write_file((self.tmp_dir, 'somecode', '.git',
92
# now building a sdist
93
dist, cmd = self.get_cmd()
95
# zip is available universally
96
# (tar might not be installed under win32)
99
cmd.ensure_finalized()
102
# now let's check what we have
103
dist_folder = join(self.tmp_dir, 'dist')
104
files = os.listdir(dist_folder)
105
self.assertEquals(files, ['fake-1.0.zip'])
107
zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
109
content = zip_file.namelist()
113
# making sure everything has been pruned correctly
114
self.assertEquals(len(content), 4)
116
def test_make_distribution(self):
118
# check if tar and gzip are installed
119
if (find_executable('tar') is None or
120
find_executable('gzip') is None):
123
# now building a sdist
124
dist, cmd = self.get_cmd()
126
# creating a gztar then a tar
127
cmd.formats = ['gztar', 'tar']
128
cmd.ensure_finalized()
131
# making sure we have two files
132
dist_folder = join(self.tmp_dir, 'dist')
133
result = os.listdir(dist_folder)
135
self.assertEquals(result,
136
['fake-1.0.tar', 'fake-1.0.tar.gz'] )
138
os.remove(join(dist_folder, 'fake-1.0.tar'))
139
os.remove(join(dist_folder, 'fake-1.0.tar.gz'))
141
# now trying a tar then a gztar
142
cmd.formats = ['tar', 'gztar']
144
cmd.ensure_finalized()
147
result = os.listdir(dist_folder)
149
self.assertEquals(result,
150
['fake-1.0.tar', 'fake-1.0.tar.gz'])
152
def test_add_defaults(self):
154
# http://bugs.python.org/issue2279
156
# add_default should also include
157
# data_files and package_data
158
dist, cmd = self.get_cmd()
160
# filling data_files by pointing files
162
dist.package_data = {'': ['*.cfg', '*.dat'],
163
'somecode': ['*.txt']}
164
self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
165
self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#')
167
# adding some data in data_files
168
data_dir = join(self.tmp_dir, 'data')
170
self.write_file((data_dir, 'data.dt'), '#')
171
some_dir = join(self.tmp_dir, 'some')
173
self.write_file((self.tmp_dir, 'inroot.txt'), '#')
174
self.write_file((some_dir, 'file.txt'), '#')
175
self.write_file((some_dir, 'other_file.txt'), '#')
177
dist.data_files = [('data', ['data/data.dt',
181
'some/other_file.txt']
184
script_dir = join(self.tmp_dir, 'scripts')
186
self.write_file((script_dir, 'script.py'), '#')
187
dist.scripts = [join('scripts', 'script.py')]
189
cmd.formats = ['zip']
190
cmd.use_defaults = True
192
cmd.ensure_finalized()
195
# now let's check what we have
196
dist_folder = join(self.tmp_dir, 'dist')
197
files = os.listdir(dist_folder)
198
self.assertEquals(files, ['fake-1.0.zip'])
200
zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
202
content = zip_file.namelist()
206
# making sure everything was added
207
self.assertEquals(len(content), 11)
209
# checking the MANIFEST
210
manifest = open(join(self.tmp_dir, 'MANIFEST')).read()
211
self.assertEquals(manifest, MANIFEST % {'sep': os.sep})
214
return unittest.makeSuite(sdistTestCase)
216
if __name__ == "__main__":
217
unittest.main(defaultTest="test_suite")