##// END OF EJS Templates
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward -
r8094:60a9e3cf default
parent child Browse files
Show More
@@ -183,7 +183,7 b' def check_required_tools():'
183 else:
183 else:
184 print "WARNING: Did not find prerequisite tool: "+p
184 print "WARNING: Did not find prerequisite tool: "+p
185
185
186 def cleanup_exit():
186 def cleanup_exit(options):
187 if not options.keep_tmpdir:
187 if not options.keep_tmpdir:
188 if verbose:
188 if verbose:
189 print "# Cleaning up HGTMP", HGTMP
189 print "# Cleaning up HGTMP", HGTMP
@@ -206,7 +206,7 b' def use_correct_python():'
206 shutil.copyfile(sys.executable, my_python)
206 shutil.copyfile(sys.executable, my_python)
207 shutil.copymode(sys.executable, my_python)
207 shutil.copymode(sys.executable, my_python)
208
208
209 def install_hg():
209 def install_hg(options):
210 global python
210 global python
211 vlog("# Performing temporary installation of HG")
211 vlog("# Performing temporary installation of HG")
212 installerrs = os.path.join("tests", "install.err")
212 installerrs = os.path.join("tests", "install.err")
@@ -281,7 +281,7 b' def _hgpath():'
281 hgpath.close()
281 hgpath.close()
282 return path
282 return path
283
283
284 def output_coverage():
284 def output_coverage(options):
285 vlog("# Producing coverage report")
285 vlog("# Producing coverage report")
286 omit = [BINDIR, TESTDIR, PYTHONDIR]
286 omit = [BINDIR, TESTDIR, PYTHONDIR]
287 if not options.cover_stdlib:
287 if not options.cover_stdlib:
@@ -339,7 +339,7 b' def run(cmd):'
339 % options.timeout)
339 % options.timeout)
340 return ret, splitnewlines(output)
340 return ret, splitnewlines(output)
341
341
342 def run_one(test, skips, fails):
342 def run_one(options, test, skips, fails):
343 '''tristate output:
343 '''tristate output:
344 None -> skipped
344 None -> skipped
345 True -> passed
345 True -> passed
@@ -496,7 +496,7 b' def run_one(test, skips, fails):'
496 return None
496 return None
497 return ret == 0
497 return ret == 0
498
498
499 def run_children(tests):
499 def run_children(options, expecthg, tests):
500 if not options.with_hg:
500 if not options.with_hg:
501 install_hg()
501 install_hg()
502 if hgpkg != expecthg:
502 if hgpkg != expecthg:
@@ -561,14 +561,14 b' def run_children(tests):'
561 tested, skipped, failed)
561 tested, skipped, failed)
562 sys.exit(failures != 0)
562 sys.exit(failures != 0)
563
563
564 def run_tests(tests):
564 def run_tests(options, expecthg, tests):
565 global DAEMON_PIDS, HGRCPATH
565 global DAEMON_PIDS, HGRCPATH
566 DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids')
566 DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids')
567 HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc')
567 HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc')
568
568
569 try:
569 try:
570 if not options.with_hg:
570 if not options.with_hg:
571 install_hg()
571 install_hg(options)
572
572
573 if hgpkg != expecthg:
573 if hgpkg != expecthg:
574 print '# Testing unexpected mercurial: %s' % hgpkg
574 print '# Testing unexpected mercurial: %s' % hgpkg
@@ -602,7 +602,7 b' def run_tests(tests):'
602 if options.retest and not os.path.exists(test + ".err"):
602 if options.retest and not os.path.exists(test + ".err"):
603 skipped += 1
603 skipped += 1
604 continue
604 continue
605 ret = run_one(test, skips, fails)
605 ret = run_one(options, test, skips, fails)
606 if ret is None:
606 if ret is None:
607 skipped += 1
607 skipped += 1
608 elif not ret:
608 elif not ret:
@@ -639,7 +639,7 b' def run_tests(tests):'
639 tested, skipped, failed)
639 tested, skipped, failed)
640
640
641 if coverage:
641 if coverage:
642 output_coverage()
642 output_coverage(options)
643 except KeyboardInterrupt:
643 except KeyboardInterrupt:
644 failed = True
644 failed = True
645 print "\ninterrupted!"
645 print "\ninterrupted!"
@@ -647,63 +647,67 b' def run_tests(tests):'
647 if failed:
647 if failed:
648 sys.exit(1)
648 sys.exit(1)
649
649
650 (options, args) = parse_args()
650 def main():
651 if not options.child:
651 (options, args) = parse_args()
652 os.umask(022)
652 if not options.child:
653 os.umask(022)
653
654
654 check_required_tools()
655 check_required_tools()
655
656
656 # Reset some environment variables to well-known values so that
657 # Reset some environment variables to well-known values so that
657 # the tests produce repeatable output.
658 # the tests produce repeatable output.
658 os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
659 os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
659 os.environ['TZ'] = 'GMT'
660 os.environ['TZ'] = 'GMT'
660 os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>"
661 os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>"
661 os.environ['CDPATH'] = ''
662 os.environ['CDPATH'] = ''
662
663
663 TESTDIR = os.environ["TESTDIR"] = os.getcwd()
664 global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE
664 HGTMP = os.environ['HGTMP'] = os.path.realpath(tempfile.mkdtemp('', 'hgtests.',
665 TESTDIR = os.environ["TESTDIR"] = os.getcwd()
665 options.tmpdir))
666 HGTMP = os.environ['HGTMP'] = os.path.realpath(tempfile.mkdtemp('', 'hgtests.',
666 DAEMON_PIDS = None
667 options.tmpdir))
667 HGRCPATH = None
668 DAEMON_PIDS = None
669 HGRCPATH = None
668
670
669 os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
671 os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
670 os.environ["HGMERGE"] = "internal:merge"
672 os.environ["HGMERGE"] = "internal:merge"
671 os.environ["HGUSER"] = "test"
673 os.environ["HGUSER"] = "test"
672 os.environ["HGENCODING"] = "ascii"
674 os.environ["HGENCODING"] = "ascii"
673 os.environ["HGENCODINGMODE"] = "strict"
675 os.environ["HGENCODINGMODE"] = "strict"
674 os.environ["HGPORT"] = str(options.port)
676 os.environ["HGPORT"] = str(options.port)
675 os.environ["HGPORT1"] = str(options.port + 1)
677 os.environ["HGPORT1"] = str(options.port + 1)
676 os.environ["HGPORT2"] = str(options.port + 2)
678 os.environ["HGPORT2"] = str(options.port + 2)
677
679
678 if options.with_hg:
680 if options.with_hg:
679 INST = options.with_hg
681 INST = options.with_hg
680 else:
682 else:
681 INST = os.path.join(HGTMP, "install")
683 INST = os.path.join(HGTMP, "install")
682 BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
684 BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
683 PYTHONDIR = os.path.join(INST, "lib", "python")
685 PYTHONDIR = os.path.join(INST, "lib", "python")
684 COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
686 COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
685
687
686 expecthg = os.path.join(HGTMP, 'install', 'lib', 'python', 'mercurial')
688 expecthg = os.path.join(HGTMP, 'install', 'lib', 'python', 'mercurial')
687 hgpkg = None
689 hgpkg = None
688
690
689 if len(args) == 0:
691 if len(args) == 0:
690 args = os.listdir(".")
692 args = os.listdir(".")
691 args.sort()
693 args.sort()
692
694
693 tests = []
695 tests = []
694 for test in args:
696 for test in args:
695 if (test.startswith("test-") and '~' not in test and
697 if (test.startswith("test-") and '~' not in test and
696 ('.' not in test or test.endswith('.py') or
698 ('.' not in test or test.endswith('.py') or
697 test.endswith('.bat'))):
699 test.endswith('.bat'))):
698 tests.append(test)
700 tests.append(test)
701
702 vlog("# Using TESTDIR", TESTDIR)
703 vlog("# Using HGTMP", HGTMP)
699
704
700 vlog("# Using TESTDIR", TESTDIR)
705 try:
701 vlog("# Using HGTMP", HGTMP)
706 if len(tests) > 1 and options.jobs > 1:
707 run_children(options, expecthg, tests)
708 else:
709 run_tests(options, expecthg, tests)
710 finally:
711 cleanup_exit(options)
702
712
703 try:
713 main()
704 if len(tests) > 1 and options.jobs > 1:
705 run_children(tests)
706 else:
707 run_tests(tests)
708 finally:
709 cleanup_exit()
General Comments 0
You need to be logged in to leave comments. Login now