~bzr-pqm/bzr/bzr.dev

2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
1
# Copyright (C) 2005, 2007 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
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
19
import bzrlib.transport
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
20
from bzrlib import (
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
21
    benchmarks,
4636.2.1 by Robert Collins
Test selftest --list-only and --randomize options using more precisely layers.
22
    tests,
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
23
    )
2394.2.3 by Ian Clatworthy
Backed out test junk
24
from bzrlib.errors import ParamikoNotPresent
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.
25
from bzrlib.tests import (
4165.1.1 by Robert Collins
Add builtin subunit support.
26
                          SubUnitFeature,
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.
27
                          TestCase,
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
28
                          TestCaseInTempDir,
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.
29
                          TestSkipped,
30
                          )
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
31
32
33
class SelfTestPatch:
34
35
    def get_params_passed_to_core(self, cmdline):
36
        params = []
37
        def selftest(*args, **kwargs):
38
            """Capture the arguments selftest was run with."""
39
            params.append((args, kwargs))
40
            return True
41
        # Yes this prevents using threads to run the test suite in parallel,
42
        # however we don't have a clean dependency injector for commands, 
43
        # and even if we did - we'd still be testing that the glue is wired
44
        # up correctly. XXX: TODO: Solve this testing problem.
45
        original_selftest = tests.selftest
46
        tests.selftest = selftest
47
        try:
48
            self.run_bzr(cmdline)
49
            return params[0]
50
        finally:
51
            tests.selftest = original_selftest
52
53
54
class TestOptionsWritingToDisk(TestCaseInTempDir, SelfTestPatch):
55
56
    def test_benchmark_runs_benchmark_tests(self):
57
        """selftest --benchmark should change the suite factory."""
58
        params = self.get_params_passed_to_core('selftest --benchmark')
59
        self.assertEqual(benchmarks.test_suite,
60
            params[1]['test_suite_factory'])
61
        self.assertNotEqual(None, params[1]['bench_history'])
62
        benchfile = open(".perf_history", "rt")
63
        try:
64
            lines = benchfile.readlines()
65
        finally:
66
            benchfile.close()
67
        # Because we don't run the actual test code no output is made to the
68
        # file.
69
        self.assertEqual(0, len(lines))
70
71
72
class TestOptions(TestCase, SelfTestPatch):
73
74
    def test_load_list(self):
75
        params = self.get_params_passed_to_core('selftest --load-list foo')
76
        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.
77
78
    def test_transport_set_to_sftp(self):
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
79
        # Test that we can pass a transport to the selftest core - sftp
80
        # version.
1551.2.47 by abentley
Fixed test_selftest's use of sftp
81
        try:
82
            import bzrlib.transport.sftp
83
        except ParamikoNotPresent:
84
            raise TestSkipped("Paramiko not present")
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
85
        params = self.get_params_passed_to_core('selftest --transport=sftp')
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.
86
        self.assertEqual(bzrlib.transport.sftp.SFTPAbsoluteServer,
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
87
            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.
88
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
89
    def test_transport_set_to_memory(self):
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
90
        # Test that we can pass a transport to the selftest core - memory
91
        # version.
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
92
        import bzrlib.transport.memory
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
93
        params = self.get_params_passed_to_core('selftest --transport=memory')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
94
        self.assertEqual(bzrlib.transport.memory.MemoryServer,
4636.2.2 by Robert Collins
Fix selftest tests for --transport to test each layer precisely.
95
            params[1]["transport"])
96
97
    def test_parameters_passed_to_core(self):
98
        params = self.get_params_passed_to_core('selftest --list-only')
99
        self.assertTrue("list_only" in params[1])
100
        params = self.get_params_passed_to_core('selftest --list-only selftest')
101
        self.assertTrue("list_only" in params[1])
102
        params = self.get_params_passed_to_core(['selftest', '--list-only',
103
            '--exclude', 'selftest'])
104
        self.assertTrue("list_only" in params[1])
105
        params = self.get_params_passed_to_core(['selftest', '--list-only',
106
            'selftest', '--randomize', 'now'])
107
        self.assertSubset(["list_only", "random_seed"], params[1])
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
108
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
109
    def test_starting_with(self):
110
        params = self.get_params_passed_to_core('selftest --starting-with foo')
111
        self.assertEqual(['foo'], params[1]['starting_with'])
112
113
    def test_starting_with_multiple_argument(self):
114
        params = self.get_params_passed_to_core(
115
            'selftest --starting-with foo --starting-with bar')
116
        self.assertEqual(['foo', 'bar'], params[1]['starting_with'])
117
4165.1.1 by Robert Collins
Add builtin subunit support.
118
    def test_subunit(self):
119
        self.requireFeature(SubUnitFeature)
4636.2.3 by Robert Collins
Layer tests for selftest --subunit better.
120
        params = self.get_params_passed_to_core('selftest --subunit')
121
        self.assertEqual(tests.SubUnitBzrRunner, params[1]['runner_class'])
4165.1.1 by Robert Collins
Add builtin subunit support.
122
4636.2.4 by Robert Collins
Move selftest internals tests out of blackbox test space - they are not testing our selftest command line.
123
    def _parse_test_list(self, lines, newlines_in_header=0):
2394.2.5 by Ian Clatworthy
list-only working, include test not
124
        "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.
125
        in_header = newlines_in_header != 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
126
        in_footer = False
127
        header = []
128
        body = []
2394.2.6 by Ian Clatworthy
completed blackbox tests
129
        footer = []
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
130
        header_newlines_found = 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
131
        for line in lines:
132
            if in_header:
133
                if line == '':
2394.2.6 by Ian Clatworthy
completed blackbox tests
134
                    header_newlines_found += 1
135
                    if header_newlines_found >= newlines_in_header:
136
                        in_header = False
137
                        continue
138
                header.append(line)
2394.2.5 by Ian Clatworthy
list-only working, include test not
139
            elif not in_footer:
140
                if line.startswith('-------'):
141
                    in_footer = True
142
                else:
143
                    body.append(line)
144
            else:
145
                footer.append(line)
146
        # If the last body line is blank, drop it off the list
147
        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
148
            body.pop()
2394.2.5 by Ian Clatworthy
list-only working, include test not
149
        return (header,body,footer)
150
151
    def test_list_only(self):
4636.2.1 by Robert Collins
Test selftest --list-only and --randomize options using more precisely layers.
152
        # check that bzr selftest --list-only outputs no ui noise
153
        def selftest(*args, **kwargs):
154
            """Capture the arguments selftest was run with."""
155
            return True
156
        def outputs_nothing(cmdline):
157
            out,err = self.run_bzr(cmdline)
158
            (header,body,footer) = self._parse_test_list(out.splitlines())
159
            num_tests = len(body)
160
            self.assertLength(0, header)
161
            self.assertLength(0, footer)
162
            self.assertEqual('', err)
163
        # Yes this prevents using threads to run the test suite in parallel,
164
        # however we don't have a clean dependency injector for commands, 
165
        # and even if we did - we'd still be testing that the glue is wired
166
        # up correctly. XXX: TODO: Solve this testing problem.
167
        original_selftest = tests.selftest
168
        tests.selftest = selftest
169
        try:
170
            outputs_nothing('selftest --list-only')
171
            outputs_nothing('selftest --list-only selftest')
172
            outputs_nothing(['selftest', '--list-only', '--exclude', 'selftest'])
173
        finally:
174
            tests.selftest = original_selftest
4641.3.3 by Robert Collins
Enable --lsprof-tests on bzr selftest.
175
176
    def test_lsprof_tests(self):
177
        params = self.get_params_passed_to_core('selftest --lsprof-tests')
178
        self.assertEqual(True, params[1]["lsprof_tests"])