~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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""UI tests for the test framework."""
18
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
19
import os
2394.2.5 by Ian Clatworthy
list-only working, include test not
20
import re
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
21
import signal
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
22
import sys
23
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.
24
import bzrlib
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
25
from bzrlib import (
26
    osutils,
27
    )
2394.2.3 by Ian Clatworthy
Backed out test junk
28
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.
29
from bzrlib.tests import (
30
                          TestCase,
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
31
                          TestCaseInTempDir,
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
32
                          TestCaseWithMemoryTransport,
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
33
                          TestCaseWithTransport,
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
34
                          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.
35
                          TestSkipped,
36
                          )
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
37
from bzrlib.symbol_versioning import (
38
    zero_eighteen,
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
94
95
class TestRunBzr(ExternalBase):
96
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
97
    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
98
                         working_dir=None):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
99
        """Override _run_bzr_core to test how it is invoked by run_bzr.
2552.2.1 by Vincent Ladeuil
apply martin patch
100
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
101
        Attempts to run bzr from inside this class don't actually run it.
102
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
103
        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
104
        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
105
        parameters to run_bzr.
2027.5.3 by John Arbash Meinel
Add docstring to why run_bzr_captured is overridden
106
        """
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
107
        self.argv = list(argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
108
        self.retcode = retcode
109
        self.encoding = encoding
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
110
        self.stdin = stdin
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
111
        self.working_dir = working_dir
2292.1.28 by Marius Kruger
* NEWS
112
        return '', ''
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
113
114
    def test_args(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
115
        """Test that run_bzr passes args correctly to _run_bzr_core"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
116
        self.callDeprecated(
117
                ['passing varargs to run_bzr was deprecated in version 0.18.'],
118
                self.run_bzr,
119
                'arg1', 'arg2', 'arg3', retcode=1)
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
120
        self.assertEqual(['arg1', 'arg2', 'arg3'], self.argv)
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
121
122
    def test_encoding(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
123
        """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
124
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
125
        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
126
        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
127
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
128
        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
129
        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
130
        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
131
132
    def test_retcode(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
133
        """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
134
        # Default is retcode == 0
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
135
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
136
        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
137
        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
138
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
139
        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
140
        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
141
        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
142
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
143
        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
144
        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
145
        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
146
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
147
        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
148
        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
149
        self.assertEqual(['foo', 'bar'], self.argv)
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
150
151
    def test_stdin(self):
152
        # 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
153
        # _run_bzr_core as-is. We do this by overriding
154
        # _run_bzr_core in this class, and then calling run_bzr,
155
        # which is a convenience function for _run_bzr_core, so 
1687.1.15 by Robert Collins
Review comments.
156
        # should invoke it.
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
157
        self.run_bzr('foo bar', stdin='gam')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
158
        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
159
        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
160
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
161
        self.run_bzr('foo bar', stdin='zippy')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
162
        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
163
        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
164
165
    def test_working_dir(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
166
        """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
167
        self.run_bzr('foo bar')
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
168
        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
169
        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
170
2530.3.3 by Martin Pool
Clean up some callers that use varargs syntax for run_bzr, but don't
171
        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
172
        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
173
        self.assertEqual(['foo', 'bar'], self.argv)
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
174
2665.1.1 by Michael Hudson
make run_bzr stricter about the keyword arguments it takes.
175
    def test_reject_extra_keyword_arguments(self):
176
        self.assertRaises(TypeError, self.run_bzr, "foo bar",
177
                          error_regex=['error message'])
178
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
179
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
180
class TestBenchmarkTests(TestCaseWithTransport):
181
182
    def test_benchmark_runs_benchmark_tests(self):
183
        """bzr selftest --benchmark should not run the default test suite."""
184
        # We test this by passing a regression test name to --benchmark, which
185
        # should result in 0 rests run.
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
186
        old_root = TestCaseWithMemoryTransport.TEST_ROOT
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
187
        try:
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
188
            TestCaseWithMemoryTransport.TEST_ROOT = None
2552.2.4 by Vincent Ladeuil
Merge bzr.dev and resolve conflits. (good use case for an enhanced merge
189
            out, err = self.run_bzr('selftest --benchmark'
190
                                    ' workingtree_implementations')
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
191
        finally:
1986.2.3 by Robert Collins
New test base class TestCaseWithMemoryTransport offers memory-only
192
            TestCaseWithMemoryTransport.TEST_ROOT = old_root
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
193
        self.assertContainsRe(out, 'Ran 0 tests.*\n\nOK')
194
        self.assertEqual(
2095.4.1 by Martin Pool
Better progress bars during tests
195
            'tests passed\n',
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
196
            err)
197
        benchfile = open(".perf_history", "rt")
198
        try:
199
            lines = benchfile.readlines()
200
        finally:
201
            benchfile.close()
202
        self.assertEqual(1, len(lines))
203
        self.assertContainsRe(lines[0], "--date [0-9.]+")
204
205
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
206
class TestRunBzrCaptured(ExternalBase):
207
208
    def apply_redirected(self, stdin=None, stdout=None, stderr=None,
209
                         a_callable=None, *args, **kwargs):
210
        self.stdin = stdin
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
211
        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.
212
        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
213
        self.working_dir = osutils.getcwd()
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
214
        stdout.write('foo\n')
215
        stderr.write('bar\n')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
216
        return 0
217
218
    def test_stdin(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
219
        # test that the stdin keyword to _run_bzr_core is passed through to
1687.1.15 by Robert Collins
Review comments.
220
        # 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
221
        # apply_redirected in this class, and then calling _run_bzr_core,
1687.1.15 by Robert Collins
Review comments.
222
        # which calls apply_redirected. 
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
223
        self.run_bzr(['foo', 'bar'], stdin='gam')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
224
        self.assertEqual('gam', self.stdin.read())
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
225
        self.assertTrue(self.stdin is self.factory_stdin)
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
226
        self.run_bzr(['foo', 'bar'], stdin='zippy')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
227
        self.assertEqual('zippy', 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)
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
229
230
    def test_ui_factory(self):
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
231
        # each invocation of self.run_bzr should get its
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
232
        # own UI factory, which is an instance of TestUIFactory,
233
        # 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
234
        # 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.
235
        current_factory = bzrlib.ui.ui_factory
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
236
        self.run_bzr(['foo'])
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
237
        self.failIf(current_factory is self.factory)
238
        self.assertNotEqual(sys.stdout, self.factory.stdout)
239
        self.assertNotEqual(sys.stderr, self.factory.stderr)
240
        self.assertEqual('foo\n', self.factory.stdout.getvalue())
241
        self.assertEqual('bar\n', self.factory.stderr.getvalue())
2294.4.4 by Vincent Ladeuil
Provide a better implementation for testing passwords.
242
        self.assertIsInstance(self.factory, TestUIFactory)
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
243
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
244
    def test_working_dir(self):
245
        self.build_tree(['one/', 'two/'])
246
        cwd = osutils.getcwd()
247
248
        # Default is to work in the current directory
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
249
        self.run_bzr(['foo', 'bar'])
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
250
        self.assertEqual(cwd, self.working_dir)
251
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
252
        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
253
        self.assertEqual(cwd, self.working_dir)
254
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
255
        # The function should be run in the alternative directory
256
        # 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
257
        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
258
        self.assertNotEqual(cwd, self.working_dir)
259
        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
260
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
261
2530.3.4 by Martin Pool
Deprecate run_bzr_captured in favour of just run_bzr
262
        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
263
        self.assertNotEqual(cwd, self.working_dir)
264
        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
265
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
266
267
268
class TestRunBzrSubprocess(TestCaseWithTransport):
269
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
270
    def test_run_bzr_subprocess(self):
271
        """The run_bzr_helper_external comand behaves nicely."""
272
        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
273
        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.
274
        result = self.run_bzr_subprocess('--version', retcode=None)
275
        self.assertContainsRe(result[0], 'is free software')
276
        self.assertRaises(AssertionError, self.run_bzr_subprocess, 
277
                          '--versionn')
278
        result = self.run_bzr_subprocess('--versionn', retcode=3)
279
        result = self.run_bzr_subprocess('--versionn', retcode=None)
280
        self.assertContainsRe(result[1], 'unknown command')
2665.4.2 by Aaron Bentley
Update from review
281
        err = self.run_bzr_subprocess(['merge', '--merge-type',
282
                                      'magic merge'], retcode=3)[1]
2221.4.15 by Aaron Bentley
Use RegistryOption for merge type
283
        self.assertContainsRe(err, 'Bad value "magic merge" for option'
284
                              ' "merge-type"')
2665.4.2 by Aaron Bentley
Update from review
285
        self.callDeprecated(['passing varargs to run_bzr_subprocess was'
2665.4.4 by Aaron Bentley
Update deprecation symbols
286
                             ' deprecated in version 0.91.'],
2665.4.2 by Aaron Bentley
Update from review
287
                            self.run_bzr_subprocess,
288
                            'arg1', 'arg2', 'arg3', retcode=3)
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
289
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
290
    def test_run_bzr_subprocess_env(self):
291
        """run_bzr_subprocess can set environment variables in the child only.
292
293
        These changes should not change the running process, only the child.
294
        """
295
        # The test suite should unset this variable
296
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
297
        out, err = self.run_bzr_subprocess('whoami', env_changes={
298
                                            '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
299
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
300
        self.assertEqual('', err)
301
        self.assertEqual('Joe Foo <joe@foo.com>\n', out)
302
        # And it should not be modified
303
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
304
305
        # Do it again with a different address, just to make sure
306
        # it is actually changing
307
        out, err = self.run_bzr_subprocess('whoami', env_changes={
308
                                            '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
309
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
310
        self.assertEqual('', err)
311
        self.assertEqual('Barry <bar@foo.com>\n', out)
312
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
313
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
314
    def test_run_bzr_subprocess_env_del(self):
315
        """run_bzr_subprocess can remove environment variables too."""
316
        # Create a random email, so we are sure this won't collide
317
        rand_bzr_email = 'John Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
318
        rand_email = 'Jane Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
319
        os.environ['BZR_EMAIL'] = rand_bzr_email
320
        os.environ['EMAIL'] = rand_email
321
        try:
322
            # 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
323
            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
324
            self.assertEqual('', err)
325
            self.assertEqual(rand_bzr_email + '\n', out)
326
327
            # Now that BZR_EMAIL is not set, it should fall back to EMAIL
328
            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
329
                                               env_changes={'BZR_EMAIL':None},
330
                                               universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
331
            self.assertEqual('', err)
332
            self.assertEqual(rand_email + '\n', out)
333
334
            # This switches back to the default email guessing logic
335
            # Which shouldn't match either of the above addresses
336
            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
337
                           env_changes={'BZR_EMAIL':None, 'EMAIL':None},
338
                           universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
339
340
            self.assertEqual('', err)
341
            self.assertNotEqual(rand_bzr_email + '\n', out)
342
            self.assertNotEqual(rand_email + '\n', out)
343
        finally:
344
            # TestCase cleans up BZR_EMAIL, and EMAIL at startup
345
            del os.environ['BZR_EMAIL']
346
            del os.environ['EMAIL']
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
347
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
348
    def test_run_bzr_subprocess_env_del_missing(self):
349
        """run_bzr_subprocess won't fail if deleting a nonexistant env var"""
350
        self.failIf('NON_EXISTANT_ENV_VAR' in os.environ)
351
        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
352
                        env_changes={'NON_EXISTANT_ENV_VAR':None},
353
                        universal_newlines=True)
2227.4.1 by v.ladeuil+lp at free
Fix #78026.
354
        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
355
        self.assertEqual('', err)
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
356
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
357
    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
358
        """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
359
        cwd = osutils.getcwd()
360
361
        self.make_branch_and_tree('.')
362
        self.make_branch_and_tree('one')
363
        self.make_branch_and_tree('two')
364
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
365
        def get_root(**kwargs):
366
            """Spawn a process to get the 'root' of the tree.
367
368
            You can pass in arbitrary new arguments. This just makes
369
            sure that the returned path doesn't have trailing whitespace.
370
            """
371
            return self.run_bzr_subprocess('root', **kwargs)[0].rstrip()
372
373
        self.assertEqual(cwd, get_root())
374
        self.assertEqual(cwd, get_root(working_dir=None))
375
        # Has our path changed?
376
        self.assertEqual(cwd, osutils.getcwd())
377
378
        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
379
        self.assertEndsWith(dir1, 'one')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
380
        self.assertEqual(cwd, osutils.getcwd())
381
382
        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
383
        self.assertEndsWith(dir2, 'two')
2027.5.2 by John Arbash Meinel
add tests that the working directory is preserved, cleanup run_bzr_subprocess
384
        self.assertEqual(cwd, osutils.getcwd())
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
385
386
2067.2.2 by John Arbash Meinel
Review comments from Robert
387
class _DontSpawnProcess(Exception):
388
    """A simple exception which just allows us to skip unnecessary steps"""
389
390
391
class TestRunBzrSubprocessCommands(TestCaseWithTransport):
392
393
    def _popen(self, *args, **kwargs):
394
        """Record the command that is run, so that we can ensure it is correct"""
395
        self._popen_args = args
396
        self._popen_kwargs = kwargs
397
        raise _DontSpawnProcess()
398
399
    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
400
        self.assertRaises(_DontSpawnProcess, self.run_bzr_subprocess, '')
2067.2.2 by John Arbash Meinel
Review comments from Robert
401
        command = self._popen_args[0]
402
        self.assertEqual(sys.executable, command[0])
403
        self.assertEqual(self.get_bzr_path(), command[1])
404
        self.assertEqual(['--no-plugins'], command[2:])
405
406
    def test_allow_plugins(self):
2067.2.4 by John Arbash Meinel
fixup one test
407
        self.assertRaises(_DontSpawnProcess,
2665.4.1 by Aaron Bentley
teach run_bzr_subprocess to accept either a list of strings or a string
408
                          self.run_bzr_subprocess, '', allow_plugins=True)
2067.2.2 by John Arbash Meinel
Review comments from Robert
409
        command = self._popen_args[0]
410
        self.assertEqual([], command[2:])
411
412
2027.5.1 by John Arbash Meinel
Add working_dir=XX to run_bzr_* functions, and clean up tests
413
class TestBzrSubprocess(TestCaseWithTransport):
414
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
415
    def test_start_and_stop_bzr_subprocess(self):
416
        """We can start and perform other test actions while that process is
417
        still alive.
418
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
419
        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
420
        result = self.finish_bzr_subprocess(process)
421
        self.assertContainsRe(result[0], 'is free software')
422
        self.assertEqual('', result[1])
423
424
    def test_start_and_stop_bzr_subprocess_with_error(self):
425
        """finish_bzr_subprocess allows specification of the desired exit code.
426
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
427
        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
428
        result = self.finish_bzr_subprocess(process, retcode=3)
429
        self.assertEqual('', result[0])
430
        self.assertContainsRe(result[1], 'unknown command')
431
432
    def test_start_and_stop_bzr_subprocess_ignoring_retcode(self):
433
        """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.
434
        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
435
        result = self.finish_bzr_subprocess(process, retcode=None)
436
        self.assertEqual('', result[0])
437
        self.assertContainsRe(result[1], 'unknown command')
438
439
    def test_start_and_stop_bzr_subprocess_with_unexpected_retcode(self):
440
        """finish_bzr_subprocess raises self.failureException if the retcode is
441
        not the expected one.
442
        """
1910.17.8 by Andrew Bennetts
Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.
443
        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
444
        self.assertRaises(self.failureException, self.finish_bzr_subprocess,
2581.1.2 by Martin Pool
Remove unnecessary retcode=0 to run_bzr calls
445
                          process)
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
446
        
447
    def test_start_and_stop_bzr_subprocess_send_signal(self):
448
        """finish_bzr_subprocess raises self.failureException if the retcode is
449
        not the expected one.
450
        """
1910.17.9 by Andrew Bennetts
Add skip_if_plan_to_signal flag to start_bzr_subprocess.
451
        process = self.start_bzr_subprocess(['wait-until-signalled'],
452
                                            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
453
        self.assertEqual('running\n', process.stdout.readline())
454
        result = self.finish_bzr_subprocess(process, send_signal=signal.SIGINT,
455
                                            retcode=3)
456
        self.assertEqual('', result[0])
457
        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
458
459
    def test_start_and_stop_working_dir(self):
460
        cwd = osutils.getcwd()
461
462
        self.make_branch_and_tree('one')
463
464
        process = self.start_bzr_subprocess(['root'], working_dir='one')
2156.1.1 by v.ladeuil+lp at free
Make the test compatible with windows.
465
        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
466
        self.assertEndsWith(result[0], 'one\n')
467
        self.assertEqual('', result[1])
2156.1.1 by v.ladeuil+lp at free
Make the test compatible with windows.
468
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
469
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
470
class TestRunBzrError(ExternalBase):
471
472
    def test_run_bzr_error(self):
2581.1.3 by Martin Pool
Revert over-eager cleanup of test_run_bzr_error
473
        # retcode=0 is specially needed here because run_bzr_error expects
474
        # an error (oddly enough) but we want to test the case of not
475
        # actually getting one
476
        out, err = self.run_bzr_error(['^$'], ['rocks'], retcode=0)
2227.4.1 by v.ladeuil+lp at free
Fix #78026.
477
        self.assertEqual(out, 'It sure does!\n')
2581.1.3 by Martin Pool
Revert over-eager cleanup of test_run_bzr_error
478
        # now test actually getting an error
479
        out, err = self.run_bzr_error(
480
                ["bzr: ERROR: foobarbaz is not versioned"],
481
                ['file-id', 'foobarbaz'])
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
482
483
2394.2.6 by Ian Clatworthy
completed blackbox tests
484
class TestSelftestListOnly(TestCase):
2394.2.5 by Ian Clatworthy
list-only working, include test not
485
486
    @staticmethod
2394.2.6 by Ian Clatworthy
completed blackbox tests
487
    def _parse_test_list(lines, newlines_in_header=1):
2394.2.5 by Ian Clatworthy
list-only working, include test not
488
        "Parse a list of lines into a tuple of 3 lists (header,body,footer)."
489
        in_header = True
490
        in_footer = False
491
        header = []
492
        body = []
2394.2.6 by Ian Clatworthy
completed blackbox tests
493
        footer = []
2687.3.1 by Martin Pool
Revert selftest header to just two lines, but still show the bzrlib and python versions
494
        header_newlines_found = 0
2394.2.5 by Ian Clatworthy
list-only working, include test not
495
        for line in lines:
496
            if in_header:
497
                if line == '':
2394.2.6 by Ian Clatworthy
completed blackbox tests
498
                    header_newlines_found += 1
499
                    if header_newlines_found >= newlines_in_header:
500
                        in_header = False
501
                        continue
502
                header.append(line)
2394.2.5 by Ian Clatworthy
list-only working, include test not
503
            elif not in_footer:
504
                if line.startswith('-------'):
505
                    in_footer = True
506
                else:
507
                    body.append(line)
508
            else:
509
                footer.append(line)
510
        # If the last body line is blank, drop it off the list
511
        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
512
            body.pop()
2394.2.5 by Ian Clatworthy
list-only working, include test not
513
        return (header,body,footer)
514
515
    def test_list_only(self):
516
        # check that bzr selftest --list-only works correctly
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
517
        out,err = self.run_bzr('selftest selftest --list-only')
2394.2.6 by Ian Clatworthy
completed blackbox tests
518
        self.assertEndsWith(err, 'tests passed\n')
2394.2.5 by Ian Clatworthy
list-only working, include test not
519
        (header,body,footer) = self._parse_test_list(out.splitlines())
2394.2.8 by Ian Clatworthy
incorporate feedback from jam
520
        num_tests = len(body)
521
        self.assertContainsRe(footer[0], 'Listed %s tests in' % num_tests)
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(
551
            out_rand.splitlines(), 2)
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(
566
            out_rand2.splitlines(), 2)
567
        self.assertEqual(tests_rand, tests_rand2)
2394.2.5 by Ian Clatworthy
list-only working, include test not
568