##// END OF EJS Templates
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell -
r2133:4334be19 default
parent child Browse files
Show More
@@ -40,66 +40,47 b' def find_program(program):'
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")
78 BINDIR = os.path.join(INST, "bin")
79 PYTHONDIR = os.path.join(INST, "lib", "python")
80 installerrs = os.path.join("tests", "install.err")
81
66
82 os.chdir("..") # Get back to hg root
67 os.chdir("..") # Get back to hg root
83 cmd = '%s setup.py install --home="%s" --install-lib="%s" >%s 2>&1' % \
68 cmd = '%s setup.py install --home="%s" --install-lib="%s" >%s 2>&1' % \
84 (sys.executable, INST, PYTHONDIR, installerrs)
69 (sys.executable, INST, PYTHONDIR, installerrs)
85 vlog("# Running", cmd)
70 vlog("# Running", cmd)
86 if os.system(cmd) == 0:
71 if os.system(cmd) == 0:
87 if not verbose:
72 if not verbose:
88 os.remove(installerrs)
73 os.remove(installerrs)
89 else:
74 else:
90 f = open(installerrs)
75 f = open(installerrs)
91 for line in f:
76 for line in f:
92 print line,
77 print line,
93 f.close()
78 f.close()
94 cleanup_exit()
79 sys.exit(1)
95 sys.exit(1)
80 os.chdir(TESTDIR)
96 os.chdir(TESTDIR)
97
81
98 os.environ["PATH"] = "%s%s%s" % (BINDIR, os.pathsep, os.environ["PATH"])
82 os.environ["PATH"] = "%s%s%s" % (BINDIR, os.pathsep, os.environ["PATH"])
99 os.environ["PYTHONPATH"] = PYTHONDIR
83 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).
@@ -176,17 +157,45 b' def run_one(test):'
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.
167 os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
168 os.environ['TZ'] = 'GMT'
169
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)
186
179
187 print "# Ran %d tests, %d failed." % (tests, failed)
180 try:
181 install_hg()
182
183 tests = 0
184 failed = 0
188
185
189 cleanup_exit()
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)
General Comments 0
You need to be logged in to leave comments. Login now