##// END OF EJS Templates
run-tests: capture execution results in a TestResult class...
Gregory Szorc -
r21305:d7a7825f default
parent child Browse files
Show More
@@ -563,11 +563,28 b' class Test(object):'
563 env = self._getenv()
563 env = self._getenv()
564 createhgrc(env['HGRCPATH'], self._options)
564 createhgrc(env['HGRCPATH'], self._options)
565
565
566 result = TestResult()
567 starttime = time.time()
568
569 def updateduration():
570 result.duration = time.time() - starttime
571
566 try:
572 try:
567 return self._run(self._replacements, env)
573 ret, out = self._run(self._replacements, env)
568 finally:
574 updateduration()
575 result.ret = ret
576 result.out = out
577 except KeyboardInterrupt:
578 updateduration()
579 result.interrupted = True
580 except Exception, e:
581 updateduration()
582 result.exception = e
583
569 killdaemons(env['DAEMON_PIDS'])
584 killdaemons(env['DAEMON_PIDS'])
570
585
586 return result
587
571 def _run(self, replacements, env):
588 def _run(self, replacements, env):
572 raise NotImplemented('Subclasses must implement Test.run()')
589 raise NotImplemented('Subclasses must implement Test.run()')
573
590
@@ -625,6 +642,16 b' class Test(object):'
625
642
626 return env
643 return env
627
644
645 class TestResult(object):
646 """Holds the result of a test execution."""
647
648 def __init__(self):
649 self.ret = None
650 self.out = None
651 self.duration = None
652 self.interrupted = False
653 self.exception = None
654
628 def pytest(test, wd, options, replacements, env):
655 def pytest(test, wd, options, replacements, env):
629 py3kswitch = options.py3k_warnings and ' -3' or ''
656 py3kswitch = options.py3k_warnings and ' -3' or ''
630 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
657 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
@@ -1025,16 +1052,19 b' def runone(options, test, count):'
1025 os.remove(err) # Remove any previous output files
1052 os.remove(err) # Remove any previous output files
1026
1053
1027 t = runner(testpath, options, count)
1054 t = runner(testpath, options, count)
1055 res = t.run()
1028
1056
1029 starttime = time.time()
1057 if res.interrupted:
1030 try:
1058 log('INTERRUPTED: %s (after %d seconds)' % (test, res.duration))
1031 ret, out = t.run()
1059 raise KeyboardInterrupt()
1032 except KeyboardInterrupt:
1060
1033 endtime = time.time()
1061 if res.exception:
1034 log('INTERRUPTED: %s (after %d seconds)' % (test, endtime - starttime))
1062 return fail('Exception during execution: %s' % res.exception, 255)
1035 raise
1063
1036 endtime = time.time()
1064 ret = res.ret
1037 times.append((test, endtime - starttime))
1065 out = res.out
1066
1067 times.append((test, res.duration))
1038 vlog("# Ret was:", ret)
1068 vlog("# Ret was:", ret)
1039
1069
1040 skipped = (ret == SKIPPED_STATUS)
1070 skipped = (ret == SKIPPED_STATUS)
General Comments 0
You need to be logged in to leave comments. Login now