Mercurial > hg
comparison tests/run-tests.py @ 13994:f31a5b7f5c07
run-tests: use a results dict
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 22 Apr 2011 12:24:22 -0500 |
parents | 174d0a113757 |
children | b29b7cbc252f |
comparison
equal
deleted
inserted
replaced
13993:174d0a113757 | 13994:f31a5b7f5c07 |
---|---|
631 | 631 |
632 for s, r in replacements: | 632 for s, r in replacements: |
633 output = re.sub(s, r, output) | 633 output = re.sub(s, r, output) |
634 return ret, splitnewlines(output) | 634 return ret, splitnewlines(output) |
635 | 635 |
636 def runone(options, test, skips, passes, fails, ignores): | 636 def runone(options, test, results): |
637 '''tristate output: | 637 '''tristate output: |
638 None -> skipped | 638 None -> skipped |
639 True -> passed | 639 True -> passed |
640 False -> failed''' | 640 False -> failed''' |
641 | 641 |
642 testpath = os.path.join(TESTDIR, test) | 642 testpath = os.path.join(TESTDIR, test) |
643 | 643 |
644 def skip(msg): | 644 def skip(msg): |
645 if not options.verbose: | 645 if not options.verbose: |
646 skips.append((test, msg)) | 646 results['s'].append((test, msg)) |
647 else: | 647 else: |
648 print "\nSkipping %s: %s" % (testpath, msg) | 648 print "\nSkipping %s: %s" % (testpath, msg) |
649 return None | 649 return None |
650 | 650 |
651 def fail(msg, ret): | 651 def fail(msg, ret): |
658 if test.endswith(".t"): | 658 if test.endswith(".t"): |
659 rename(test + ".err", test) | 659 rename(test + ".err", test) |
660 else: | 660 else: |
661 rename(test + ".err", test + ".out") | 661 rename(test + ".err", test + ".out") |
662 return | 662 return |
663 fails.append((test, msg)) | 663 results['f'].append((test, msg)) |
664 | |
665 def success(): | |
666 results['p'].append(test) | |
667 | |
668 def ignore(msg): | |
669 results['i'].append((test, msg)) | |
664 | 670 |
665 if (test.startswith("test-") and '~' not in test and | 671 if (test.startswith("test-") and '~' not in test and |
666 ('.' not in test or test.endswith('.py') or | 672 ('.' not in test or test.endswith('.py') or |
667 test.endswith('.bat') or test.endswith('.t'))): | 673 test.endswith('.bat') or test.endswith('.t'))): |
668 if not os.path.exists(test): | 674 if not os.path.exists(test): |
676 if filename is not None: | 682 if filename is not None: |
677 skipped.append((test, "blacklisted (%s)" % filename)) | 683 skipped.append((test, "blacklisted (%s)" % filename)) |
678 return None | 684 return None |
679 | 685 |
680 if options.retest and not os.path.exists(test + ".err"): | 686 if options.retest and not os.path.exists(test + ".err"): |
681 ignores.append((test, "not retesting")) | 687 ignore("not retesting") |
682 return None | 688 return None |
683 | 689 |
684 if options.keywords: | 690 if options.keywords: |
685 fp = open(test) | 691 fp = open(test) |
686 t = fp.read().lower() + test.lower() | 692 t = fp.read().lower() + test.lower() |
687 fp.close() | 693 fp.close() |
688 for k in options.keywords.lower().split(): | 694 for k in options.keywords.lower().split(): |
689 if k in t: | 695 if k in t: |
690 break | 696 break |
691 else: | 697 else: |
692 ignores.append((test, "doesn't match keyword")) | 698 ignore("doesn't match keyword") |
693 return None | 699 return None |
694 | 700 |
695 vlog("# Test", test) | 701 vlog("# Test", test) |
696 | 702 |
697 # create a fresh hgrc | 703 # create a fresh hgrc |
754 if options.timeout > 0: | 760 if options.timeout > 0: |
755 signal.alarm(0) | 761 signal.alarm(0) |
756 | 762 |
757 mark = '.' | 763 mark = '.' |
758 if ret == 0: | 764 if ret == 0: |
759 passes.append(test) | 765 success() |
760 | 766 |
761 skipped = (ret == SKIPPED_STATUS) | 767 skipped = (ret == SKIPPED_STATUS) |
762 | 768 |
763 # If we're not in --debug mode and reference output file exists, | 769 # If we're not in --debug mode and reference output file exists, |
764 # check test output against it. | 770 # check test output against it. |
931 def runtests(options, tests): | 937 def runtests(options, tests): |
932 global DAEMON_PIDS, HGRCPATH | 938 global DAEMON_PIDS, HGRCPATH |
933 DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids') | 939 DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids') |
934 HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc') | 940 HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc') |
935 | 941 |
942 results = dict(p=[], f=[], s=[], i=[]) | |
943 | |
936 try: | 944 try: |
937 if INST: | 945 if INST: |
938 installhg(options) | 946 installhg(options) |
939 _checkhglib("Testing") | 947 _checkhglib("Testing") |
940 | 948 |
955 tests.pop(0) | 963 tests.pop(0) |
956 if not tests: | 964 if not tests: |
957 print "running all tests" | 965 print "running all tests" |
958 tests = orig | 966 tests = orig |
959 | 967 |
960 passes = [] | |
961 skips = [] | |
962 fails = [] | |
963 ignores = [] | |
964 | |
965 for test in tests: | 968 for test in tests: |
966 ret = runone(options, test, skips, passes, fails, ignores) | 969 ret = runone(options, test, results) |
967 if options.first and ret is not None and not ret: | 970 if options.first and ret is not None and not ret: |
968 break | 971 break |
972 | |
973 failed = len(results['f']) | |
974 tested = len(results['p']) + failed | |
975 skipped = len(results['s']) | |
976 ignored = len(results['i']) | |
969 | 977 |
970 if options.child: | 978 if options.child: |
971 fp = os.fdopen(options.child, 'w') | 979 fp = os.fdopen(options.child, 'w') |
972 fp.write('%d\n%d\n%d\n' % (tested, skipped, failed)) | 980 fp.write('%d\n%d\n%d\n' % (tested, skipped, failed)) |
973 for s in skips: | 981 for s in results['s']: |
974 fp.write("%s %s\n" % s) | 982 fp.write("%s %s\n" % s) |
975 for s in fails: | 983 for s in results['f']: |
976 fp.write("%s %s\n" % s) | 984 fp.write("%s %s\n" % s) |
977 fp.close() | 985 fp.close() |
978 else: | 986 else: |
979 print | 987 print |
980 for s in skips: | 988 for s in results['s']: |
981 print "Skipped %s: %s" % s | 989 print "Skipped %s: %s" % s |
982 for s in fails: | 990 for s in results['f']: |
983 print "Failed %s: %s" % s | 991 print "Failed %s: %s" % s |
984 _checkhglib("Tested") | 992 _checkhglib("Tested") |
985 print "# Ran %d tests, %d skipped, %d failed." % ( | 993 print "# Ran %d tests, %d skipped, %d failed." % ( |
986 len(passes) + len(fails), len(skips) + len(ignores), len(fails)) | 994 tested, skipped + ignored, failed) |
987 | 995 |
988 if options.anycoverage: | 996 if options.anycoverage: |
989 outputcoverage(options) | 997 outputcoverage(options) |
990 except KeyboardInterrupt: | 998 except KeyboardInterrupt: |
991 failed = True | 999 failed = True |
992 print "\ninterrupted!" | 1000 print "\ninterrupted!" |
993 | 1001 |
994 if fails: | 1002 if failed: |
995 sys.exit(1) | 1003 sys.exit(1) |
996 | 1004 |
997 def main(): | 1005 def main(): |
998 (options, args) = parseargs() | 1006 (options, args) = parseargs() |
999 if not options.child: | 1007 if not options.child: |