Mercurial > hg
comparison tests/run-tests.py @ 32311:a77a75a428f7
run-tests: rename test description dict to testdesc
Previously the word "test" was used for both a Test instance and a path or
test dict. This patch renames them so it's clear that "testdesc" is the
dict, and "test" is the instance.
author | Jun Wu <quark@fb.com> |
---|---|
date | Tue, 16 May 2017 21:17:40 -0700 |
parents | b96be0098624 |
children | 7340465bd788 |
comparison
equal
deleted
inserted
replaced
32310:b96be0098624 | 32311:a77a75a428f7 |
---|---|
2060 # we make sure they're all bytestrings | 2060 # we make sure they're all bytestrings |
2061 args = [_bytespath(a) for a in args] | 2061 args = [_bytespath(a) for a in args] |
2062 self.options = options | 2062 self.options = options |
2063 | 2063 |
2064 self._checktools() | 2064 self._checktools() |
2065 tests = self.findtests(args) | 2065 testdescs = self.findtests(args) |
2066 if options.profile_runner: | 2066 if options.profile_runner: |
2067 import statprof | 2067 import statprof |
2068 statprof.start() | 2068 statprof.start() |
2069 result = self._run(tests) | 2069 result = self._run(testdescs) |
2070 if options.profile_runner: | 2070 if options.profile_runner: |
2071 statprof.stop() | 2071 statprof.stop() |
2072 statprof.display() | 2072 statprof.display() |
2073 return result | 2073 return result |
2074 | 2074 |
2075 finally: | 2075 finally: |
2076 os.umask(oldmask) | 2076 os.umask(oldmask) |
2077 | 2077 |
2078 def _run(self, tests): | 2078 def _run(self, testdescs): |
2079 if self.options.random: | 2079 if self.options.random: |
2080 random.shuffle(tests) | 2080 random.shuffle(testdescs) |
2081 else: | 2081 else: |
2082 # keywords for slow tests | 2082 # keywords for slow tests |
2083 slow = {b'svn': 10, | 2083 slow = {b'svn': 10, |
2084 b'cvs': 10, | 2084 b'cvs': 10, |
2085 b'hghave': 10, | 2085 b'hghave': 10, |
2111 val *= mul | 2111 val *= mul |
2112 if f.endswith(b'.py'): | 2112 if f.endswith(b'.py'): |
2113 val /= 10.0 | 2113 val /= 10.0 |
2114 perf[f] = val / 1000.0 | 2114 perf[f] = val / 1000.0 |
2115 return perf[f] | 2115 return perf[f] |
2116 tests.sort(key=sortkey) | 2116 testdescs.sort(key=sortkey) |
2117 | 2117 |
2118 self._testdir = osenvironb[b'TESTDIR'] = getattr( | 2118 self._testdir = osenvironb[b'TESTDIR'] = getattr( |
2119 os, 'getcwdb', os.getcwd)() | 2119 os, 'getcwdb', os.getcwd)() |
2120 | 2120 |
2121 if 'PYTHONHASHSEED' not in os.environ: | 2121 if 'PYTHONHASHSEED' not in os.environ: |
2241 vlog("# Using HGTMP", self._hgtmp) | 2241 vlog("# Using HGTMP", self._hgtmp) |
2242 vlog("# Using PATH", os.environ["PATH"]) | 2242 vlog("# Using PATH", os.environ["PATH"]) |
2243 vlog("# Using", IMPL_PATH, osenvironb[IMPL_PATH]) | 2243 vlog("# Using", IMPL_PATH, osenvironb[IMPL_PATH]) |
2244 | 2244 |
2245 try: | 2245 try: |
2246 return self._runtests(tests) or 0 | 2246 return self._runtests(testdescs) or 0 |
2247 finally: | 2247 finally: |
2248 time.sleep(.1) | 2248 time.sleep(.1) |
2249 self._cleanup() | 2249 self._cleanup() |
2250 | 2250 |
2251 def findtests(self, args): | 2251 def findtests(self, args): |
2265 | 2265 |
2266 return [{'path': t} for t in args | 2266 return [{'path': t} for t in args |
2267 if os.path.basename(t).startswith(b'test-') | 2267 if os.path.basename(t).startswith(b'test-') |
2268 and (t.endswith(b'.py') or t.endswith(b'.t'))] | 2268 and (t.endswith(b'.py') or t.endswith(b'.t'))] |
2269 | 2269 |
2270 def _runtests(self, tests): | 2270 def _runtests(self, testdescs): |
2271 def _reloadtest(test, i): | 2271 def _reloadtest(test, i): |
2272 # convert a test back to its description dict | 2272 # convert a test back to its description dict |
2273 desc = {'path': test.path} | 2273 desc = {'path': test.path} |
2274 return self._gettest(desc, i) | 2274 return self._gettest(desc, i) |
2275 | 2275 |
2282 if self.options.chg: | 2282 if self.options.chg: |
2283 assert self._installdir | 2283 assert self._installdir |
2284 self._installchg() | 2284 self._installchg() |
2285 | 2285 |
2286 if self.options.restart: | 2286 if self.options.restart: |
2287 orig = list(tests) | 2287 orig = list(testdescs) |
2288 while tests: | 2288 while testdescs: |
2289 if os.path.exists(tests[0]['path'] + ".err"): | 2289 if os.path.exists(testdescs[0]['path'] + ".err"): |
2290 break | 2290 break |
2291 tests.pop(0) | 2291 testdescs.pop(0) |
2292 if not tests: | 2292 if not testdescs: |
2293 print("running all tests") | 2293 print("running all tests") |
2294 tests = orig | 2294 testdescs = orig |
2295 | 2295 |
2296 tests = [self._gettest(t, i) for i, t in enumerate(tests)] | 2296 tests = [self._gettest(d, i) for i, d in enumerate(testdescs)] |
2297 | 2297 |
2298 failed = False | 2298 failed = False |
2299 warned = False | 2299 warned = False |
2300 kws = self.options.keywords | 2300 kws = self.options.keywords |
2301 if kws is not None and PYTHON3: | 2301 if kws is not None and PYTHON3: |
2349 if allfree: | 2349 if allfree: |
2350 break | 2350 break |
2351 self._ports[count] = port | 2351 self._ports[count] = port |
2352 return port | 2352 return port |
2353 | 2353 |
2354 def _gettest(self, test, count): | 2354 def _gettest(self, testdesc, count): |
2355 """Obtain a Test by looking at its filename. | 2355 """Obtain a Test by looking at its filename. |
2356 | 2356 |
2357 Returns a Test instance. The Test may not be runnable if it doesn't | 2357 Returns a Test instance. The Test may not be runnable if it doesn't |
2358 map to a known type. | 2358 map to a known type. |
2359 """ | 2359 """ |
2360 path = test['path'] | 2360 path = testdesc['path'] |
2361 lctest = path.lower() | 2361 lctest = path.lower() |
2362 testcls = Test | 2362 testcls = Test |
2363 | 2363 |
2364 for ext, cls in self.TESTTYPES: | 2364 for ext, cls in self.TESTTYPES: |
2365 if lctest.endswith(ext): | 2365 if lctest.endswith(ext): |