90
90
"""Return as a string the log for this test"""
91
91
return open(self._log_file_name).read()
94
def capture(self, cmd):
95
"""Shortcut that splits cmd into words, runs, and returns stdout"""
96
return self.run_bzr_captured(cmd.split())[0]
98
def run_bzr_captured(self, argv, retcode=0):
99
"""Invoke bzr and return (result, stdout, stderr).
101
Useful for code that wants to check the contents of the
102
output, the way error messages are presented, etc.
104
This should be the main method for tests that want to exercise the
105
overall behavior of the bzr application (rather than a unit test
106
or a functional test of the library.)
108
Much of the old code runs bzr by forking a new copy of Python, but
109
that is slower, harder to debug, and generally not necessary.
111
This runs bzr through the interface that catches and reports
112
errors, and with logging set to something approximating the
113
default, so that error reporting can be checked.
115
argv -- arguments to invoke bzr
116
retcode -- expected return code, or None for don't-care.
120
self.log('run bzr: %s', ' '.join(argv))
121
handler = logging.StreamHandler(stderr)
122
handler.setFormatter(bzrlib.trace.QuietFormatter())
123
handler.setLevel(logging.INFO)
124
logger = logging.getLogger('')
125
logger.addHandler(handler)
127
result = self.apply_redirected(None, stdout, stderr,
128
bzrlib.commands.run_bzr_catch_errors,
131
logger.removeHandler(handler)
132
out = stdout.getvalue()
133
err = stderr.getvalue()
135
self.log('output:\n%s', out)
137
self.log('errors:\n%s', err)
138
if retcode is not None:
139
self.assertEquals(result, retcode)
93
142
def run_bzr(self, *args, **kwargs):
94
143
"""Invoke bzr, as if it were run from the command line.
97
146
overall behavior of the bzr application (rather than a unit test
98
147
or a functional test of the library.)
100
Much of the old code runs bzr by forking a new copy of Python, but
101
that is slower, harder to debug, and generally not necessary.
149
This sends the stdout/stderr results into the test's log,
150
where it may be useful for debugging. See also run_captured.
103
retcode = kwargs.get('retcode', 0)
104
result = self.apply_redirected(None, None, None,
105
bzrlib.commands.run_bzr, args)
106
self.assertEquals(result, retcode)
152
retcode = kwargs.pop('retcode', 0)
153
return self.run_bzr_captured(args, retcode)
109
155
def check_inventory_shape(self, inv, shape):
111
157
Compare an inventory to a list of expected names.
220
264
os.chdir(self.test_dir)
222
266
def tearDown(self):
224
267
os.chdir(self._currentdir)
225
268
super(TestCaseInTempDir, self).tearDown()
227
def _formcmd(self, cmd):
228
if isinstance(cmd, basestring):
231
cmd[0] = self.BZRPATH
232
if self.OVERRIDE_PYTHON:
233
cmd.insert(0, self.OVERRIDE_PYTHON)
234
self.log('$ %r' % cmd)
237
def runcmd(self, cmd, retcode=0):
238
"""Run one command and check the return code.
240
Returns a tuple of (stdout,stderr) strings.
242
If a single string is based, it is split into words.
243
For commands that are not simple space-separated words, please
244
pass a list instead."""
245
cmd = self._formcmd(cmd)
246
self.log('$ ' + ' '.join(cmd))
247
child = subprocess.Popen(cmd, stdout=subprocess.PIPE,
248
stderr=subprocess.PIPE)
249
outd, errd = child.communicate()
253
actual_retcode = child.wait()
254
if retcode != actual_retcode:
255
raise CommandFailed("test failed: %r returned %d, expected %d"
256
% (cmd, actual_retcode, retcode))
260
def backtick(self, cmd, retcode=0):
261
"""Run a command and return its output"""
262
cmd = self._formcmd(cmd)
263
child = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=self._log_file)
264
outd, errd = child.communicate()
266
actual_retcode = child.wait()
268
outd = outd.replace('\r', '')
270
if retcode != actual_retcode:
271
raise CommandFailed("test failed: %r returned %d, expected %d"
272
% (cmd, actual_retcode, retcode))
278
270
def build_tree(self, shape):
279
271
"""Build a test tree according to a pattern.
314
304
import bzrlib, bzrlib.store, bzrlib.inventory, bzrlib.branch
315
305
import bzrlib.osutils, bzrlib.commands, bzrlib.merge3, bzrlib.plugin
316
306
from doctest import DocTestSuite
322
308
global MODULES_TO_TEST, MODULES_TO_DOCTEST