[py-svn] r47584 - in py/trunk/py/test: . testing
fijal at codespeak.net
fijal at codespeak.net
Fri Oct 19 15:46:12 CEST 2007
Author: fijal
Date: Fri Oct 19 15:46:10 2007
New Revision: 47584
Modified:
py/trunk/py/test/collect.py
py/trunk/py/test/session.py
py/trunk/py/test/testing/test_session.py
Log:
Implement very sophisticated algorith for -k TestClass.test to work
Modified: py/trunk/py/test/collect.py
==============================================================================
--- py/trunk/py/test/collect.py (original)
+++ py/trunk/py/test/collect.py Fri Oct 19 15:46:10 2007
@@ -150,8 +150,8 @@
cur = next
return cur
- def _haskeyword(self, keyword):
- return keyword in self.name
+ def _keywords(self):
+ return [self.name]
def _getmodpath(self):
""" return dotted module path (relative to the containing). """
@@ -176,17 +176,30 @@
if not keyword:
return
chain = self.listchain()
- for key in filter(None, keyword.split()):
+ for key in filter(None, keyword.split()):
eor = key[:1] == '-'
if eor:
key = key[1:]
if not (eor ^ self._matchonekeyword(key, chain)):
py.test.skip("test not selected by keyword %r" %(keyword,))
- def _matchonekeyword(self, key, chain):
- for subitem in chain:
- if subitem._haskeyword(key):
- return True
+ def _matchonekeyword(self, key, chain):
+ elems = key.split(".")
+ # XXX O(n^2), anyone cares?
+ chain = [item._keywords() for item in chain if item._keywords()]
+ for start, _ in enumerate(chain):
+ if start + len(elems) > len(chain):
+ return False
+ for num, elem in enumerate(elems):
+ for keyword in chain[num + start]:
+ ok = False
+ if elem in keyword:
+ ok = True
+ break
+ if not ok:
+ break
+ if num == len(elems) - 1 and ok:
+ return True
return False
def _tryiter(self, yieldtype=None):
@@ -425,7 +438,9 @@
return self.parent.obj()
def Function(self):
return getattr(self.obj, 'Function',
- Collector.Function.__get__(self)) # XXX for python 2.2
+ Collector.Function.__get__(self)) # XXX for python 2.2
+ def _keywords(self):
+ return []
Function = property(Function)
Modified: py/trunk/py/test/session.py
==============================================================================
--- py/trunk/py/test/session.py (original)
+++ py/trunk/py/test/session.py Fri Oct 19 15:46:10 2007
@@ -44,7 +44,7 @@
class Session(AbstractSession):
"""
- A Session gets test Items from Collectors, # executes the
+ A Session gets test Items from Collectors, executes the
Items and sends the Outcome to the Reporter.
"""
def shouldclose(self):
Modified: py/trunk/py/test/testing/test_session.py
==============================================================================
--- py/trunk/py/test/testing/test_session.py (original)
+++ py/trunk/py/test/testing/test_session.py Fri Oct 19 15:46:10 2007
@@ -55,20 +55,24 @@
assert not config.option.boxed
class TestKeywordSelection:
- def test_select_simple(self):
- for keyword in ['test_one', 'est_on']:
+ def test_select_simple(self):
+ def check(keyword, name):
config = py.test.config._reparse([datadir/'filetest.py',
- '-k', keyword])
+ '-s', '-k', keyword])
session = config._getsessionclass()(config, py.std.sys.stdout)
session.main()
l = session.getitemoutcomepairs(Failed)
assert len(l) == 1
item = l[0][0]
- assert item.name == 'test_one'
+ assert item.name == name
l = session.getitemoutcomepairs(Skipped)
- assert len(l) == 1
+ assert len(l) == 1
+
+ for keyword in ['test_one', 'est_on']:
+ check(keyword, 'test_one')
+ check('TestClass.test', 'test_method_one')
- def test_select_extra_keywords(self):
+ def test_select_extra_keywords(self):
o = tmpdir.ensure('selecttest', dir=1)
tfile = o.join('test_select.py').write(py.code.Source("""
def test_1():
@@ -80,14 +84,13 @@
conftest = o.join('conftest.py').write(py.code.Source("""
import py
class Class(py.test.collect.Class):
- def _haskeyword(self, keyword):
- return keyword == 'xxx' or \
- super(Class, self)._haskeyword(keyword)
+ def _keywords(self):
+ return ['xxx', self.name]
"""))
for keyword in ('xxx', 'xxx test_2', 'TestClass', 'xxx -test_1',
'TestClass test_2', 'xxx TestClass test_2',):
f = py.std.StringIO.StringIO()
- config = py.test.config._reparse([o, '-k', keyword])
+ config = py.test.config._reparse([o, '-s', '-k', keyword])
session = config._getsessionclass()(config, f)
session.main()
print "keyword", repr(keyword)
More information about the py-svn
mailing list