comparison tests/run-tests.py @ 2133:4334be196f8d

Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
author Stephen Darnell <stephen@darnell.plus.com>
date Wed, 26 Apr 2006 16:54:07 +0200
parents 25a8d116ab6a
children d3bddedfdbd0
comparison
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)