Show More
@@ -563,10 +563,27 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 |
ret |
|
573 | ret, out = self._run(self._replacements, env) | |
568 | finally: |
|
574 | updateduration() | |
569 | killdaemons(env['DAEMON_PIDS']) |
|
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 | ||||
|
584 | killdaemons(env['DAEMON_PIDS']) | |||
|
585 | ||||
|
586 | return result | |||
570 |
|
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()') | |
@@ -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