1
# Copyright (C) 2005 by Canonical Ltd
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.
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.
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
16
"""UI tests for the test framework."""
21
from bzrlib.errors import ParamikoNotPresent
22
from bzrlib.tests import (
27
from bzrlib.tests.blackbox import ExternalBase
30
class TestOptions(TestCase):
34
def test_transport_set_to_sftp(self):
35
# test the --transport option has taken effect from within the
38
import bzrlib.transport.sftp
39
except ParamikoNotPresent:
40
raise TestSkipped("Paramiko not present")
41
if TestOptions.current_test != "test_transport_set_to_sftp":
43
self.assertEqual(bzrlib.transport.sftp.SFTPAbsoluteServer,
44
bzrlib.tests.default_transport)
46
def test_transport_set_to_memory(self):
47
# test the --transport option has taken effect from within the
49
import bzrlib.transport.memory
50
if TestOptions.current_test != "test_transport_set_to_memory":
52
self.assertEqual(bzrlib.transport.memory.MemoryServer,
53
bzrlib.tests.default_transport)
55
def test_transport(self):
56
# test that --transport=sftp works
58
import bzrlib.transport.sftp
59
except ParamikoNotPresent:
60
raise TestSkipped("Paramiko not present")
61
old_transport = bzrlib.tests.default_transport
62
old_root = TestCaseInTempDir.TEST_ROOT
63
TestCaseInTempDir.TEST_ROOT = None
65
TestOptions.current_test = "test_transport_set_to_sftp"
66
stdout = self.capture('selftest --transport=sftp test_transport_set_to_sftp')
68
self.assertContainsRe(stdout, 'Ran 1 test')
69
self.assertEqual(old_transport, bzrlib.tests.default_transport)
71
TestOptions.current_test = "test_transport_set_to_memory"
72
stdout = self.capture('selftest --transport=memory test_transport_set_to_memory')
73
self.assertContainsRe(stdout, 'Ran 1 test')
74
self.assertEqual(old_transport, bzrlib.tests.default_transport)
76
bzrlib.tests.default_transport = old_transport
77
TestOptions.current_test = None
78
TestCaseInTempDir.TEST_ROOT = old_root
80
def test_benchmark_runs_no_tests(self):
81
"""bzr selftest --benchmark should not run the default test suite."""
82
# We test this via checking that no tests are run because the
83
# benchmark suite is currently empty.
84
out, err = self.run_bzr('selftest', '--benchmark')
85
self.assertContainsRe(out, 'Ran 0 tests.*\n\nOK')
87
'running tests...\nRunning tests: .\nCleaning up: .\ntests passed\n',
90
def test_benchmark_runs_no_tests(self):
91
"""bzr selftest --benchmark should display useful statistics."""
92
# We test this via checking that no tests are run because the
93
# benchmark suite is currently empty.
94
out, err = self.run_bzr('selftest', '--benchmark')
95
self.assertContainsRe(out, 'Ran 0 tests.*\n\nOK')
97
'running tests...\nRunning tests: .\nCleaning up: .\ntests passed\n',
101
class TestRunBzr(ExternalBase):
103
def run_bzr_captured(self, argv, retcode=0, stdin=None):
106
def test_stdin(self):
107
# test that the stdin keyword to run_bzr is passed through to
108
# run_bzr_captured as-is. We do this by overriding
109
# run_bzr_captured in this class, and then calling run_bzr,
110
# which is a convenience function for run_bzr_captured, so
112
self.run_bzr('foo', 'bar', stdin='gam')
113
self.assertEqual('gam', self.stdin)
114
self.run_bzr('foo', 'bar', stdin='zippy')
115
self.assertEqual('zippy', self.stdin)
118
class TestRunBzrCaptured(ExternalBase):
120
def apply_redirected(self, stdin=None, stdout=None, stderr=None,
121
a_callable=None, *args, **kwargs):
123
self.factory_stdin = getattr(bzrlib.ui.ui_factory, "stdin", None)
124
self.factory = bzrlib.ui.ui_factory
125
stdout.write('foo\n')
126
stderr.write('bar\n')
129
def test_stdin(self):
130
# test that the stdin keyword to run_bzr_captured is passed through to
131
# apply_redirected as a StringIO. We do this by overriding
132
# apply_redirected in this class, and then calling run_bzr_captured,
133
# which calls apply_redirected.
134
self.run_bzr_captured(['foo', 'bar'], stdin='gam')
135
self.assertEqual('gam', self.stdin.read())
136
self.assertTrue(self.stdin is self.factory_stdin)
137
self.run_bzr_captured(['foo', 'bar'], stdin='zippy')
138
self.assertEqual('zippy', self.stdin.read())
139
self.assertTrue(self.stdin is self.factory_stdin)
141
def test_ui_factory(self):
142
# each invocation of self.run_bzr_captured should get its own UI
143
# factory, which is an instance of TestUIFactory, with stdout and
144
# stderr attached to the stdout and stderr of the invoked
146
current_factory = bzrlib.ui.ui_factory
147
self.run_bzr_captured(['foo'])
148
self.failIf(current_factory is self.factory)
149
self.assertNotEqual(sys.stdout, self.factory.stdout)
150
self.assertNotEqual(sys.stderr, self.factory.stderr)
151
self.assertEqual('foo\n', self.factory.stdout.getvalue())
152
self.assertEqual('bar\n', self.factory.stderr.getvalue())
153
self.assertIsInstance(self.factory, bzrlib.tests.blackbox.TestUIFactory)