##// END OF EJS Templates
run-tests: move test filtering into TestSuite.run()...
Gregory Szorc -
r21507:d839e482 default
parent child Browse files
Show More
@@ -353,10 +353,10 b' class Test(unittest.TestCase):'
353 353 It is consulted periodically during the execution of tests.
354 354 """
355 355
356 self._path = path
356 self.path = path
357 357 self.name = os.path.basename(path)
358 358 self._testdir = os.path.dirname(path)
359 self._errpath = os.path.join(self._testdir, '%s.err' % self.name)
359 self.errpath = os.path.join(self._testdir, '%s.err' % self.name)
360 360
361 361 self._options = options
362 362 self._count = count
@@ -401,12 +401,12 b' class Test(unittest.TestCase):'
401 401 raise
402 402
403 403 self._testtmp = os.path.join(self._threadtmp,
404 os.path.basename(self._path))
404 os.path.basename(self.path))
405 405 os.mkdir(self._testtmp)
406 406
407 407 # Remove any previous output files.
408 if os.path.exists(self._errpath):
409 os.remove(self._errpath)
408 if os.path.exists(self.errpath):
409 os.remove(self.errpath)
410 410
411 411 def run(self, result):
412 412 result.startTest(self)
@@ -463,29 +463,7 b' class Test(unittest.TestCase):'
463 463
464 464 This will return a tuple describing the result of the test.
465 465 """
466 if not os.path.exists(self._path):
467 raise SkipTest("Doesn't exist")
468
469 466 options = self._options
470 if not (options.whitelisted and self.name in options.whitelisted):
471 if options.blacklist and self.name in options.blacklist:
472 raise SkipTest('blacklisted')
473
474 if options.retest and not os.path.exists('%s.err' % self.name):
475 raise IgnoreTest('not retesting')
476
477 if options.keywords:
478 f = open(self.name)
479 t = f.read().lower() + self.name.lower()
480 f.close()
481 for k in options.keywords.lower().split():
482 if k in t:
483 break
484 else:
485 raise IgnoreTest("doesn't match keyword")
486
487 if not os.path.basename(self.name.lower()).startswith('test-'):
488 raise SkipTest('not a test file')
489 467
490 468 replacements, port = self._getreplacements()
491 469 env = self._getenv(port)
@@ -529,10 +507,10 b' class Test(unittest.TestCase):'
529 507 iolock.acquire()
530 508 if options.view:
531 509 os.system("%s %s %s" % (options.view, self._refpath,
532 self._errpath))
510 self.errpath))
533 511 else:
534 512 info = showdiff(self._refout, out, self._refpath,
535 self._errpath)
513 self.errpath)
536 514 iolock.release()
537 515 msg = ''
538 516 if info.get('servefail'):
@@ -544,7 +522,7 b' class Test(unittest.TestCase):'
544 522
545 523 if (ret != 0 or out != self._refout) and not self._skipped \
546 524 and not options.debug:
547 f = open(self._errpath, 'wb')
525 f = open(self.errpath, 'wb')
548 526 for line in out:
549 527 f.write(line)
550 528 f.close()
@@ -565,7 +543,7 b' class Test(unittest.TestCase):'
565 543
566 544 if (self._ret != 0 or self._out != self._refout) and not self._skipped \
567 545 and not self._options.debug and self._out:
568 f = open(self._errpath, 'wb')
546 f = open(self.errpath, 'wb')
569 547 for line in self._out:
570 548 f.write(line)
571 549 f.close()
@@ -654,16 +632,16 b' class Test(unittest.TestCase):'
654 632 log("\n%s: %s %s" % (warned and 'Warning' or 'ERROR', self.name,
655 633 msg))
656 634 if (not ret and self._options.interactive and
657 os.path.exists(self._errpath)):
635 os.path.exists(self.errpath)):
658 636 iolock.acquire()
659 637 print 'Accept this change? [n] ',
660 638 answer = sys.stdin.readline().strip()
661 639 iolock.release()
662 640 if answer.lower() in ('y', 'yes'):
663 641 if self.name.endswith('.t'):
664 rename(self._errpath, self._path)
642 rename(self.errpath, self.path)
665 643 else:
666 rename(self._errpath, '%s.out' % self._path)
644 rename(self.errpath, '%s.out' % self.path)
667 645
668 646 return '.', self.name, ''
669 647
@@ -683,7 +661,7 b' class PythonTest(Test):'
683 661
684 662 def _run(self, replacements, env):
685 663 py3kswitch = self._options.py3k_warnings and ' -3' or ''
686 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self._path)
664 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self.path)
687 665 vlog("# Running", cmd)
688 666 if os.name == 'nt':
689 667 replacements.append((r'\r\n', '\n'))
@@ -706,7 +684,7 b' class TTest(Test):'
706 684 return os.path.join(self._testdir, self.name)
707 685
708 686 def _run(self, replacements, env):
709 f = open(self._path)
687 f = open(self.path)
710 688 lines = f.readlines()
711 689 f.close()
712 690
@@ -1149,8 +1127,45 b' class TestSuite(unittest.TestSuite):'
1149 1127 self._runner = runner
1150 1128
1151 1129 def run(self, result):
1152 # We modify the list, so copy so callers aren't confused.
1153 tests = list(self._tests)
1130 options = self._runner.options
1131
1132 # We have a number of filters that need to be applied. We do this
1133 # here instead of inside Test because it makes the running logic for
1134 # Test simpler.
1135 tests = []
1136 for test in self._tests:
1137 if not os.path.exists(test.path):
1138 result.addSkip(test, "Doesn't exist")
1139 continue
1140
1141 if not (options.whitelisted and test.name in options.whitelisted):
1142 if options.blacklist and test.name in options.blacklist:
1143 result.addSkip(test, 'blacklisted')
1144 continue
1145
1146 if options.retest and not os.path.exists(test.errpath):
1147 result.addIgnore(test, 'not retesting')
1148 continue
1149
1150 if options.keywords:
1151 f = open(test.path)
1152 t = f.read().lower() + test.name.lower()
1153 f.close()
1154 ignored = False
1155 for k in options.keywords.lower().split():
1156 if k not in t:
1157 result.addIgnore(test, "doesn't match keyword")
1158 ignored = True
1159 break
1160
1161 if ignored:
1162 continue
1163
1164 if not test.name.lower().startswith('test-'):
1165 result.addSkip(test, 'not a test file')
1166 continue
1167
1168 tests.append(test)
1154 1169
1155 1170 jobs = self._runner.options.jobs
1156 1171 done = queue.Queue()
General Comments 0
You need to be logged in to leave comments. Login now