~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/distutils/tests/test_sdist.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""Tests for distutils.command.sdist."""
 
2
import os
 
3
import unittest
 
4
import shutil
 
5
import zipfile
 
6
from os.path import join
 
7
import sys
 
8
import tempfile
 
9
 
 
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
 
16
 
 
17
SETUP_PY = """
 
18
from distutils.core import setup
 
19
import somecode
 
20
 
 
21
setup(name='fake')
 
22
"""
 
23
 
 
24
MANIFEST = """\
 
25
README
 
26
inroot.txt
 
27
setup.py
 
28
data%(sep)sdata.dt
 
29
scripts%(sep)sscript.py
 
30
some%(sep)sfile.txt
 
31
some%(sep)sother_file.txt
 
32
somecode%(sep)s__init__.py
 
33
somecode%(sep)sdoc.dat
 
34
somecode%(sep)sdoc.txt
 
35
"""
 
36
 
 
37
class sdistTestCase(support.LoggingSilencer, PyPIRCCommandTestCase):
 
38
 
 
39
    def setUp(self):
 
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)
 
52
 
 
53
    def tearDown(self):
 
54
        # back to normal
 
55
        os.chdir(self.old_path)
 
56
        super(sdistTestCase, self).tearDown()
 
57
 
 
58
    def get_cmd(self, metadata=None):
 
59
        """Returns a cmd"""
 
60
        if metadata is 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
 
68
        cmd = sdist(dist)
 
69
        cmd.dist_dir = 'dist'
 
70
        def _warn(*args):
 
71
            pass
 
72
        cmd.warn = _warn
 
73
        return dist, cmd
 
74
 
 
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
 
78
        # on all systems
 
79
 
 
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')
 
83
 
 
84
        os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
 
85
        self.write_file((self.tmp_dir, 'somecode', '.hg',
 
86
                         'ok'), 'xxx')
 
87
 
 
88
        os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
 
89
        self.write_file((self.tmp_dir, 'somecode', '.git',
 
90
                         'ok'), 'xxx')
 
91
 
 
92
        # now building a sdist
 
93
        dist, cmd = self.get_cmd()
 
94
 
 
95
        # zip is available universally
 
96
        # (tar might not be installed under win32)
 
97
        cmd.formats = ['zip']
 
98
 
 
99
        cmd.ensure_finalized()
 
100
        cmd.run()
 
101
 
 
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'])
 
106
 
 
107
        zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
 
108
        try:
 
109
            content = zip_file.namelist()
 
110
        finally:
 
111
            zip_file.close()
 
112
 
 
113
        # making sure everything has been pruned correctly
 
114
        self.assertEquals(len(content), 4)
 
115
 
 
116
    def test_make_distribution(self):
 
117
 
 
118
        # check if tar and gzip are installed
 
119
        if (find_executable('tar') is None or
 
120
            find_executable('gzip') is None):
 
121
            return
 
122
 
 
123
        # now building a sdist
 
124
        dist, cmd = self.get_cmd()
 
125
 
 
126
        # creating a gztar then a tar
 
127
        cmd.formats = ['gztar', 'tar']
 
128
        cmd.ensure_finalized()
 
129
        cmd.run()
 
130
 
 
131
        # making sure we have two files
 
132
        dist_folder = join(self.tmp_dir, 'dist')
 
133
        result = os.listdir(dist_folder)
 
134
        result.sort()
 
135
        self.assertEquals(result,
 
136
                          ['fake-1.0.tar', 'fake-1.0.tar.gz'] )
 
137
 
 
138
        os.remove(join(dist_folder, 'fake-1.0.tar'))
 
139
        os.remove(join(dist_folder, 'fake-1.0.tar.gz'))
 
140
 
 
141
        # now trying a tar then a gztar
 
142
        cmd.formats = ['tar', 'gztar']
 
143
 
 
144
        cmd.ensure_finalized()
 
145
        cmd.run()
 
146
 
 
147
        result = os.listdir(dist_folder)
 
148
        result.sort()
 
149
        self.assertEquals(result,
 
150
                ['fake-1.0.tar', 'fake-1.0.tar.gz'])
 
151
 
 
152
    def test_add_defaults(self):
 
153
 
 
154
        # http://bugs.python.org/issue2279
 
155
 
 
156
        # add_default should also include
 
157
        # data_files and package_data
 
158
        dist, cmd = self.get_cmd()
 
159
 
 
160
        # filling data_files by pointing files
 
161
        # in package_data
 
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'), '#')
 
166
 
 
167
        # adding some data in data_files
 
168
        data_dir = join(self.tmp_dir, 'data')
 
169
        os.mkdir(data_dir)
 
170
        self.write_file((data_dir, 'data.dt'), '#')
 
171
        some_dir = join(self.tmp_dir, 'some')
 
172
        os.mkdir(some_dir)
 
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'), '#')
 
176
 
 
177
        dist.data_files = [('data', ['data/data.dt',
 
178
                                     'inroot.txt',
 
179
                                     'notexisting']),
 
180
                           'some/file.txt',
 
181
                           'some/other_file.txt']
 
182
 
 
183
        # adding a script
 
184
        script_dir = join(self.tmp_dir, 'scripts')
 
185
        os.mkdir(script_dir)
 
186
        self.write_file((script_dir, 'script.py'), '#')
 
187
        dist.scripts = [join('scripts', 'script.py')]
 
188
 
 
189
        cmd.formats = ['zip']
 
190
        cmd.use_defaults = True
 
191
 
 
192
        cmd.ensure_finalized()
 
193
        cmd.run()
 
194
 
 
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'])
 
199
 
 
200
        zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
 
201
        try:
 
202
            content = zip_file.namelist()
 
203
        finally:
 
204
            zip_file.close()
 
205
 
 
206
        # making sure everything was added
 
207
        self.assertEquals(len(content), 11)
 
208
 
 
209
        # checking the MANIFEST
 
210
        manifest = open(join(self.tmp_dir, 'MANIFEST')).read()
 
211
        self.assertEquals(manifest, MANIFEST % {'sep': os.sep})
 
212
 
 
213
def test_suite():
 
214
    return unittest.makeSuite(sdistTestCase)
 
215
 
 
216
if __name__ == "__main__":
 
217
    unittest.main(defaultTest="test_suite")