~bzr-pqm/bzr/bzr.dev

2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2005, 2006 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1692.7.6 by Martin Pool
[patch] force deletion of trees containing readonly files (alexander)
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1692.7.6 by Martin Pool
[patch] force deletion of trees containing readonly files (alexander)
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1692.7.6 by Martin Pool
[patch] force deletion of trees containing readonly files (alexander)
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1912.1.3 by Martin Pool
Add tests for build/install targets
17
"""Test for setup.py build process"""
1185.33.89 by Martin Pool
[patch] add a selftest test that the setup build script works (Alexander Belchenko)
18
19
import os
1185.31.59 by John Arbash Meinel
Switch to sys.executable instead of just 'python' to make sure to run the right executable
20
import sys
21
import subprocess
1185.33.89 by Martin Pool
[patch] add a selftest test that the setup build script works (Alexander Belchenko)
22
import shutil
1540.3.32 by Martin Pool
Clean up test_setup code; avoid possible pipe jam
23
from tempfile import TemporaryFile
1185.33.89 by Martin Pool
[patch] add a selftest test that the setup build script works (Alexander Belchenko)
24
1912.1.3 by Martin Pool
Add tests for build/install targets
25
import bzrlib
1911.1.2 by Alexander Belchenko
test_setup: skip test if there is no 'setup.py' in current directory.
26
from bzrlib.tests import TestCase, TestSkipped
1692.7.6 by Martin Pool
[patch] force deletion of trees containing readonly files (alexander)
27
import bzrlib.osutils as osutils
1185.33.89 by Martin Pool
[patch] add a selftest test that the setup build script works (Alexander Belchenko)
28
1912.1.3 by Martin Pool
Add tests for build/install targets
29
# XXX: This clobbers the build directory in the real source tree; it'd be nice
30
# to avoid that.
31
#
32
# TODO: Run bzr from the installed copy to see if it works.  Really we need to
33
# run something that exercises every module, just starting it may not detect
34
# some missing modules.
35
#
36
# TODO: Check that the version numbers are in sync.  (Or avoid this...)
1540.3.31 by Martin Pool
Fix up TestSetup.tearDown - shouldn't try to remove nonexistent directory
37
1185.33.89 by Martin Pool
[patch] add a selftest test that the setup build script works (Alexander Belchenko)
38
class TestSetup(TestCase):
39
1912.1.3 by Martin Pool
Add tests for build/install targets
40
    def test_build_and_install(self):
1540.3.31 by Martin Pool
Fix up TestSetup.tearDown - shouldn't try to remove nonexistent directory
41
        """ test cmd `python setup.py build`
1821.1.1 by Alexander Belchenko
win32 installer for bzr.dev.0.9
42
1861.2.15 by Alexander Belchenko
English phrases corrected as John Meinel suggested.
43
        This tests that the build process and man generator run correctly.
44
        It also can catch new subdirectories that weren't added to setup.py.
1540.3.31 by Martin Pool
Fix up TestSetup.tearDown - shouldn't try to remove nonexistent directory
45
        """
1911.1.2 by Alexander Belchenko
test_setup: skip test if there is no 'setup.py' in current directory.
46
        if not os.path.isfile('setup.py'):
47
            raise TestSkipped('There is no setup.py file in current directory')
1993.2.1 by John Arbash Meinel
Skip the setup tests if they don't have distutils.
48
        try:
1995.1.2 by Matthieu Moy
Test for the presence of the Makefile
49
            import distutils.sysconfig
50
            makefile_path = distutils.sysconfig.get_makefile_filename()
51
            if not os.path.exists(makefile_path):
52
                raise TestSkipped('You must have the python Makefile installed to run this test.'
53
                                  ' Usually this can be found by installing "python-dev"')
1993.2.1 by John Arbash Meinel
Skip the setup tests if they don't have distutils.
54
        except ImportError:
55
            raise TestSkipped('You must have distutils installed to run this test.'
56
                              ' Usually this can be found by installing "python-dev"')
1540.3.32 by Martin Pool
Clean up test_setup code; avoid possible pipe jam
57
        self.log('test_build running in %s' % os.getcwd())
3638.3.2 by Vincent Ladeuil
Fix all calls to tempfile.mkdtemp to osutils.mkdtemp.
58
        install_dir = osutils.mkdtemp()
1912.1.3 by Martin Pool
Add tests for build/install targets
59
        # setup.py must be run from the root source directory, but the tests
60
        # are not necessarily invoked from there
61
        self.source_dir = os.path.dirname(os.path.dirname(bzrlib.__file__))
1540.3.32 by Martin Pool
Clean up test_setup code; avoid possible pipe jam
62
        try:
1912.1.3 by Martin Pool
Add tests for build/install targets
63
            self.run_setup(['clean'])
64
            # build is implied by install
65
            ## self.run_setup(['build'])
66
            self.run_setup(['install', '--prefix', install_dir])
67
            self.run_setup(['clean'])
1540.3.32 by Martin Pool
Clean up test_setup code; avoid possible pipe jam
68
        finally:
1912.1.3 by Martin Pool
Add tests for build/install targets
69
            osutils.rmtree(install_dir)
70
71
    def run_setup(self, args):
72
        args = [sys.executable, './setup.py', ] + args
73
        self.log('source base directory: %s', self.source_dir)
74
        self.log('args: %r', args)
75
        p = subprocess.Popen(args,
76
                             cwd=self.source_dir,
77
                             stdout=self._log_file,
78
                             stderr=self._log_file,
79
                             )
80
        s = p.communicate()
81
        self.assertEqual(0, p.returncode,
82
                         'invocation of %r failed' % args)