tests/run-tests.py
changeset 24516 62fb03e0d990
parent 24510 8d6fd0b8f622
child 24742 39ee0444e27c
equal deleted inserted replaced
24515:c1fe7111b6bb 24516:62fb03e0d990
   541     def runTest(self):
   541     def runTest(self):
   542         """Run this test instance.
   542         """Run this test instance.
   543 
   543 
   544         This will return a tuple describing the result of the test.
   544         This will return a tuple describing the result of the test.
   545         """
   545         """
   546         replacements = self._getreplacements()
       
   547         env = self._getenv()
   546         env = self._getenv()
   548         self._daemonpids.append(env['DAEMON_PIDS'])
   547         self._daemonpids.append(env['DAEMON_PIDS'])
   549         self._createhgrc(env['HGRCPATH'])
   548         self._createhgrc(env['HGRCPATH'])
   550 
   549 
   551         vlog('# Test', self.name)
   550         vlog('# Test', self.name)
   552 
   551 
   553         ret, out = self._run(replacements, env)
   552         ret, out = self._run(env)
   554         self._finished = True
   553         self._finished = True
   555         self._ret = ret
   554         self._ret = ret
   556         self._out = out
   555         self._out = out
   557 
   556 
   558         def describe(ret):
   557         def describe(ret):
   621                 f.write(line)
   620                 f.write(line)
   622             f.close()
   621             f.close()
   623 
   622 
   624         vlog("# Ret was:", self._ret)
   623         vlog("# Ret was:", self._ret)
   625 
   624 
   626     def _run(self, replacements, env):
   625     def _run(self, env):
   627         # This should be implemented in child classes to run tests.
   626         # This should be implemented in child classes to run tests.
   628         raise SkipTest('unknown test type')
   627         raise SkipTest('unknown test type')
   629 
   628 
   630     def abort(self):
   629     def abort(self):
   631         """Terminate execution of this test."""
   630         """Terminate execution of this test."""
   720     def fail(self, msg):
   719     def fail(self, msg):
   721         # unittest differentiates between errored and failed.
   720         # unittest differentiates between errored and failed.
   722         # Failed is denoted by AssertionError (by default at least).
   721         # Failed is denoted by AssertionError (by default at least).
   723         raise AssertionError(msg)
   722         raise AssertionError(msg)
   724 
   723 
   725     def _runcommand(self, cmd, replacements, env, normalizenewlines=False):
   724     def _runcommand(self, cmd, env, normalizenewlines=False):
   726         """Run command in a sub-process, capturing the output (stdout and
   725         """Run command in a sub-process, capturing the output (stdout and
   727         stderr).
   726         stderr).
   728 
   727 
   729         Return a tuple (exitcode, output). output is None in debug mode.
   728         Return a tuple (exitcode, output). output is None in debug mode.
   730         """
   729         """
   761             ret = 'timeout'
   760             ret = 'timeout'
   762 
   761 
   763         if ret:
   762         if ret:
   764             killdaemons(env['DAEMON_PIDS'])
   763             killdaemons(env['DAEMON_PIDS'])
   765 
   764 
   766         for s, r in replacements:
   765         for s, r in self._getreplacements():
   767             output = re.sub(s, r, output)
   766             output = re.sub(s, r, output)
   768 
   767 
   769         if normalizenewlines:
   768         if normalizenewlines:
   770             output = output.replace('\r\n', '\n')
   769             output = output.replace('\r\n', '\n')
   771 
   770 
   776 
   775 
   777     @property
   776     @property
   778     def refpath(self):
   777     def refpath(self):
   779         return os.path.join(self._testdir, '%s.out' % self.name)
   778         return os.path.join(self._testdir, '%s.out' % self.name)
   780 
   779 
   781     def _run(self, replacements, env):
   780     def _run(self, env):
   782         py3kswitch = self._py3kwarnings and ' -3' or ''
   781         py3kswitch = self._py3kwarnings and ' -3' or ''
   783         cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self.path)
   782         cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self.path)
   784         vlog("# Running", cmd)
   783         vlog("# Running", cmd)
   785         normalizenewlines = os.name == 'nt'
   784         normalizenewlines = os.name == 'nt'
   786         result = self._runcommand(cmd, replacements, env,
   785         result = self._runcommand(cmd, env,
   787                                   normalizenewlines=normalizenewlines)
   786                                   normalizenewlines=normalizenewlines)
   788         if self._aborted:
   787         if self._aborted:
   789             raise KeyboardInterrupt()
   788             raise KeyboardInterrupt()
   790 
   789 
   791         return result
   790         return result
   812 
   811 
   813     @property
   812     @property
   814     def refpath(self):
   813     def refpath(self):
   815         return os.path.join(self._testdir, self.name)
   814         return os.path.join(self._testdir, self.name)
   816 
   815 
   817     def _run(self, replacements, env):
   816     def _run(self, env):
   818         f = open(self.path, 'rb')
   817         f = open(self.path, 'rb')
   819         lines = f.readlines()
   818         lines = f.readlines()
   820         f.close()
   819         f.close()
   821 
   820 
   822         salt, script, after, expected = self._parsetest(lines)
   821         salt, script, after, expected = self._parsetest(lines)
   829         f.close()
   828         f.close()
   830 
   829 
   831         cmd = '%s "%s"' % (self._shell, fname)
   830         cmd = '%s "%s"' % (self._shell, fname)
   832         vlog("# Running", cmd)
   831         vlog("# Running", cmd)
   833 
   832 
   834         exitcode, output = self._runcommand(cmd, replacements, env)
   833         exitcode, output = self._runcommand(cmd, env)
   835 
   834 
   836         if self._aborted:
   835         if self._aborted:
   837             raise KeyboardInterrupt()
   836             raise KeyboardInterrupt()
   838 
   837 
   839         # Do not merge output if skipped. Return hghave message instead.
   838         # Do not merge output if skipped. Return hghave message instead.