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) |