[svn r60137] support for explicitly named generative tests with tests and doc addition.
--HG-- branch : trunk
This commit is contained in:
parent
c609974f04
commit
d491d68d51
|
@ -136,6 +136,13 @@ Note that ``test_generative()`` will cause three tests
|
||||||
to get run, notably ``check(42)``, ``check(17)`` and ``check(49)``
|
to get run, notably ``check(42)``, ``check(17)`` and ``check(49)``
|
||||||
of which the middle one will obviously fail.
|
of which the middle one will obviously fail.
|
||||||
|
|
||||||
|
To make it easier to distinguish the generated tests it is possible to specify an explicit name for them, like for example::
|
||||||
|
|
||||||
|
def test_generative():
|
||||||
|
for x in (42,17,49):
|
||||||
|
yield "case %d" % x, check, x
|
||||||
|
|
||||||
|
|
||||||
.. _`selection by keyword`:
|
.. _`selection by keyword`:
|
||||||
|
|
||||||
selecting tests by keyword
|
selecting tests by keyword
|
||||||
|
|
|
@ -268,19 +268,27 @@ class Generator(FunctionMixin, PyCollectorMixin, py.test.collect.Collector):
|
||||||
self._setupstate.prepare(self)
|
self._setupstate.prepare(self)
|
||||||
l = []
|
l = []
|
||||||
for i, x in py.builtin.enumerate(self.obj()):
|
for i, x in py.builtin.enumerate(self.obj()):
|
||||||
call, args = self.getcallargs(x)
|
name, call, args = self.getcallargs(x)
|
||||||
if not callable(call):
|
if not callable(call):
|
||||||
raise TypeError("%r yielded non callable test %r" %(self.obj, call,))
|
raise TypeError("%r yielded non callable test %r" %(self.obj, call,))
|
||||||
|
if name is None:
|
||||||
name = "[%d]" % i
|
name = "[%d]" % i
|
||||||
|
else:
|
||||||
|
name = "['%s']" % name
|
||||||
l.append(self.Function(name, self, args=args, callobj=call))
|
l.append(self.Function(name, self, args=args, callobj=call))
|
||||||
return l
|
return l
|
||||||
|
|
||||||
def getcallargs(self, obj):
|
def getcallargs(self, obj):
|
||||||
if isinstance(obj, (tuple, list)):
|
if not isinstance(obj, (tuple, list)):
|
||||||
call, args = obj[0], obj[1:]
|
obj = (obj,)
|
||||||
|
# explict naming
|
||||||
|
if isinstance(obj[0], basestring):
|
||||||
|
name = obj[0]
|
||||||
|
obj = obj[1:]
|
||||||
else:
|
else:
|
||||||
call, args = obj, ()
|
name = None
|
||||||
return call, args
|
call, args = obj[0], obj[1:]
|
||||||
|
return name, call, args
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test Items
|
# Test Items
|
||||||
|
|
|
@ -152,6 +152,48 @@ class TestCollect(suptest.InlineCollection):
|
||||||
assert gencolitems[0].name == '[0]'
|
assert gencolitems[0].name == '[0]'
|
||||||
assert gencolitems[0].obj.func_name == 'func1'
|
assert gencolitems[0].obj.func_name == 'func1'
|
||||||
|
|
||||||
|
def test_generative_functions_with_explicit_names(self):
|
||||||
|
modcol = self.getmodulecol("""
|
||||||
|
def func1(arg, arg2):
|
||||||
|
assert arg == arg2
|
||||||
|
|
||||||
|
def test_gen():
|
||||||
|
yield "one", func1, 17, 3*5
|
||||||
|
yield "two", func1, 42, 6*7
|
||||||
|
""")
|
||||||
|
colitems = modcol.collect()
|
||||||
|
assert len(colitems) == 1
|
||||||
|
gencol = colitems[0]
|
||||||
|
assert isinstance(gencol, py.test.collect.Generator)
|
||||||
|
gencolitems = gencol.collect()
|
||||||
|
assert len(gencolitems) == 2
|
||||||
|
assert isinstance(gencolitems[0], py.test.collect.Function)
|
||||||
|
assert isinstance(gencolitems[1], py.test.collect.Function)
|
||||||
|
assert gencolitems[0].name == "['one']"
|
||||||
|
assert gencolitems[0].obj.func_name == 'func1'
|
||||||
|
assert gencolitems[1].name == "['two']"
|
||||||
|
assert gencolitems[1].obj.func_name == 'func1'
|
||||||
|
|
||||||
|
def test_generative_methods_with_explicit_names(self):
|
||||||
|
modcol = self.getmodulecol("""
|
||||||
|
def func1(arg, arg2):
|
||||||
|
assert arg == arg2
|
||||||
|
class TestGenMethods:
|
||||||
|
def test_gen(self):
|
||||||
|
yield "m1", func1, 17, 3*5
|
||||||
|
yield "m2", func1, 42, 6*7
|
||||||
|
""")
|
||||||
|
gencol = modcol.collect()[0].collect()[0].collect()[0]
|
||||||
|
assert isinstance(gencol, py.test.collect.Generator)
|
||||||
|
gencolitems = gencol.collect()
|
||||||
|
assert len(gencolitems) == 2
|
||||||
|
assert isinstance(gencolitems[0], py.test.collect.Function)
|
||||||
|
assert isinstance(gencolitems[1], py.test.collect.Function)
|
||||||
|
assert gencolitems[0].name == "['m1']"
|
||||||
|
assert gencolitems[0].obj.func_name == 'func1'
|
||||||
|
assert gencolitems[1].name == "['m2']"
|
||||||
|
assert gencolitems[1].obj.func_name == 'func1'
|
||||||
|
|
||||||
def test_module_assertion_setup(self):
|
def test_module_assertion_setup(self):
|
||||||
modcol = self.getmodulecol("pass")
|
modcol = self.getmodulecol("pass")
|
||||||
from py.__.magic import assertion
|
from py.__.magic import assertion
|
||||||
|
|
Loading…
Reference in New Issue