Mercurial > hg > mercurial-crew-with-dirclash
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) |