~bzr-pqm/bzr/bzr.dev

4988.10.5 by John Arbash Meinel
Merge bzr.dev 5021 to resolve NEWS
1
# Copyright (C) 2006-2010 Canonical Ltd
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2
#
3
# This program is free software; you can redistribute it and/or modify
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
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.
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
7
#
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.
12
#
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
16
17
"""UI tests for the test framework."""
18
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
19
from bzrlib import (
4636.2.1 by Robert Collins
Test selftest --list-only and --randomize options using more precisely layers.
20
    tests,
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
21
    )
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
22
from bzrlib.tests import (
4797.11.2 by Vincent Ladeuil
Stop requiring testtools for sftp use.
23
    features,
24
    )
5017.3.45 by Vincent Ladeuil
Move MemoryServer back into bzrlib.transport.memory as it's needed as soon as a MemoryTransport is used. Add a NEWS entry.
25
from bzrlib.transport import memory
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
26
27
class SelfTestPatch:
28
29
    def get_params_passed_to_core(self, cmdline):
30
        params = []
31
        def selftest(*args, **kwargs):
32
            """Capture the arguments selftest was run with."""
33
            params.append((args, kwargs))
34
            return True
35
        # Yes this prevents using threads to run the test suite in parallel,
36
        # however we don't have a clean dependency injector for commands, 
37
        # and even if we did - we'd still be testing that the glue is wired
38
        # up correctly. XXX: TODO: Solve this testing problem.
39
        original_selftest = tests.selftest
40
        tests.selftest = selftest
41
        try:
42
            self.run_bzr(cmdline)
43
            return params[0]
44
        finally:
45
            tests.selftest = original_selftest
46
47
4797.11.2 by Vincent Ladeuil
Stop requiring testtools for sftp use.
48
class TestOptions(tests.TestCase, SelfTestPatch):
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
49
50
    def test_load_list(self):
51
        params = self.get_params_passed_to_core('selftest --load-list foo')
52
        self.assertEqual('foo', params[1]['load_list'])
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
53
54
    def test_transport_set_to_sftp(self):
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
55
        # Test that we can pass a transport to the selftest core - sftp
56
        # version.
4913.2.16 by John Arbash Meinel
Move bzrlib.tests.ParamikoFeature to bzrlib.tests.features.paramiko
57
        self.requireFeature(features.paramiko)
5158.3.2 by Martin
Fix moved stub_sftp imports
58
        from bzrlib.tests import stub_sftp
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
59
        params = self.get_params_passed_to_core('selftest --transport=sftp')
4797.11.2 by Vincent Ladeuil
Stop requiring testtools for sftp use.
60
        self.assertEqual(stub_sftp.SFTPAbsoluteServer,
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
61
            params[1]["transport"])
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
62
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
63
    def test_transport_set_to_memory(self):
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
64
        # Test that we can pass a transport to the selftest core - memory
65
        # version.
66
        params = self.get_params_passed_to_core('selftest --transport=memory')
5017.3.45 by Vincent Ladeuil
Move MemoryServer back into bzrlib.transport.memory as it's needed as soon as a MemoryTransport is used. Add a NEWS entry.
67
        self.assertEqual(memory.MemoryServer, params[1]["transport"])
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
68
69
    def test_parameters_passed_to_core(self):
70
        params = self.get_params_passed_to_core('selftest --list-only')
71
        self.assertTrue("list_only" in params[1])
72
        params = self.get_params_passed_to_core('selftest --list-only selftest')
73
        self.assertTrue("list_only" in params[1])
74
        params = self.get_params_passed_to_core(['selftest', '--list-only',
75
            '--exclude', 'selftest'])
76
        self.assertTrue("list_only" in params[1])
77
        params = self.get_params_passed_to_core(['selftest', '--list-only',
78
            'selftest', '--randomize', 'now'])
79
        self.assertSubset(["list_only", "random_seed"], params[1])
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
80
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
81
    def test_starting_with(self):
82
        params = self.get_params_passed_to_core('selftest --starting-with foo')
83
        self.assertEqual(['foo'], params[1]['starting_with'])
84
85
    def test_starting_with_multiple_argument(self):
86
        params = self.get_params_passed_to_core(
87
            'selftest --starting-with foo --starting-with bar')
88
        self.assertEqual(['foo', 'bar'], params[1]['starting_with'])
89
4165.1.1 by Robert Collins
Add builtin subunit support.
90
    def test_subunit(self):
4913.2.18 by John Arbash Meinel
Add a _CompatibilityThunkFeature.
91
        self.requireFeature(features.subunit)
4636.2.3 by Robert Collins
Layer tests for selftest --subunit better.
92
        params = self.get_params_passed_to_core('selftest --subunit')
93
        self.assertEqual(tests.SubUnitBzrRunner, params[1]['runner_class'])
4165.1.1 by Robert Collins
Add builtin subunit support.
94
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
95
    def _parse_test_list(self, lines, newlines_in_header=0):
2394.2.5 by Ian Clatworthy
list-only working, include test not
96
        "Parse a list of lines into a tuple of 3 lists (header,body,footer)."
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
97
        in_header = newlines_in_header != 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
98
        in_footer = False
99
        header = []
100
        body = []
2394.2.6 by Ian Clatworthy
completed blackbox tests
101
        footer = []
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
102
        header_newlines_found = 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
103
        for line in lines:
104
            if in_header:
105
                if line == '':
2394.2.6 by Ian Clatworthy
completed blackbox tests
106
                    header_newlines_found += 1
107
                    if header_newlines_found >= newlines_in_header:
108
                        in_header = False
109
                        continue
110
                header.append(line)
2394.2.5 by Ian Clatworthy
list-only working, include test not
111
            elif not in_footer:
112
                if line.startswith('-------'):
113
                    in_footer = True
114
                else:
115
                    body.append(line)
116
            else:
117
                footer.append(line)
118
        # If the last body line is blank, drop it off the list
119
        if len(body) > 0 and body[-1] == '':
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
120
            body.pop()
2394.2.5 by Ian Clatworthy
list-only working, include test not
121
        return (header,body,footer)
122
123
    def test_list_only(self):
4636.2.1 by Robert Collins
Test selftest --list-only and --randomize options using more precisely layers.
124
        # check that bzr selftest --list-only outputs no ui noise
125
        def selftest(*args, **kwargs):
126
            """Capture the arguments selftest was run with."""
127
            return True
128
        def outputs_nothing(cmdline):
129
            out,err = self.run_bzr(cmdline)
130
            (header,body,footer) = self._parse_test_list(out.splitlines())
131
            num_tests = len(body)
132
            self.assertLength(0, header)
133
            self.assertLength(0, footer)
134
            self.assertEqual('', err)
135
        # Yes this prevents using threads to run the test suite in parallel,
136
        # however we don't have a clean dependency injector for commands, 
137
        # and even if we did - we'd still be testing that the glue is wired
138
        # up correctly. XXX: TODO: Solve this testing problem.
139
        original_selftest = tests.selftest
140
        tests.selftest = selftest
141
        try:
142
            outputs_nothing('selftest --list-only')
143
            outputs_nothing('selftest --list-only selftest')
144
            outputs_nothing(['selftest', '--list-only', '--exclude', 'selftest'])
145
        finally:
146
            tests.selftest = original_selftest
4641.3.3 by Robert Collins
Enable --lsprof-tests on bzr selftest.
147
148
    def test_lsprof_tests(self):
149
        params = self.get_params_passed_to_core('selftest --lsprof-tests')
150
        self.assertEqual(True, params[1]["lsprof_tests"])