tests/run-tests.py
changeset 2133 4334be196f8d
parent 2110 25a8d116ab6a
child 2144 d3bddedfdbd0
equal deleted inserted replaced
2132:4990b62fd0a6 2133:4334be196f8d
    38         name = os.path.join(p, program)
    38         name = os.path.join(p, program)
    39         if os.access(name, os.X_OK):
    39         if os.access(name, os.X_OK):
    40             return name
    40             return name
    41     return None
    41     return None
    42 
    42 
    43 # Before we go any further, check for pre-requisite tools
    43 def check_required_tools():
    44 # stuff from coreutils (cat, rm, etc) are not tested
    44     # Before we go any further, check for pre-requisite tools
    45 for p in required_tools:
    45     # stuff from coreutils (cat, rm, etc) are not tested
    46     if os.name == 'nt':
    46     for p in required_tools:
    47         p += '.exe'
    47         if os.name == 'nt':
    48     found = find_program(p)
    48             p += '.exe'
    49     if found:
    49         found = find_program(p)
    50         vlog("# Found prerequisite", p, "at", found)
    50         if found:
    51     else:
    51             vlog("# Found prerequisite", p, "at", found)
    52         print "WARNING: Did not find prerequisite tool: "+p
    52         else:
    53 
    53             print "WARNING: Did not find prerequisite tool: "+p
    54 # Reset some environment variables to well-known values
       
    55 os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
       
    56 os.environ['TZ'] = 'GMT'
       
    57 
       
    58 os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
       
    59 os.environ["HGMERGE"]  = sys.executable + ' -c "import sys; sys.exit(0)"'
       
    60 os.environ["HGUSER"]   = "test"
       
    61 os.environ["HGRCPATH"] = ""
       
    62 
       
    63 TESTDIR = os.environ["TESTDIR"] = os.getcwd()
       
    64 HGTMP   = os.environ["HGTMP"]   = tempfile.mkdtemp("", "hgtests.")
       
    65 
    54 
    66 def cleanup_exit():
    55 def cleanup_exit():
    67     if verbose:
    56     if verbose:
    68         print "# Cleaning up HGTMP", HGTMP
    57         print "# Cleaning up HGTMP", HGTMP
    69     shutil.rmtree(HGTMP, True)
    58     shutil.rmtree(HGTMP, True)
    70 
    59 
    71 vlog("# Using TESTDIR", TESTDIR)
    60 def install_hg():
    72 vlog("# Using HGTMP", HGTMP)
    61     vlog("# Performing temporary installation of HG")
    73 
    62     INST = os.path.join(HGTMP, "install")
    74 os.umask(022)
    63     BINDIR = os.path.join(INST, "bin")
    75 
    64     PYTHONDIR = os.path.join(INST, "lib", "python")
    76 vlog("# Performing temporary installation of HG")
    65     installerrs = os.path.join("tests", "install.err")
    77 INST = os.path.join(HGTMP, "install")
    66 
    78 BINDIR = os.path.join(INST, "bin")
    67     os.chdir("..") # Get back to hg root
    79 PYTHONDIR = os.path.join(INST, "lib", "python")
    68     cmd = '%s setup.py install --home="%s" --install-lib="%s" >%s 2>&1' % \
    80 installerrs = os.path.join("tests", "install.err")
    69         (sys.executable, INST, PYTHONDIR, installerrs)
    81 
    70     vlog("# Running", cmd)
    82 os.chdir("..") # Get back to hg root
    71     if os.system(cmd) == 0:
    83 cmd = '%s setup.py install --home="%s" --install-lib="%s" >%s 2>&1' % \
    72         if not verbose:
    84     (sys.executable, INST, PYTHONDIR, installerrs)
    73             os.remove(installerrs)
    85 vlog("# Running", cmd)
    74     else:
    86 if os.system(cmd) == 0:
    75         f = open(installerrs)
    87     if not verbose:
    76         for line in f:
    88         os.remove(installerrs)
    77             print line,
    89 else:
    78         f.close()
    90     f = open(installerrs)
    79         sys.exit(1)
    91     for line in f:
    80     os.chdir(TESTDIR)
    92         print line,
    81 
    93     f.close()
    82     os.environ["PATH"] = "%s%s%s" % (BINDIR, os.pathsep, os.environ["PATH"])
    94     cleanup_exit()
    83     os.environ["PYTHONPATH"] = PYTHONDIR
    95     sys.exit(1)
       
    96 os.chdir(TESTDIR)
       
    97 
       
    98 os.environ["PATH"] = "%s%s%s" % (BINDIR, os.pathsep, os.environ["PATH"])
       
    99 os.environ["PYTHONPATH"] = PYTHONDIR
       
   100 
       
   101 tests = 0
       
   102 failed = 0
       
   103 
    84 
   104 def run(cmd, split_lines=True):
    85 def run(cmd, split_lines=True):
   105     """Run command in a sub-process, capturing the output (stdout and stderr).
    86     """Run command in a sub-process, capturing the output (stdout and stderr).
   106     Return the exist code, and output."""
    87     Return the exist code, and output."""
   107     # TODO: Use subprocess.Popen if we're running on Python 2.4
    88     # TODO: Use subprocess.Popen if we're running on Python 2.4
   174 
   155 
   175     os.chdir(TESTDIR)
   156     os.chdir(TESTDIR)
   176     shutil.rmtree(tmpd, True)
   157     shutil.rmtree(tmpd, True)
   177     return ret == 0
   158     return ret == 0
   178 
   159 
   179 for test in os.listdir("."):
   160 
   180     if test.startswith("test-"):
   161 os.umask(022)
   181         if '~' in test or re.search(r'\.(out|err)$', test):
   162 
   182             continue
   163 check_required_tools()
   183         if not run_one(test):
   164 
   184             failed += 1
   165 # Reset some environment variables to well-known values so that
   185         tests += 1
   166 # the tests produce repeatable output.
   186 
   167 os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
   187 print "# Ran %d tests, %d failed." % (tests, failed)
   168 os.environ['TZ'] = 'GMT'
   188 
   169 
   189 cleanup_exit()
   170 os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
       
   171 os.environ["HGMERGE"]  = sys.executable + ' -c "import sys; sys.exit(0)"'
       
   172 os.environ["HGUSER"]   = "test"
       
   173 os.environ["HGRCPATH"] = ""
       
   174 
       
   175 TESTDIR = os.environ["TESTDIR"] = os.getcwd()
       
   176 HGTMP   = os.environ["HGTMP"]   = tempfile.mkdtemp("", "hgtests.")
       
   177 vlog("# Using TESTDIR", TESTDIR)
       
   178 vlog("# Using HGTMP", HGTMP)
       
   179 
       
   180 try:
       
   181     install_hg()
       
   182 
       
   183     tests = 0
       
   184     failed = 0
       
   185 
       
   186     if len(args) == 0:
       
   187         args = os.listdir(".")
       
   188     for test in args:
       
   189         if test.startswith("test-"):
       
   190             if '~' in test or re.search(r'\.(out|err)$', test):
       
   191                 continue
       
   192             if not run_one(test):
       
   193                 failed += 1
       
   194             tests += 1
       
   195 
       
   196     print "\n# Ran %d tests, %d failed." % (tests, failed)
       
   197 finally:
       
   198     cleanup_exit()
   190 
   199 
   191 if failed:
   200 if failed:
   192     sys.exit(1)
   201     sys.exit(1)