Mercurial > hg
comparison tests/run-tests.py @ 12639:236058a65cb4
tests: replace test tmp directory with $TESTTMP in test output
This reduces the number of patterns that must be adjusted when writing tests.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Fri, 08 Oct 2010 22:36:10 -0500 |
parents | 9a2de8dae27b |
children | d08bb64888bc |
comparison
equal
deleted
inserted
replaced
12638:eb09e3c9c471 | 12639:236058a65cb4 |
---|---|
441 pass | 441 pass |
442 | 442 |
443 def alarmed(signum, frame): | 443 def alarmed(signum, frame): |
444 raise Timeout | 444 raise Timeout |
445 | 445 |
446 def pytest(test, options): | 446 def pytest(test, options, replacements): |
447 py3kswitch = options.py3k_warnings and ' -3' or '' | 447 py3kswitch = options.py3k_warnings and ' -3' or '' |
448 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test) | 448 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test) |
449 vlog("# Running", cmd) | 449 vlog("# Running", cmd) |
450 return run(cmd, options) | 450 return run(cmd, options, replacements) |
451 | 451 |
452 def shtest(test, options): | 452 def shtest(test, options, replacements): |
453 cmd = '"%s"' % test | 453 cmd = '"%s"' % test |
454 vlog("# Running", cmd) | 454 vlog("# Running", cmd) |
455 return run(cmd, options) | 455 return run(cmd, options, replacements) |
456 | 456 |
457 def battest(test, options): | 457 def battest(test, options, replacements): |
458 # To reliably get the error code from batch files on WinXP, | 458 # To reliably get the error code from batch files on WinXP, |
459 # the "cmd /c call" prefix is needed. Grrr | 459 # the "cmd /c call" prefix is needed. Grrr |
460 cmd = 'cmd /c call "%s"' % testpath | 460 cmd = 'cmd /c call "%s"' % testpath |
461 vlog("# Running", cmd) | 461 vlog("# Running", cmd) |
462 return run(cmd, options) | 462 return run(cmd, options, replacements) |
463 | 463 |
464 def tsttest(test, options): | 464 def tsttest(test, options, replacements): |
465 t = open(test) | 465 t = open(test) |
466 out = [] | 466 out = [] |
467 script = [] | 467 script = [] |
468 salt = "SALT" + str(time.time()) | 468 salt = "SALT" + str(time.time()) |
469 | 469 |
498 os.write(fd, l) | 498 os.write(fd, l) |
499 os.close(fd) | 499 os.close(fd) |
500 | 500 |
501 cmd = '/bin/sh "%s"' % name | 501 cmd = '/bin/sh "%s"' % name |
502 vlog("# Running", cmd) | 502 vlog("# Running", cmd) |
503 exitcode, output = run(cmd, options) | 503 exitcode, output = run(cmd, options, replacements) |
504 # do not merge output if skipped, return hghave message instead | 504 # do not merge output if skipped, return hghave message instead |
505 if exitcode == SKIPPED_STATUS: | 505 if exitcode == SKIPPED_STATUS: |
506 return exitcode, output | 506 return exitcode, output |
507 finally: | 507 finally: |
508 os.remove(name) | 508 os.remove(name) |
563 if pos in after: | 563 if pos in after: |
564 postout += after.pop(pos) | 564 postout += after.pop(pos) |
565 | 565 |
566 return exitcode, postout | 566 return exitcode, postout |
567 | 567 |
568 def run(cmd, options): | 568 def run(cmd, options, replacements): |
569 """Run command in a sub-process, capturing the output (stdout and stderr). | 569 """Run command in a sub-process, capturing the output (stdout and stderr). |
570 Return a tuple (exitcode, output). output is None in debug mode.""" | 570 Return a tuple (exitcode, output). output is None in debug mode.""" |
571 # TODO: Use subprocess.Popen if we're running on Python 2.4 | 571 # TODO: Use subprocess.Popen if we're running on Python 2.4 |
572 if options.debug: | 572 if options.debug: |
573 proc = subprocess.Popen(cmd, shell=True) | 573 proc = subprocess.Popen(cmd, shell=True) |
606 except KeyboardInterrupt: | 606 except KeyboardInterrupt: |
607 vlog('# Handling keyboard interrupt') | 607 vlog('# Handling keyboard interrupt') |
608 cleanup() | 608 cleanup() |
609 raise | 609 raise |
610 | 610 |
611 for s, r in replacements: | |
612 output = output.replace(s, r) | |
611 return ret, splitnewlines(output) | 613 return ret, splitnewlines(output) |
612 | 614 |
613 def runone(options, test, skips, fails): | 615 def runone(options, test, skips, fails): |
614 '''tristate output: | 616 '''tristate output: |
615 None -> skipped | 617 None -> skipped |
680 elif not os.access(testpath, os.X_OK): | 682 elif not os.access(testpath, os.X_OK): |
681 return skip("not executable") | 683 return skip("not executable") |
682 runner = shtest | 684 runner = shtest |
683 | 685 |
684 # Make a tmp subdirectory to work in | 686 # Make a tmp subdirectory to work in |
685 tmpd = os.path.join(HGTMP, test) | 687 testtmp = os.environ["TESTTMP"] = os.path.join(HGTMP, test) |
686 os.mkdir(tmpd) | 688 os.mkdir(testtmp) |
687 os.chdir(tmpd) | 689 os.chdir(testtmp) |
688 | 690 |
689 if options.timeout > 0: | 691 if options.timeout > 0: |
690 signal.alarm(options.timeout) | 692 signal.alarm(options.timeout) |
691 | 693 |
692 ret, out = runner(testpath, options) | 694 ret, out = runner(testpath, options, [(testtmp, '$TESTTMP')]) |
693 vlog("# Ret was:", ret) | 695 vlog("# Ret was:", ret) |
694 | 696 |
695 if options.timeout > 0: | 697 if options.timeout > 0: |
696 signal.alarm(0) | 698 signal.alarm(0) |
697 | 699 |
753 | 755 |
754 killdaemons() | 756 killdaemons() |
755 | 757 |
756 os.chdir(TESTDIR) | 758 os.chdir(TESTDIR) |
757 if not options.keep_tmpdir: | 759 if not options.keep_tmpdir: |
758 shutil.rmtree(tmpd, True) | 760 shutil.rmtree(testtmp, True) |
759 if skipped: | 761 if skipped: |
760 return None | 762 return None |
761 return ret == 0 | 763 return ret == 0 |
762 | 764 |
763 _hgpath = None | 765 _hgpath = None |