/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
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
4165.1.1 by Robert Collins
Add builtin subunit support.
19
from cStringIO import StringIO
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
20
import os
2394.2.5 by Ian Clatworthy
list-only working, include test not
21
import re
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
22
import signal
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
23
import sys
4165.1.1 by Robert Collins
Add builtin subunit support.
24
import unittest
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
25
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.
26
import bzrlib
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
27
from bzrlib import (
28
    osutils,
29
    )
2394.2.3 by Ian Clatworthy
Backed out test junk
30
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.
31
from bzrlib.tests import (
4165.1.1 by Robert Collins
Add builtin subunit support.
32
                          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.
33
                          TestCase,
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
34
                          TestCaseInTempDir,
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
35
                          TestCaseWithMemoryTransport,
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
36
                          TestCaseWithTransport,
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
37
                          TestUIFactory,
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.
38
                          TestSkipped,
39
                          )
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
40
from bzrlib.tests.blackbox import ExternalBase
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.
41
42
43
class TestOptions(TestCase):
44
45
    current_test = None
46
47
    def test_transport_set_to_sftp(self):
48
        # test the --transport option has taken effect from within the
49
        # test_transport test
1551.2.47 by abentley
Fixed test_selftest's use of sftp
50
        try:
51
            import bzrlib.transport.sftp
52
        except ParamikoNotPresent:
53
            raise TestSkipped("Paramiko not present")
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.
54
        if TestOptions.current_test != "test_transport_set_to_sftp":
55
            return
56
        self.assertEqual(bzrlib.transport.sftp.SFTPAbsoluteServer,
57
                         bzrlib.tests.default_transport)
58
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
59
    def test_transport_set_to_memory(self):
60
        # test the --transport option has taken effect from within the
61
        # test_transport test
62
        import bzrlib.transport.memory
63
        if TestOptions.current_test != "test_transport_set_to_memory":
64
            return
65
        self.assertEqual(bzrlib.transport.memory.MemoryServer,
66
                         bzrlib.tests.default_transport)
67
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.
68
    def test_transport(self):
69
        # test that --transport=sftp works
1551.2.47 by abentley
Fixed test_selftest's use of sftp
70
        try:
71
            import bzrlib.transport.sftp
72
        except ParamikoNotPresent:
73
            raise TestSkipped("Paramiko not present")
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.
74
        old_transport = bzrlib.tests.default_transport
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
75
        old_root = TestCaseWithMemoryTransport.TEST_ROOT
76
        TestCaseWithMemoryTransport.TEST_ROOT = None
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
        try:
78
            TestOptions.current_test = "test_transport_set_to_sftp"
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
79
            stdout = self.run_bzr(
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
80
                'selftest --transport=sftp test_transport_set_to_sftp')[0]
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
81
            self.assertContainsRe(stdout, 'Ran 1 test')
82
            self.assertEqual(old_transport, bzrlib.tests.default_transport)
83
84
            TestOptions.current_test = "test_transport_set_to_memory"
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
85
            stdout = self.run_bzr(
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
86
                'selftest --transport=memory test_transport_set_to_memory')[0]
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.
87
            self.assertContainsRe(stdout, 'Ran 1 test')
88
            self.assertEqual(old_transport, bzrlib.tests.default_transport)
89
        finally:
90
            bzrlib.tests.default_transport = old_transport
91
            TestOptions.current_test = None
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
92
            TestCaseWithMemoryTransport.TEST_ROOT = old_root
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
93
4165.1.1 by Robert Collins
Add builtin subunit support.
94
    def test_subunit(self):
95
        """Passing --subunit results in subunit output."""
96
        self.requireFeature(SubUnitFeature)
97
        from subunit import ProtocolTestCase
98
        stdout = self.run_bzr(
99
            'selftest --subunit --no-plugins '
100
            'tests.test_selftest.SelftestTests.test_import_tests')[0]
101
        stream = StringIO(str(stdout))
102
        test = ProtocolTestCase(stream)
103
        result = unittest.TestResult()
104
        test.run(result)
4271.2.1 by Robert Collins
Move test prelude and suffix output to ExtendedTestResult
105
        self.assertEqual(1, result.testsRun)
4165.1.1 by Robert Collins
Add builtin subunit support.
106
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
107
108
class TestRunBzr(ExternalBase):
109
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
110
    def _run_bzr_core(self, argv, retcode=0, encoding=None, stdin=None,
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
111
                         working_dir=None):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
112
        """Override _run_bzr_core to test how it is invoked by run_bzr.
2552.2.1 by Vincent Ladeuil
apply martin patch
113
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
114
        Attempts to run bzr from inside this class don't actually run it.
115
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
116
        We test how run_bzr actually invokes bzr in another location.
2027.5.3 by John Arbash Meinel
Add docstring to why run_bzr_captured is overridden
117
        Here we only need to test that it is run_bzr passes the right
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
118
        parameters to run_bzr.
2027.5.3 by John Arbash Meinel
Add docstring to why run_bzr_captured is overridden
119
        """
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
120
        self.argv = list(argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
121
        self.retcode = retcode
122
        self.encoding = encoding
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
123
        self.stdin = stdin
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
124
        self.working_dir = working_dir
2292.1.28 by Marius Kruger
* NEWS
125
        return '', ''
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
126
127
    def test_encoding(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
128
        """Test that run_bzr passes encoding to _run_bzr_core"""
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
129
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
130
        self.assertEqual(None, self.encoding)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
131
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
132
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
133
        self.run_bzr('foo bar', encoding='baz')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
134
        self.assertEqual('baz', self.encoding)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
135
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
136
137
    def test_retcode(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
138
        """Test that run_bzr passes retcode to _run_bzr_core"""
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
139
        # Default is retcode == 0
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
140
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
141
        self.assertEqual(0, self.retcode)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
142
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
143
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
144
        self.run_bzr('foo bar', retcode=1)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
145
        self.assertEqual(1, self.retcode)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
146
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
147
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
148
        self.run_bzr('foo bar', retcode=None)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
149
        self.assertEqual(None, self.retcode)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
150
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
151
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
152
        self.run_bzr(['foo', 'bar'], retcode=3)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
153
        self.assertEqual(3, self.retcode)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
154
        self.assertEqual(['foo', 'bar'], self.argv)
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
155
156
    def test_stdin(self):
157
        # test that the stdin keyword to run_bzr is passed through to
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
158
        # _run_bzr_core as-is. We do this by overriding
159
        # _run_bzr_core in this class, and then calling run_bzr,
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
160
        # which is a convenience function for _run_bzr_core, so
1687.1.15 by Robert Collins
Review comments.
161
        # should invoke it.
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
162
        self.run_bzr('foo bar', stdin='gam')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
163
        self.assertEqual('gam', self.stdin)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
164
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
165
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
166
        self.run_bzr('foo bar', stdin='zippy')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
167
        self.assertEqual('zippy', self.stdin)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
168
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
169
170
    def test_working_dir(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
171
        """Test that run_bzr passes working_dir to _run_bzr_core"""
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
172
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
173
        self.assertEqual(None, self.working_dir)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
174
        self.assertEqual(['foo', 'bar'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
175
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
176
        self.run_bzr('foo bar', working_dir='baz')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
177
        self.assertEqual('baz', self.working_dir)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
178
        self.assertEqual(['foo', 'bar'], self.argv)
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
179
2665.1.1 by Michael Hudson
make run_bzr stricter about the keyword arguments it takes.
180
    def test_reject_extra_keyword_arguments(self):
181
        self.assertRaises(TypeError, self.run_bzr, "foo bar",
182
                          error_regex=['error message'])
183
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
184
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
185
class TestBenchmarkTests(TestCaseWithTransport):
186
187
    def test_benchmark_runs_benchmark_tests(self):
188
        """bzr selftest --benchmark should not run the default test suite."""
189
        # We test this by passing a regression test name to --benchmark, which
3111.1.23 by Vincent Ladeuil
Make HTTP/1.1 the default implementation reveals one more bug.
190
        # should result in 0 tests run.
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
191
        old_root = TestCaseWithMemoryTransport.TEST_ROOT
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
192
        try:
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
193
            TestCaseWithMemoryTransport.TEST_ROOT = None
2552.2.4 by Vincent Ladeuil
Merge bzr.dev and resolve conflits. (good use case for an enhanced merge
194
            out, err = self.run_bzr('selftest --benchmark'
195
                                    ' workingtree_implementations')
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
196
        finally:
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
197
            TestCaseWithMemoryTransport.TEST_ROOT = old_root
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
198
        self.assertContainsRe(out, 'Ran 0 tests.*\n\nOK')
4271.2.3 by Vincent Ladeuil
Fix failure, add tests.
199
        self.assertContainsRe(out, 'tests passed\n')
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
200
        benchfile = open(".perf_history", "rt")
201
        try:
202
            lines = benchfile.readlines()
203
        finally:
204
            benchfile.close()
205
        self.assertEqual(1, len(lines))
206
        self.assertContainsRe(lines[0], "--date [0-9.]+")
207
208
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
209
class TestRunBzrCaptured(ExternalBase):
210
211
    def apply_redirected(self, stdin=None, stdout=None, stderr=None,
212
                         a_callable=None, *args, **kwargs):
213
        self.stdin = stdin
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
214
        self.factory_stdin = getattr(bzrlib.ui.ui_factory, "stdin", None)
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
215
        self.factory = bzrlib.ui.ui_factory
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
216
        self.working_dir = osutils.getcwd()
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
217
        stdout.write('foo\n')
218
        stderr.write('bar\n')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
219
        return 0
220
221
    def test_stdin(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
222
        # test that the stdin keyword to _run_bzr_core is passed through to
1687.1.15 by Robert Collins
Review comments.
223
        # apply_redirected as a StringIO. We do this by overriding
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
224
        # apply_redirected in this class, and then calling _run_bzr_core,
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
225
        # which calls apply_redirected.
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
226
        self.run_bzr(['foo', 'bar'], stdin='gam')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
227
        self.assertEqual('gam', self.stdin.read())
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
228
        self.assertTrue(self.stdin is self.factory_stdin)
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
229
        self.run_bzr(['foo', 'bar'], stdin='zippy')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
230
        self.assertEqual('zippy', self.stdin.read())
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
231
        self.assertTrue(self.stdin is self.factory_stdin)
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
232
233
    def test_ui_factory(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
234
        # each invocation of self.run_bzr should get its
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
235
        # own UI factory, which is an instance of TestUIFactory,
236
        # with stdin, stdout and stderr attached to the stdin,
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
237
        # stdout and stderr of the invoked run_bzr
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
238
        current_factory = bzrlib.ui.ui_factory
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
239
        self.run_bzr(['foo'])
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
240
        self.failIf(current_factory is self.factory)
241
        self.assertNotEqual(sys.stdout, self.factory.stdout)
242
        self.assertNotEqual(sys.stderr, self.factory.stderr)
243
        self.assertEqual('foo\n', self.factory.stdout.getvalue())
244
        self.assertEqual('bar\n', self.factory.stderr.getvalue())
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
245
        self.assertIsInstance(self.factory, TestUIFactory)
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
246
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
247
    def test_working_dir(self):
248
        self.build_tree(['one/', 'two/'])
249
        cwd = osutils.getcwd()
250
251
        # Default is to work in the current directory
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
252
        self.run_bzr(['foo', 'bar'])
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
253
        self.assertEqual(cwd, self.working_dir)
254
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
255
        self.run_bzr(['foo', 'bar'], working_dir=None)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
256
        self.assertEqual(cwd, self.working_dir)
257
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
258
        # The function should be run in the alternative directory
259
        # but afterwards the current working dir shouldn't be changed
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
260
        self.run_bzr(['foo', 'bar'], working_dir='one')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
261
        self.assertNotEqual(cwd, self.working_dir)
262
        self.assertEndsWith(self.working_dir, 'one')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
263
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
264
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
265
        self.run_bzr(['foo', 'bar'], working_dir='two')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
266
        self.assertNotEqual(cwd, self.working_dir)
267
        self.assertEndsWith(self.working_dir, 'two')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
268
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
269
270
271
class TestRunBzrSubprocess(TestCaseWithTransport):
272
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
273
    def test_run_bzr_subprocess(self):
3565.2.1 by Christophe Troestler
(trivial) Corrected typos.
274
        """The run_bzr_helper_external command behaves nicely."""
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
275
        result = self.run_bzr_subprocess('--version')
2665.4.1 by Aaron Bentley
teach run_bzr_subprocess to accept either a list of strings or a string
276
        result = self.run_bzr_subprocess(['--version'])
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
277
        result = self.run_bzr_subprocess('--version', retcode=None)
278
        self.assertContainsRe(result[0], 'is free software')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
279
        self.assertRaises(AssertionError, self.run_bzr_subprocess,
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
280
                          '--versionn')
281
        result = self.run_bzr_subprocess('--versionn', retcode=3)
282
        result = self.run_bzr_subprocess('--versionn', retcode=None)
283
        self.assertContainsRe(result[1], 'unknown command')
2665.4.2 by Aaron Bentley
Update from review
284
        err = self.run_bzr_subprocess(['merge', '--merge-type',
285
                                      'magic merge'], retcode=3)[1]
2221.4.15 by Aaron Bentley
Use RegistryOption for merge type
286
        self.assertContainsRe(err, 'Bad value "magic merge" for option'
287
                              ' "merge-type"')
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
288
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
289
    def test_run_bzr_subprocess_env(self):
290
        """run_bzr_subprocess can set environment variables in the child only.
291
292
        These changes should not change the running process, only the child.
293
        """
294
        # The test suite should unset this variable
295
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
296
        out, err = self.run_bzr_subprocess('whoami', env_changes={
297
                                            'BZR_EMAIL':'Joe Foo <joe@foo.com>'
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
298
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
299
        self.assertEqual('', err)
300
        self.assertEqual('Joe Foo <joe@foo.com>\n', out)
301
        # And it should not be modified
302
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
303
304
        # Do it again with a different address, just to make sure
305
        # it is actually changing
306
        out, err = self.run_bzr_subprocess('whoami', env_changes={
307
                                            'BZR_EMAIL':'Barry <bar@foo.com>'
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
308
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
309
        self.assertEqual('', err)
310
        self.assertEqual('Barry <bar@foo.com>\n', out)
311
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
312
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
313
    def test_run_bzr_subprocess_env_del(self):
314
        """run_bzr_subprocess can remove environment variables too."""
315
        # Create a random email, so we are sure this won't collide
316
        rand_bzr_email = 'John Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
317
        rand_email = 'Jane Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
318
        os.environ['BZR_EMAIL'] = rand_bzr_email
319
        os.environ['EMAIL'] = rand_email
320
        try:
321
            # By default, the child will inherit the current env setting
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
322
            out, err = self.run_bzr_subprocess('whoami', universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
323
            self.assertEqual('', err)
324
            self.assertEqual(rand_bzr_email + '\n', out)
325
326
            # Now that BZR_EMAIL is not set, it should fall back to EMAIL
327
            out, err = self.run_bzr_subprocess('whoami',
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
328
                                               env_changes={'BZR_EMAIL':None},
329
                                               universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
330
            self.assertEqual('', err)
331
            self.assertEqual(rand_email + '\n', out)
332
333
            # This switches back to the default email guessing logic
334
            # Which shouldn't match either of the above addresses
335
            out, err = self.run_bzr_subprocess('whoami',
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
336
                           env_changes={'BZR_EMAIL':None, 'EMAIL':None},
337
                           universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
338
339
            self.assertEqual('', err)
340
            self.assertNotEqual(rand_bzr_email + '\n', out)
341
            self.assertNotEqual(rand_email + '\n', out)
342
        finally:
343
            # TestCase cleans up BZR_EMAIL, and EMAIL at startup
344
            del os.environ['BZR_EMAIL']
345
            del os.environ['EMAIL']
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
346
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
347
    def test_run_bzr_subprocess_env_del_missing(self):
348
        """run_bzr_subprocess won't fail if deleting a nonexistant env var"""
349
        self.failIf('NON_EXISTANT_ENV_VAR' in os.environ)
350
        out, err = self.run_bzr_subprocess('rocks',
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
351
                        env_changes={'NON_EXISTANT_ENV_VAR':None},
352
                        universal_newlines=True)
2227.4.1 by v.ladeuil+lp at free
Fix #78026.
353
        self.assertEqual('It sure does!\n', out)
1963.1.11 by John Arbash Meinel
Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests
354
        self.assertEqual('', err)
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
355
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
356
    def test_run_bzr_subprocess_working_dir(self):
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
357
        """Test that we can specify the working dir for the child"""
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
358
        cwd = osutils.getcwd()
359
360
        self.make_branch_and_tree('.')
361
        self.make_branch_and_tree('one')
362
        self.make_branch_and_tree('two')
363
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
364
        def get_root(**kwargs):
365
            """Spawn a process to get the 'root' of the tree.
366
367
            You can pass in arbitrary new arguments. This just makes
368
            sure that the returned path doesn't have trailing whitespace.
369
            """
370
            return self.run_bzr_subprocess('root', **kwargs)[0].rstrip()
371
372
        self.assertEqual(cwd, get_root())
373
        self.assertEqual(cwd, get_root(working_dir=None))
374
        # Has our path changed?
375
        self.assertEqual(cwd, osutils.getcwd())
376
377
        dir1 = get_root(working_dir='one')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
378
        self.assertEndsWith(dir1, 'one')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
379
        self.assertEqual(cwd, osutils.getcwd())
380
381
        dir2 = get_root(working_dir='two')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
382
        self.assertEndsWith(dir2, 'two')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
383
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
384
385
2067.2.2 by John Arbash Meinel
Review comments from Robert
386
class _DontSpawnProcess(Exception):
387
    """A simple exception which just allows us to skip unnecessary steps"""
388
389
390
class TestRunBzrSubprocessCommands(TestCaseWithTransport):
391
392
    def _popen(self, *args, **kwargs):
393
        """Record the command that is run, so that we can ensure it is correct"""
394
        self._popen_args = args
395
        self._popen_kwargs = kwargs
396
        raise _DontSpawnProcess()
397
398
    def test_run_bzr_subprocess_no_plugins(self):
2665.4.1 by Aaron Bentley
teach run_bzr_subprocess to accept either a list of strings or a string
399
        self.assertRaises(_DontSpawnProcess, self.run_bzr_subprocess, '')
2067.2.2 by John Arbash Meinel
Review comments from Robert
400
        command = self._popen_args[0]
401
        self.assertEqual(sys.executable, command[0])
402
        self.assertEqual(self.get_bzr_path(), command[1])
403
        self.assertEqual(['--no-plugins'], command[2:])
404
405
    def test_allow_plugins(self):
2067.2.4 by John Arbash Meinel
fixup one test
406
        self.assertRaises(_DontSpawnProcess,
2665.4.1 by Aaron Bentley
teach run_bzr_subprocess to accept either a list of strings or a string
407
                          self.run_bzr_subprocess, '', allow_plugins=True)
2067.2.2 by John Arbash Meinel
Review comments from Robert
408
        command = self._popen_args[0]
409
        self.assertEqual([], command[2:])
410
411
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
412
class TestBzrSubprocess(TestCaseWithTransport):
413
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
414
    def test_start_and_stop_bzr_subprocess(self):
415
        """We can start and perform other test actions while that process is
416
        still alive.
417
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
418
        process = self.start_bzr_subprocess(['--version'])
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
419
        result = self.finish_bzr_subprocess(process)
420
        self.assertContainsRe(result[0], 'is free software')
421
        self.assertEqual('', result[1])
422
423
    def test_start_and_stop_bzr_subprocess_with_error(self):
424
        """finish_bzr_subprocess allows specification of the desired exit code.
425
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
426
        process = self.start_bzr_subprocess(['--versionn'])
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
427
        result = self.finish_bzr_subprocess(process, retcode=3)
428
        self.assertEqual('', result[0])
429
        self.assertContainsRe(result[1], 'unknown command')
430
431
    def test_start_and_stop_bzr_subprocess_ignoring_retcode(self):
432
        """finish_bzr_subprocess allows the exit code to be ignored."""
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
433
        process = self.start_bzr_subprocess(['--versionn'])
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
434
        result = self.finish_bzr_subprocess(process, retcode=None)
435
        self.assertEqual('', result[0])
436
        self.assertContainsRe(result[1], 'unknown command')
437
438
    def test_start_and_stop_bzr_subprocess_with_unexpected_retcode(self):
439
        """finish_bzr_subprocess raises self.failureException if the retcode is
440
        not the expected one.
441
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
442
        process = self.start_bzr_subprocess(['--versionn'])
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
443
        self.assertRaises(self.failureException, self.finish_bzr_subprocess,
2581.1.2 by Martin Pool
Remove unnecessary retcode=0 to run_bzr calls
444
                          process)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
445
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
446
    def test_start_and_stop_bzr_subprocess_send_signal(self):
447
        """finish_bzr_subprocess raises self.failureException if the retcode is
448
        not the expected one.
449
        """
1910.17.9 by Andrew Bennetts
Add skip_if_plan_to_signal flag to start_bzr_subprocess.
450
        process = self.start_bzr_subprocess(['wait-until-signalled'],
451
                                            skip_if_plan_to_signal=True)
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
452
        self.assertEqual('running\n', process.stdout.readline())
453
        result = self.finish_bzr_subprocess(process, send_signal=signal.SIGINT,
454
                                            retcode=3)
455
        self.assertEqual('', result[0])
456
        self.assertEqual('bzr: interrupted\n', result[1])
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
457
458
    def test_start_and_stop_working_dir(self):
459
        cwd = osutils.getcwd()
460
461
        self.make_branch_and_tree('one')
462
463
        process = self.start_bzr_subprocess(['root'], working_dir='one')
2156.1.1 by v.ladeuil+lp at free
Make the test compatible with windows.
464
        result = self.finish_bzr_subprocess(process, universal_newlines=True)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
465
        self.assertEndsWith(result[0], 'one\n')
466
        self.assertEqual('', result[1])
2156.1.1 by v.ladeuil+lp at free
Make the test compatible with windows.
467
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
468
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
469
class TestRunBzrError(ExternalBase):
470
471
    def test_run_bzr_error(self):
2581.1.3 by Martin Pool
Revert over-eager cleanup of test_run_bzr_error
472
        # retcode=0 is specially needed here because run_bzr_error expects
473
        # an error (oddly enough) but we want to test the case of not
474
        # actually getting one
475
        out, err = self.run_bzr_error(['^$'], ['rocks'], retcode=0)
2227.4.1 by v.ladeuil+lp at free
Fix #78026.
476
        self.assertEqual(out, 'It sure does!\n')
2581.1.3 by Martin Pool
Revert over-eager cleanup of test_run_bzr_error
477
        # now test actually getting an error
478
        out, err = self.run_bzr_error(
479
                ["bzr: ERROR: foobarbaz is not versioned"],
480
                ['file-id', 'foobarbaz'])
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
481
482
2394.2.6 by Ian Clatworthy
completed blackbox tests
483
class TestSelftestListOnly(TestCase):
2394.2.5 by Ian Clatworthy
list-only working, include test not
484
485
    @staticmethod
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
486
    def _parse_test_list(lines, newlines_in_header=0):
2394.2.5 by Ian Clatworthy
list-only working, include test not
487
        "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.
488
        in_header = newlines_in_header != 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
489
        in_footer = False
490
        header = []
491
        body = []
2394.2.6 by Ian Clatworthy
completed blackbox tests
492
        footer = []
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
493
        header_newlines_found = 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
494
        for line in lines:
495
            if in_header:
496
                if line == '':
2394.2.6 by Ian Clatworthy
completed blackbox tests
497
                    header_newlines_found += 1
498
                    if header_newlines_found >= newlines_in_header:
499
                        in_header = False
500
                        continue
501
                header.append(line)
2394.2.5 by Ian Clatworthy
list-only working, include test not
502
            elif not in_footer:
503
                if line.startswith('-------'):
504
                    in_footer = True
505
                else:
506
                    body.append(line)
507
            else:
508
                footer.append(line)
509
        # If the last body line is blank, drop it off the list
510
        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
511
            body.pop()
2394.2.5 by Ian Clatworthy
list-only working, include test not
512
        return (header,body,footer)
513
514
    def test_list_only(self):
515
        # check that bzr selftest --list-only works correctly
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
516
        out,err = self.run_bzr('selftest selftest --list-only')
2394.2.5 by Ian Clatworthy
list-only working, include test not
517
        (header,body,footer) = self._parse_test_list(out.splitlines())
2394.2.8 by Ian Clatworthy
incorporate feedback from jam
518
        num_tests = len(body)
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
519
        self.assertLength(0, header)
520
        self.assertLength(0, footer)
521
        self.assertEqual('', err)
2394.2.5 by Ian Clatworthy
list-only working, include test not
522
2394.2.6 by Ian Clatworthy
completed blackbox tests
523
    def test_list_only_filtered(self):
524
        # check that a filtered --list-only works, both include and exclude
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
525
        out_all,err_all = self.run_bzr('selftest --list-only')
2394.2.5 by Ian Clatworthy
list-only working, include test not
526
        tests_all = self._parse_test_list(out_all.splitlines())[1]
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
527
        out_incl,err_incl = self.run_bzr('selftest --list-only selftest')
2394.2.6 by Ian Clatworthy
completed blackbox tests
528
        tests_incl = self._parse_test_list(out_incl.splitlines())[1]
529
        self.assertSubset(tests_incl, tests_all)
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
530
        out_excl,err_excl = self.run_bzr(['selftest', '--list-only',
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
531
                                          '--exclude', 'selftest'])
2394.2.6 by Ian Clatworthy
completed blackbox tests
532
        tests_excl = self._parse_test_list(out_excl.splitlines())[1]
533
        self.assertSubset(tests_excl, tests_all)
534
        set_incl = set(tests_incl)
535
        set_excl = set(tests_excl)
536
        intersection = set_incl.intersection(set_excl)
537
        self.assertEquals(0, len(intersection))
538
        self.assertEquals(len(tests_all), len(tests_incl) + len(tests_excl))
539
540
    def test_list_only_random(self):
541
        # check that --randomize works correctly
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
542
        out_all,err_all = self.run_bzr('selftest --list-only selftest')
2394.2.6 by Ian Clatworthy
completed blackbox tests
543
        tests_all = self._parse_test_list(out_all.splitlines())[1]
2477.1.6 by Martin Pool
doc
544
        # XXX: It looks like there are some orders for generating tests that
545
        # fail as of 20070504 - maybe because of import order dependencies.
546
        # So unfortunately this will rarely intermittently fail at the moment.
547
        # -- mbp 20070504
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
548
        out_rand,err_rand = self.run_bzr(['selftest', '--list-only',
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
549
                                          'selftest', '--randomize', 'now'])
2394.2.6 by Ian Clatworthy
completed blackbox tests
550
        (header_rand,tests_rand,dummy) = self._parse_test_list(
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
551
            out_rand.splitlines(), 1)
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
552
        # XXX: The following line asserts that the randomized order is not the
553
        # same as the default order.  It is just possible that they'll get
554
        # randomized into the same order and this will falsely fail, but
555
        # that's very unlikely in practice because there are thousands of
556
        # tests.
2394.2.6 by Ian Clatworthy
completed blackbox tests
557
        self.assertNotEqual(tests_all, tests_rand)
558
        self.assertEqual(sorted(tests_all), sorted(tests_rand))
559
        # Check that the seed can be reused to get the exact same order
560
        seed_re = re.compile('Randomizing test order using seed (\w+)')
561
        match_obj = seed_re.search(header_rand[-1])
562
        seed = match_obj.group(1)
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
563
        out_rand2,err_rand2 = self.run_bzr(['selftest', '--list-only',
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
564
                                            'selftest', '--randomize', seed])
2394.2.6 by Ian Clatworthy
completed blackbox tests
565
        (header_rand2,tests_rand2,dummy) = self._parse_test_list(
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
566
            out_rand2.splitlines(), 1)
2394.2.6 by Ian Clatworthy
completed blackbox tests
567
        self.assertEqual(tests_rand, tests_rand2)
2394.2.5 by Ian Clatworthy
list-only working, include test not
568
3193.1.8 by Vincent Ladeuil
Add '--load-list' option to selftest.
569
570
class TestSelftestWithIdList(TestCaseInTempDir):
571
572
    def test_load_list(self):
573
        # We don't want to call selftest for the whole suite, so we start with
574
        # a reduced list.
575
        test_list_fname = 'test.list'
576
        fl = open(test_list_fname, 'wt')
577
        fl.write('%s\n' % self.id())
578
        fl.close()
579
        out, err = self.run_bzr(
580
            ['selftest', '--load-list', test_list_fname, '--list'])
4266.2.1 by Robert Collins
Remove noise from bzr selftest --list-only so that it is easier to use in scripts.
581
        self.assertContainsRe(out, "TestSelftestWithIdList")
582
        self.assertLength(1, out.splitlines())
3193.1.8 by Vincent Ladeuil
Add '--load-list' option to selftest.
583
584
    def test_load_unknown(self):
585
        out, err = self.run_bzr('selftest --load-list I_do_not_exist ',
586
                                retcode=3)
3302.11.2 by Vincent Ladeuil
selftest now accepts --starting-ith <id> to load and execute only a module|class|test* reduced suite.
587
588
589
class TestSelftestStartingWith(TestCase):
590
3649.6.4 by Vincent Ladeuil
selftest --starting-with now accepts multiple values.
591
    def test_starting_with_single_argument(self):
3302.11.2 by Vincent Ladeuil
selftest now accepts --starting-ith <id> to load and execute only a module|class|test* reduced suite.
592
        out, err = self.run_bzr(
593
            ['selftest', '--starting-with', self.id(), '--list'])
3302.11.5 by Vincent Ladeuil
Fixed as per John's review. Also added a NEWS entry.
594
        self.assertContainsRe(out, self.id())
3302.11.2 by Vincent Ladeuil
selftest now accepts --starting-ith <id> to load and execute only a module|class|test* reduced suite.
595
3649.6.4 by Vincent Ladeuil
selftest --starting-with now accepts multiple values.
596
    def test_starting_with_multiple_argument(self):
597
        out, err = self.run_bzr(
598
            ['selftest',
599
             '--starting-with', self.id(),
600
             '--starting-with', 'bzrlib.tests.test_sampler',
601
             '--list'])
602
        self.assertContainsRe(out, self.id())
603
        self.assertContainsRe(out, 'bzrlib.tests.test_sampler')