Mercurial > hg
comparison tests/run-tests.py @ 21308:935ade207253
run-tests: capture reference output in TestResult class
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 19 Apr 2014 14:09:46 -0700 |
parents | cd4fd7b3c3c4 |
children | 0b123e6a318c |
comparison
equal
deleted
inserted
replaced
21307:cd4fd7b3c3c4 | 21308:935ade207253 |
---|---|
557 self._testtmp = os.path.join(self.threadtmp, os.path.basename(path)) | 557 self._testtmp = os.path.join(self.threadtmp, os.path.basename(path)) |
558 os.mkdir(self._testtmp) | 558 os.mkdir(self._testtmp) |
559 | 559 |
560 self._setreplacements(count) | 560 self._setreplacements(count) |
561 | 561 |
562 def run(self, result): | 562 def run(self, result, refpath): |
563 env = self._getenv() | 563 env = self._getenv() |
564 createhgrc(env['HGRCPATH'], self._options) | 564 createhgrc(env['HGRCPATH'], self._options) |
565 | 565 |
566 starttime = time.time() | 566 starttime = time.time() |
567 | 567 |
579 except Exception, e: | 579 except Exception, e: |
580 updateduration() | 580 updateduration() |
581 result.exception = e | 581 result.exception = e |
582 | 582 |
583 killdaemons(env['DAEMON_PIDS']) | 583 killdaemons(env['DAEMON_PIDS']) |
584 | |
585 # If we're not in --debug mode and reference output file exists, | |
586 # check test output against it. | |
587 if self._options.debug: | |
588 result.refout = None # to match "out is None" | |
589 elif os.path.exists(refpath): | |
590 f = open(refpath, 'r') | |
591 result.refout = f.read().splitlines(True) | |
592 f.close() | |
593 else: | |
594 result.refout = [] | |
584 | 595 |
585 def _run(self, replacements, env): | 596 def _run(self, replacements, env): |
586 raise NotImplemented('Subclasses must implement Test.run()') | 597 raise NotImplemented('Subclasses must implement Test.run()') |
587 | 598 |
588 def _setreplacements(self, count): | 599 def _setreplacements(self, count): |
646 self.ret = None | 657 self.ret = None |
647 self.out = None | 658 self.out = None |
648 self.duration = None | 659 self.duration = None |
649 self.interrupted = False | 660 self.interrupted = False |
650 self.exception = None | 661 self.exception = None |
662 self.refout = None | |
651 | 663 |
652 @property | 664 @property |
653 def skipped(self): | 665 def skipped(self): |
654 """Whether the test was skipped.""" | 666 """Whether the test was skipped.""" |
655 return self.ret == SKIPPED_STATUS | 667 return self.ret == SKIPPED_STATUS |
1053 if os.path.exists(err): | 1065 if os.path.exists(err): |
1054 os.remove(err) # Remove any previous output files | 1066 os.remove(err) # Remove any previous output files |
1055 | 1067 |
1056 t = runner(testpath, options, count) | 1068 t = runner(testpath, options, count) |
1057 res = TestResult() | 1069 res = TestResult() |
1058 t.run(res) | 1070 t.run(res, ref) |
1059 | 1071 |
1060 if res.interrupted: | 1072 if res.interrupted: |
1061 log('INTERRUPTED: %s (after %d seconds)' % (test, res.duration)) | 1073 log('INTERRUPTED: %s (after %d seconds)' % (test, res.duration)) |
1062 raise KeyboardInterrupt() | 1074 raise KeyboardInterrupt() |
1063 | 1075 |
1069 | 1081 |
1070 times.append((test, res.duration)) | 1082 times.append((test, res.duration)) |
1071 vlog("# Ret was:", ret) | 1083 vlog("# Ret was:", ret) |
1072 | 1084 |
1073 skipped = res.skipped | 1085 skipped = res.skipped |
1074 | 1086 refout = res.refout |
1075 # If we're not in --debug mode and reference output file exists, | |
1076 # check test output against it. | |
1077 if options.debug: | |
1078 refout = None # to match "out is None" | |
1079 elif os.path.exists(ref): | |
1080 f = open(ref, "r") | |
1081 refout = f.read().splitlines(True) | |
1082 f.close() | |
1083 else: | |
1084 refout = [] | |
1085 | 1087 |
1086 if (ret != 0 or out != refout) and not skipped and not options.debug: | 1088 if (ret != 0 or out != refout) and not skipped and not options.debug: |
1087 # Save errors to a file for diagnosis | 1089 # Save errors to a file for diagnosis |
1088 f = open(err, "wb") | 1090 f = open(err, "wb") |
1089 for line in out: | 1091 for line in out: |