in pylib/mercurial-support/run-tests.py [0:0]
def runTest(self):
"""Run this test instance.
This will return a tuple describing the result of the test.
"""
env = self._getenv()
self._genrestoreenv(env)
self._daemonpids.append(env['DAEMON_PIDS'])
self._createhgrc(env['HGRCPATH'])
vlog('# Test', self.name)
ret, out = self._run(env)
self._finished = True
self._ret = ret
self._out = out
def describe(ret):
if ret < 0:
return 'killed by signal: %d' % -ret
return 'returned error code %d' % ret
self._skipped = False
if ret == self.SKIPPED_STATUS:
if out is None: # Debug mode, nothing to parse.
missing = ['unknown']
failed = None
else:
missing, failed = TTest.parsehghaveoutput(out)
if not missing:
missing = ['skipped']
if failed:
self.fail('hg have failed checking for %s' % failed[-1])
else:
self._skipped = True
raise unittest.SkipTest(missing[-1])
elif ret == 'timeout':
self.fail('timed out')
elif ret is False:
self.fail('no result code from test')
elif out != self._refout:
# Diff generation may rely on written .err file.
if (
(ret != 0 or out != self._refout)
and not self._skipped
and not self._debug
):
with open(self.errpath, 'wb') as f:
for line in out:
f.write(line)
# The result object handles diff calculation for us.
with firstlock:
if self._result.addOutputMismatch(self, ret, out, self._refout):
# change was accepted, skip failing
return
if self._first:
global firsterror
firsterror = True
if ret:
msg = 'output changed and ' + describe(ret)
else:
msg = 'output changed'
self.fail(msg)
elif ret:
self.fail(describe(ret))