blob: 804fb1355f28eeedf86e1babf9ac1e49a07a2bff [file] [log] [blame]
Tarek Ziadéf0721222009-02-28 10:16:43 +00001"""Tests for distutils.command.bdist_rpm."""
2
3import unittest
4import sys
5import os
6import tempfile
7import shutil
Éric Araujob344dd02011-02-02 21:38:37 +00008from test.support import run_unittest
Tarek Ziadéf0721222009-02-28 10:16:43 +00009
10from distutils.core import Distribution
11from distutils.command.bdist_rpm import bdist_rpm
12from distutils.tests import support
13from distutils.spawn import find_executable
14from distutils import spawn
15from distutils.errors import DistutilsExecError
16
17SETUP_PY = """\
18from distutils.core import setup
19import foo
20
21setup(name='foo', version='0.1', py_modules=['foo'],
22 url='xxx', author='xxx', author_email='xxx')
23
24"""
25
26class BuildRpmTestCase(support.TempdirManager,
27 support.LoggingSilencer,
28 unittest.TestCase):
29
30 def setUp(self):
31 super(BuildRpmTestCase, self).setUp()
32 self.old_location = os.getcwd()
Tarek Ziadéf456a152009-10-18 12:41:30 +000033 self.old_sys_argv = sys.argv, sys.argv[:]
Tarek Ziadéf0721222009-02-28 10:16:43 +000034
35 def tearDown(self):
36 os.chdir(self.old_location)
Tarek Ziadéf456a152009-10-18 12:41:30 +000037 sys.argv = self.old_sys_argv[0]
38 sys.argv[:] = self.old_sys_argv[1]
Tarek Ziadéf0721222009-02-28 10:16:43 +000039 super(BuildRpmTestCase, self).tearDown()
40
41 def test_quiet(self):
42
43 # XXX I am unable yet to make this test work without
44 # spurious sdtout/stderr output under Mac OS X
45 if sys.platform != 'linux2':
46 return
47
48 # this test will run only if the rpm commands are found
49 if (find_executable('rpm') is None or
50 find_executable('rpmbuild') is None):
51 return
52
53 # let's create a package
54 tmp_dir = self.mkdtemp()
55 pkg_dir = os.path.join(tmp_dir, 'foo')
56 os.mkdir(pkg_dir)
57 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
58 self.write_file((pkg_dir, 'foo.py'), '#')
59 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
60 self.write_file((pkg_dir, 'README'), '')
61
62 dist = Distribution({'name': 'foo', 'version': '0.1',
63 'py_modules': ['foo'],
64 'url': 'xxx', 'author': 'xxx',
65 'author_email': 'xxx'})
66 dist.script_name = 'setup.py'
67 os.chdir(pkg_dir)
68
69 sys.argv = ['setup.py']
70 cmd = bdist_rpm(dist)
71 cmd.fix_python = True
72
73 # running in quiet mode
74 cmd.quiet = 1
75 cmd.ensure_finalized()
76 cmd.run()
77
78 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Georg Brandlab91fde2009-08-13 08:51:18 +000079 self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
Tarek Ziadéf0721222009-02-28 10:16:43 +000080
81 def test_no_optimize_flag(self):
82
83 # XXX I am unable yet to make this test work without
84 # spurious sdtout/stderr output under Mac OS X
85 if sys.platform != 'linux2':
86 return
87
88 # http://bugs.python.org/issue1533164
89 # this test will run only if the rpm command is found
90 if (find_executable('rpm') is None or
91 find_executable('rpmbuild') is None):
92 return
93
94 # let's create a package that brakes bdist_rpm
95 tmp_dir = self.mkdtemp()
96 pkg_dir = os.path.join(tmp_dir, 'foo')
97 os.mkdir(pkg_dir)
98 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
99 self.write_file((pkg_dir, 'foo.py'), '#')
100 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
101 self.write_file((pkg_dir, 'README'), '')
102
103 dist = Distribution({'name': 'foo', 'version': '0.1',
104 'py_modules': ['foo'],
105 'url': 'xxx', 'author': 'xxx',
106 'author_email': 'xxx'})
107 dist.script_name = 'setup.py'
108 os.chdir(pkg_dir)
109
110 sys.argv = ['setup.py']
111 cmd = bdist_rpm(dist)
112 cmd.fix_python = True
113
Tarek Ziadéf0721222009-02-28 10:16:43 +0000114 cmd.quiet = 1
115 cmd.ensure_finalized()
116 cmd.run()
117
118 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Georg Brandlab91fde2009-08-13 08:51:18 +0000119 self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
Tarek Ziadéf0721222009-02-28 10:16:43 +0000120 os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))
121
Tarek Ziadéf0721222009-02-28 10:16:43 +0000122def test_suite():
123 return unittest.makeSuite(BuildRpmTestCase)
124
125if __name__ == '__main__':
Éric Araujob344dd02011-02-02 21:38:37 +0000126 run_unittest(test_suite())