/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
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.
1
# Copyright (C) 2005 by Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License version 2 as published by
5
# the Free Software Foundation.
6
#
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
# GNU General Public License for more details.
11
#
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
16
"""UI tests for the test framework."""
17
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
18
import os
1692.3.3 by Robert Collins
Get run_bzr in tests to always assign a new, clean ui factory.
19
import sys
20
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.
21
import bzrlib
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
22
from bzrlib import (
23
    osutils,
24
    )
1551.2.47 by abentley
Fixed test_selftest's use of sftp
25
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.
26
from bzrlib.tests import (
27
                          TestCase,
28
                          TestCaseInTempDir,
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
29
                          TestCaseWithTransport,
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.
30
                          TestSkipped,
31
                          )
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
32
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.
33
34
35
class TestOptions(TestCase):
36
37
    current_test = None
38
39
    def test_transport_set_to_sftp(self):
40
        # test the --transport option has taken effect from within the
41
        # test_transport test
1551.2.47 by abentley
Fixed test_selftest's use of sftp
42
        try:
43
            import bzrlib.transport.sftp
44
        except ParamikoNotPresent:
45
            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.
46
        if TestOptions.current_test != "test_transport_set_to_sftp":
47
            return
48
        self.assertEqual(bzrlib.transport.sftp.SFTPAbsoluteServer,
49
                         bzrlib.tests.default_transport)
50
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
51
    def test_transport_set_to_memory(self):
52
        # test the --transport option has taken effect from within the
53
        # test_transport test
54
        import bzrlib.transport.memory
55
        if TestOptions.current_test != "test_transport_set_to_memory":
56
            return
57
        self.assertEqual(bzrlib.transport.memory.MemoryServer,
58
                         bzrlib.tests.default_transport)
59
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.
60
    def test_transport(self):
61
        # test that --transport=sftp works
1551.2.47 by abentley
Fixed test_selftest's use of sftp
62
        try:
63
            import bzrlib.transport.sftp
64
        except ParamikoNotPresent:
65
            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.
66
        old_transport = bzrlib.tests.default_transport
67
        old_root = TestCaseInTempDir.TEST_ROOT
68
        TestCaseInTempDir.TEST_ROOT = None
69
        try:
70
            TestOptions.current_test = "test_transport_set_to_sftp"
71
            stdout = self.capture('selftest --transport=sftp test_transport_set_to_sftp')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
72
            
73
            self.assertContainsRe(stdout, 'Ran 1 test')
74
            self.assertEqual(old_transport, bzrlib.tests.default_transport)
75
76
            TestOptions.current_test = "test_transport_set_to_memory"
77
            stdout = self.capture('selftest --transport=memory test_transport_set_to_memory')
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.
78
            self.assertContainsRe(stdout, 'Ran 1 test')
79
            self.assertEqual(old_transport, bzrlib.tests.default_transport)
80
        finally:
81
            bzrlib.tests.default_transport = old_transport
82
            TestOptions.current_test = None
83
            TestCaseInTempDir.TEST_ROOT = old_root
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
84
85
86
class TestRunBzr(ExternalBase):
87
1685.1.66 by Martin Pool
Update test that hooks run_bzr_captured
88
    def run_bzr_captured(self, argv, retcode=0, encoding=None, stdin=None):
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
89
        self.stdin = stdin
90
91
    def test_stdin(self):
92
        # test that the stdin keyword to run_bzr is passed through to
1687.1.15 by Robert Collins
Review comments.
93
        # run_bzr_captured as-is. We do this by overriding
94
        # run_bzr_captured in this class, and then calling run_bzr,
95
        # which is a convenience function for run_bzr_captured, so 
96
        # should invoke it.
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
97
        self.run_bzr('foo', 'bar', stdin='gam')
98
        self.assertEqual('gam', self.stdin)
99
        self.run_bzr('foo', 'bar', stdin='zippy')
100
        self.assertEqual('zippy', self.stdin)
101
102
1819.1.3 by Carl Friedrich Bolz
(lifeless, cfbolz): Add recording of benchmark results to the benchmark history
103
class TestBenchmarkTests(TestCaseWithTransport):
104
105
    def test_benchmark_runs_benchmark_tests(self):
106
        """bzr selftest --benchmark should not run the default test suite."""
107
        # We test this by passing a regression test name to --benchmark, which
108
        # should result in 0 rests run.
109
        old_root = TestCaseInTempDir.TEST_ROOT
110
        try:
111
            TestCaseInTempDir.TEST_ROOT = None
112
            out, err = self.run_bzr('selftest', '--benchmark', 'workingtree_implementations')
113
        finally:
114
            TestCaseInTempDir.TEST_ROOT = old_root
115
        self.assertContainsRe(out, 'Ran 0 tests.*\n\nOK')
116
        self.assertEqual(
117
            'running tests...\ntests passed\n',
118
            err)
119
        benchfile = open(".perf_history", "rt")
120
        try:
121
            lines = benchfile.readlines()
122
        finally:
123
            benchfile.close()
124
        self.assertEqual(1, len(lines))
125
        self.assertContainsRe(lines[0], "--date [0-9.]+")
126
127
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
128
class TestRunBzrCaptured(ExternalBase):
129
130
    def apply_redirected(self, stdin=None, stdout=None, stderr=None,
131
                         a_callable=None, *args, **kwargs):
132
        self.stdin = stdin
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
133
        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.
134
        self.factory = bzrlib.ui.ui_factory
135
        stdout.write('foo\n')
136
        stderr.write('bar\n')
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
137
        return 0
138
139
    def test_stdin(self):
140
        # test that the stdin keyword to run_bzr_captured is passed through to
1687.1.15 by Robert Collins
Review comments.
141
        # apply_redirected as a StringIO. We do this by overriding
142
        # apply_redirected in this class, and then calling run_bzr_captured,
143
        # which calls apply_redirected. 
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
144
        self.run_bzr_captured(['foo', 'bar'], stdin='gam')
145
        self.assertEqual('gam', self.stdin.read())
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
146
        self.assertTrue(self.stdin is self.factory_stdin)
1687.1.2 by Robert Collins
Add stdin parameter to run_bzr and run_bzr_captured.
147
        self.run_bzr_captured(['foo', 'bar'], stdin='zippy')
148
        self.assertEqual('zippy', self.stdin.read())
1687.1.11 by Robert Collins
Teach TestCase.run_bzr_captured about the ui factories.
149
        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.
150
151
    def test_ui_factory(self):
152
        # each invocation of self.run_bzr_captured should get its own UI
153
        # factory, which is an instance of TestUIFactory, with stdout and
154
        # stderr attached to the stdout and stderr of the invoked
155
        # run_bzr_captured
156
        current_factory = bzrlib.ui.ui_factory
157
        self.run_bzr_captured(['foo'])
158
        self.failIf(current_factory is self.factory)
159
        self.assertNotEqual(sys.stdout, self.factory.stdout)
160
        self.assertNotEqual(sys.stderr, self.factory.stderr)
161
        self.assertEqual('foo\n', self.factory.stdout.getvalue())
162
        self.assertEqual('bar\n', self.factory.stderr.getvalue())
163
        self.assertIsInstance(self.factory, bzrlib.tests.blackbox.TestUIFactory)
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
164
165
    def test_run_bzr_subprocess(self):
166
        """The run_bzr_helper_external comand behaves nicely."""
167
        result = self.run_bzr_subprocess('--version')
168
        result = self.run_bzr_subprocess('--version', retcode=None)
169
        self.assertContainsRe(result[0], 'is free software')
170
        self.assertRaises(AssertionError, self.run_bzr_subprocess, 
171
                          '--versionn')
172
        result = self.run_bzr_subprocess('--versionn', retcode=3)
173
        result = self.run_bzr_subprocess('--versionn', retcode=None)
174
        self.assertContainsRe(result[1], 'unknown command')
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
175
        err = self.run_bzr_subprocess('merge', '--merge-type', 'magic merge', 
176
                                      retcode=3)[1]
177
        self.assertContainsRe(err, 'No known merge type magic merge')
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
178
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
179
    def test_run_bzr_subprocess_env(self):
180
        """run_bzr_subprocess can set environment variables in the child only.
181
182
        These changes should not change the running process, only the child.
183
        """
184
        # The test suite should unset this variable
185
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
186
        out, err = self.run_bzr_subprocess('whoami', env_changes={
187
                                            '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
188
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
189
        self.assertEqual('', err)
190
        self.assertEqual('Joe Foo <joe@foo.com>\n', out)
191
        # And it should not be modified
192
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
193
194
        # Do it again with a different address, just to make sure
195
        # it is actually changing
196
        out, err = self.run_bzr_subprocess('whoami', env_changes={
197
                                            '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
198
                                          }, universal_newlines=True)
1963.1.1 by John Arbash Meinel
run_bzr_subprocess() can take an env_changes parameter
199
        self.assertEqual('', err)
200
        self.assertEqual('Barry <bar@foo.com>\n', out)
201
        self.assertEqual(None, os.environ.get('BZR_EMAIL'))
202
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
203
    def test_run_bzr_subprocess_env_del(self):
204
        """run_bzr_subprocess can remove environment variables too."""
205
        # Create a random email, so we are sure this won't collide
206
        rand_bzr_email = 'John Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
207
        rand_email = 'Jane Doe <jdoe@%s.com>' % (osutils.rand_chars(20),)
208
        os.environ['BZR_EMAIL'] = rand_bzr_email
209
        os.environ['EMAIL'] = rand_email
210
        try:
211
            # 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
212
            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
213
            self.assertEqual('', err)
214
            self.assertEqual(rand_bzr_email + '\n', out)
215
216
            # Now that BZR_EMAIL is not set, it should fall back to EMAIL
217
            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
218
                                               env_changes={'BZR_EMAIL':None},
219
                                               universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
220
            self.assertEqual('', err)
221
            self.assertEqual(rand_email + '\n', out)
222
223
            # This switches back to the default email guessing logic
224
            # Which shouldn't match either of the above addresses
225
            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
226
                           env_changes={'BZR_EMAIL':None, 'EMAIL':None},
227
                           universal_newlines=True)
1963.1.2 by John Arbash Meinel
Cleanups suggested by Martin, add test that env_changes can remove an env variable
228
229
            self.assertEqual('', err)
230
            self.assertNotEqual(rand_bzr_email + '\n', out)
231
            self.assertNotEqual(rand_email + '\n', out)
232
        finally:
233
            # TestCase cleans up BZR_EMAIL, and EMAIL at startup
234
            del os.environ['BZR_EMAIL']
235
            del os.environ['EMAIL']
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
236
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
237
    def test_run_bzr_subprocess_env_del_missing(self):
238
        """run_bzr_subprocess won't fail if deleting a nonexistant env var"""
239
        self.failIf('NON_EXISTANT_ENV_VAR' in os.environ)
240
        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
241
                        env_changes={'NON_EXISTANT_ENV_VAR':None},
242
                        universal_newlines=True)
243
        self.assertEqual('it sure does!\n', out)
244
        self.assertEqual('', err)
1963.1.4 by John Arbash Meinel
env_changes={} should be safe to remove variables that aren't there
245
246
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
247
class TestRunBzrError(ExternalBase):
248
249
    def test_run_bzr_error(self):
250
        out, err = self.run_bzr_error(['^$'], 'rocks', retcode=0)
251
        self.assertEqual(out, 'it sure does!\n')
252
253
        out, err = self.run_bzr_error(["'foobarbaz' is not a versioned file"],
254
                                      'file-id', 'foobarbaz')