--- a/tests/run-tests.py Tue Apr 22 10:13:41 2014 -0700
+++ b/tests/run-tests.py Tue Apr 22 11:38:14 2014 -0700
@@ -353,10 +353,10 @@
It is consulted periodically during the execution of tests.
"""
- self._path = path
+ self.path = path
self.name = os.path.basename(path)
self._testdir = os.path.dirname(path)
- self._errpath = os.path.join(self._testdir, '%s.err' % self.name)
+ self.errpath = os.path.join(self._testdir, '%s.err' % self.name)
self._options = options
self._count = count
@@ -401,12 +401,12 @@
raise
self._testtmp = os.path.join(self._threadtmp,
- os.path.basename(self._path))
+ os.path.basename(self.path))
os.mkdir(self._testtmp)
# Remove any previous output files.
- if os.path.exists(self._errpath):
- os.remove(self._errpath)
+ if os.path.exists(self.errpath):
+ os.remove(self.errpath)
def run(self, result):
result.startTest(self)
@@ -463,29 +463,7 @@
This will return a tuple describing the result of the test.
"""
- if not os.path.exists(self._path):
- raise SkipTest("Doesn't exist")
-
options = self._options
- if not (options.whitelisted and self.name in options.whitelisted):
- if options.blacklist and self.name in options.blacklist:
- raise SkipTest('blacklisted')
-
- if options.retest and not os.path.exists('%s.err' % self.name):
- raise IgnoreTest('not retesting')
-
- if options.keywords:
- f = open(self.name)
- t = f.read().lower() + self.name.lower()
- f.close()
- for k in options.keywords.lower().split():
- if k in t:
- break
- else:
- raise IgnoreTest("doesn't match keyword")
-
- if not os.path.basename(self.name.lower()).startswith('test-'):
- raise SkipTest('not a test file')
replacements, port = self._getreplacements()
env = self._getenv(port)
@@ -529,10 +507,10 @@
iolock.acquire()
if options.view:
os.system("%s %s %s" % (options.view, self._refpath,
- self._errpath))
+ self.errpath))
else:
info = showdiff(self._refout, out, self._refpath,
- self._errpath)
+ self.errpath)
iolock.release()
msg = ''
if info.get('servefail'):
@@ -544,7 +522,7 @@
if (ret != 0 or out != self._refout) and not self._skipped \
and not options.debug:
- f = open(self._errpath, 'wb')
+ f = open(self.errpath, 'wb')
for line in out:
f.write(line)
f.close()
@@ -565,7 +543,7 @@
if (self._ret != 0 or self._out != self._refout) and not self._skipped \
and not self._options.debug and self._out:
- f = open(self._errpath, 'wb')
+ f = open(self.errpath, 'wb')
for line in self._out:
f.write(line)
f.close()
@@ -654,16 +632,16 @@
log("\n%s: %s %s" % (warned and 'Warning' or 'ERROR', self.name,
msg))
if (not ret and self._options.interactive and
- os.path.exists(self._errpath)):
+ os.path.exists(self.errpath)):
iolock.acquire()
print 'Accept this change? [n] ',
answer = sys.stdin.readline().strip()
iolock.release()
if answer.lower() in ('y', 'yes'):
if self.name.endswith('.t'):
- rename(self._errpath, self._path)
+ rename(self.errpath, self.path)
else:
- rename(self._errpath, '%s.out' % self._path)
+ rename(self.errpath, '%s.out' % self.path)
return '.', self.name, ''
@@ -683,7 +661,7 @@
def _run(self, replacements, env):
py3kswitch = self._options.py3k_warnings and ' -3' or ''
- cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self._path)
+ cmd = '%s%s "%s"' % (PYTHON, py3kswitch, self.path)
vlog("# Running", cmd)
if os.name == 'nt':
replacements.append((r'\r\n', '\n'))
@@ -706,7 +684,7 @@
return os.path.join(self._testdir, self.name)
def _run(self, replacements, env):
- f = open(self._path)
+ f = open(self.path)
lines = f.readlines()
f.close()
@@ -1149,8 +1127,45 @@
self._runner = runner
def run(self, result):
- # We modify the list, so copy so callers aren't confused.
- tests = list(self._tests)
+ options = self._runner.options
+
+ # We have a number of filters that need to be applied. We do this
+ # here instead of inside Test because it makes the running logic for
+ # Test simpler.
+ tests = []
+ for test in self._tests:
+ if not os.path.exists(test.path):
+ result.addSkip(test, "Doesn't exist")
+ continue
+
+ if not (options.whitelisted and test.name in options.whitelisted):
+ if options.blacklist and test.name in options.blacklist:
+ result.addSkip(test, 'blacklisted')
+ continue
+
+ if options.retest and not os.path.exists(test.errpath):
+ result.addIgnore(test, 'not retesting')
+ continue
+
+ if options.keywords:
+ f = open(test.path)
+ t = f.read().lower() + test.name.lower()
+ f.close()
+ ignored = False
+ for k in options.keywords.lower().split():
+ if k not in t:
+ result.addIgnore(test, "doesn't match keyword")
+ ignored = True
+ break
+
+ if ignored:
+ continue
+
+ if not test.name.lower().startswith('test-'):
+ result.addSkip(test, 'not a test file')
+ continue
+
+ tests.append(test)
jobs = self._runner.options.jobs
done = queue.Queue()