tests/run-tests.py
changeset 45407 de9ec12ee53c
parent 45108 a659d5a4d2d5
child 45408 543e446204c6
equal deleted inserted replaced
45406:fa1a5527f642 45407:de9ec12ee53c
  2334         self,
  2334         self,
  2335         testdir,
  2335         testdir,
  2336         jobs=1,
  2336         jobs=1,
  2337         whitelist=None,
  2337         whitelist=None,
  2338         blacklist=None,
  2338         blacklist=None,
  2339         retest=False,
       
  2340         keywords=None,
  2339         keywords=None,
  2341         loop=False,
  2340         loop=False,
  2342         runs_per_test=1,
  2341         runs_per_test=1,
  2343         loadtest=None,
  2342         loadtest=None,
  2344         showchannels=False,
  2343         showchannels=False,
  2362         Instead, whitelist and blacklist should be handled by the thing that
  2361         Instead, whitelist and blacklist should be handled by the thing that
  2363         populates the TestSuite with tests. They are present to preserve
  2362         populates the TestSuite with tests. They are present to preserve
  2364         backwards compatible behavior which reports skipped tests as part
  2363         backwards compatible behavior which reports skipped tests as part
  2365         of the results.
  2364         of the results.
  2366 
  2365 
  2367         retest denotes whether to retest failed tests. This arguably belongs
       
  2368         outside of TestSuite.
       
  2369 
       
  2370         keywords denotes key words that will be used to filter which tests
  2366         keywords denotes key words that will be used to filter which tests
  2371         to execute. This arguably belongs outside of TestSuite.
  2367         to execute. This arguably belongs outside of TestSuite.
  2372 
  2368 
  2373         loop denotes whether to loop over tests forever.
  2369         loop denotes whether to loop over tests forever.
  2374         """
  2370         """
  2375         super(TestSuite, self).__init__(*args, **kwargs)
  2371         super(TestSuite, self).__init__(*args, **kwargs)
  2376 
  2372 
  2377         self._jobs = jobs
  2373         self._jobs = jobs
  2378         self._whitelist = whitelist
  2374         self._whitelist = whitelist
  2379         self._blacklist = blacklist
  2375         self._blacklist = blacklist
  2380         self._retest = retest
       
  2381         self._keywords = keywords
  2376         self._keywords = keywords
  2382         self._loop = loop
  2377         self._loop = loop
  2383         self._runs_per_test = runs_per_test
  2378         self._runs_per_test = runs_per_test
  2384         self._loadtest = loadtest
  2379         self._loadtest = loadtest
  2385         self._showchannels = showchannels
  2380         self._showchannels = showchannels
  2403                 continue
  2398                 continue
  2404 
  2399 
  2405             if not (self._whitelist and test.bname in self._whitelist):
  2400             if not (self._whitelist and test.bname in self._whitelist):
  2406                 if self._blacklist and test.bname in self._blacklist:
  2401                 if self._blacklist and test.bname in self._blacklist:
  2407                     result.addSkip(test, 'blacklisted')
  2402                     result.addSkip(test, 'blacklisted')
  2408                     continue
       
  2409 
       
  2410                 if self._retest and not os.path.exists(test.errpath):
       
  2411                     result.addIgnore(test, 'not retesting')
       
  2412                     continue
  2403                     continue
  2413 
  2404 
  2414                 if self._keywords:
  2405                 if self._keywords:
  2415                     with open(test.path, 'rb') as f:
  2406                     with open(test.path, 'rb') as f:
  2416                         t = f.read().lower() + test.bname.lower()
  2407                         t = f.read().lower() + test.bname.lower()
  3251                     tests += [{'path': t, 'case': c} for c in sorted(cases)]
  3242                     tests += [{'path': t, 'case': c} for c in sorted(cases)]
  3252                 else:
  3243                 else:
  3253                     tests.append({'path': t})
  3244                     tests.append({'path': t})
  3254             else:
  3245             else:
  3255                 tests.append({'path': t})
  3246                 tests.append({'path': t})
       
  3247 
       
  3248         if self.options.retest:
       
  3249             retest_args = []
       
  3250             for test in tests:
       
  3251                 if 'case' in test:
       
  3252                     # for multiple dimensions test cases
       
  3253                     casestr = b'#'.join(test['case'])
       
  3254                     errpath = b'%s#%s.err' % (test['path'], casestr)
       
  3255                 else:
       
  3256                     errpath = b'%s.err' % test['path']
       
  3257                 if self.options.outputdir:
       
  3258                     errpath = os.path.join(self.options.outputdir, errpath)
       
  3259 
       
  3260                 if os.path.exists(errpath):
       
  3261                     retest_args.append(test)
       
  3262             tests = retest_args
  3256         return tests
  3263         return tests
  3257 
  3264 
  3258     def _runtests(self, testdescs):
  3265     def _runtests(self, testdescs):
  3259         def _reloadtest(test, i):
  3266         def _reloadtest(test, i):
  3260             # convert a test back to its description dict
  3267             # convert a test back to its description dict
  3296             suite = TestSuite(
  3303             suite = TestSuite(
  3297                 self._testdir,
  3304                 self._testdir,
  3298                 jobs=jobs,
  3305                 jobs=jobs,
  3299                 whitelist=self.options.whitelisted,
  3306                 whitelist=self.options.whitelisted,
  3300                 blacklist=self.options.blacklist,
  3307                 blacklist=self.options.blacklist,
  3301                 retest=self.options.retest,
       
  3302                 keywords=kws,
  3308                 keywords=kws,
  3303                 loop=self.options.loop,
  3309                 loop=self.options.loop,
  3304                 runs_per_test=self.options.runs_per_test,
  3310                 runs_per_test=self.options.runs_per_test,
  3305                 showchannels=self.options.showchannels,
  3311                 showchannels=self.options.showchannels,
  3306                 tests=tests,
  3312                 tests=tests,