tests/run-tests.py
branchstable
changeset 775 16f4cb2900fe
parent 741 e5bfe51eeea9
child 776 1869efbf104d
equal deleted inserted replaced
774:997913902cf2 775:16f4cb2900fe
   439     pass
   439     pass
   440 
   440 
   441 def alarmed(signum, frame):
   441 def alarmed(signum, frame):
   442     raise Timeout
   442     raise Timeout
   443 
   443 
       
   444 def pytest(test, options):
       
   445     py3kswitch = options.py3k_warnings and ' -3' or ''
       
   446     cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
       
   447     vlog("# Running", cmd)
       
   448     return run(cmd, options)
       
   449 
       
   450 def shtest(test, options):
       
   451     cmd = '"%s"' % test
       
   452     vlog("# Running", cmd)
       
   453     return run(cmd, options)
       
   454 
       
   455 def battest(test, options):
       
   456     # To reliably get the error code from batch files on WinXP,
       
   457     # the "cmd /c call" prefix is needed. Grrr
       
   458     cmd = 'cmd /c call "%s"' % testpath
       
   459     vlog("# Running", cmd)
       
   460     return run(cmd, options)
       
   461 
   444 def run(cmd, options):
   462 def run(cmd, options):
   445     """Run command in a sub-process, capturing the output (stdout and stderr).
   463     """Run command in a sub-process, capturing the output (stdout and stderr).
   446     Return a tuple (exitcode, output).  output is None in debug mode."""
   464     Return a tuple (exitcode, output).  output is None in debug mode."""
   447     # TODO: Use subprocess.Popen if we're running on Python 2.4
   465     # TODO: Use subprocess.Popen if we're running on Python 2.4
   448     if options.debug:
   466     if options.debug:
   535     except:
   553     except:
   536         firstline = ''
   554         firstline = ''
   537     lctest = test.lower()
   555     lctest = test.lower()
   538 
   556 
   539     if lctest.endswith('.py') or firstline == '#!/usr/bin/env python':
   557     if lctest.endswith('.py') or firstline == '#!/usr/bin/env python':
   540         py3kswitch = options.py3k_warnings and ' -3' or ''
   558         runner = pytest
   541         cmd = '%s%s "%s"' % (PYTHON, py3kswitch, testpath)
       
   542     elif lctest.endswith('.bat'):
   559     elif lctest.endswith('.bat'):
   543         # do not run batch scripts on non-windows
   560         # do not run batch scripts on non-windows
   544         if os.name != 'nt':
   561         if os.name != 'nt':
   545             return skip("batch script")
   562             return skip("batch script")
   546         # To reliably get the error code from batch files on WinXP,
   563         runner = battest
   547         # the "cmd /c call" prefix is needed. Grrr
       
   548         cmd = 'cmd /c call "%s"' % testpath
       
   549     else:
   564     else:
   550         # do not run shell scripts on windows
   565         # do not run shell scripts on windows
   551         if os.name == 'nt':
   566         if os.name == 'nt':
   552             return skip("shell script")
   567             return skip("shell script")
   553         # do not try to run non-executable programs
   568         # do not try to run non-executable programs
   554         if not os.path.exists(testpath):
   569         if not os.path.exists(testpath):
   555             return fail("does not exist")
   570             return fail("does not exist")
   556         elif not os.access(testpath, os.X_OK):
   571         elif not os.access(testpath, os.X_OK):
   557             return skip("not executable")
   572             return skip("not executable")
   558         cmd = '"%s"' % testpath
   573         runner = shtest
   559 
   574 
   560     # Make a tmp subdirectory to work in
   575     # Make a tmp subdirectory to work in
   561     tmpd = os.path.join(HGTMP, test)
   576     tmpd = os.path.join(HGTMP, test)
   562     os.mkdir(tmpd)
   577     os.mkdir(tmpd)
   563     os.chdir(tmpd)
   578     os.chdir(tmpd)
   564 
   579 
   565     if options.timeout > 0:
   580     if options.timeout > 0:
   566         signal.alarm(options.timeout)
   581         signal.alarm(options.timeout)
   567 
   582 
   568     vlog("# Running", cmd)
   583     ret, out = runner(testpath, options)
   569     ret, out = run(cmd, options)
       
   570     vlog("# Ret was:", ret)
   584     vlog("# Ret was:", ret)
   571 
   585 
   572     if options.timeout > 0:
   586     if options.timeout > 0:
   573         signal.alarm(0)
   587         signal.alarm(0)
   574 
   588