[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)`` | ||||
| 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`:  | ||||
| 
 | ||||
| selecting tests by keyword  | ||||
|  |  | |||
|  | @ -268,19 +268,27 @@ class Generator(FunctionMixin, PyCollectorMixin, py.test.collect.Collector): | |||
|         self._setupstate.prepare(self)  | ||||
|         l = [] | ||||
|         for i, x in py.builtin.enumerate(self.obj()):  | ||||
|             call, args = self.getcallargs(x) | ||||
|             name, call, args = self.getcallargs(x) | ||||
|             if not callable(call):  | ||||
|                 raise TypeError("%r yielded non callable test %r" %(self.obj, call,)) | ||||
|             name = "[%d]" % i   | ||||
|             if name is None: | ||||
|                 name = "[%d]" % i | ||||
|             else: | ||||
|                 name = "['%s']" % name | ||||
|             l.append(self.Function(name, self, args=args, callobj=call)) | ||||
|         return l | ||||
|          | ||||
|     def getcallargs(self, obj): | ||||
|         if isinstance(obj, (tuple, list)): | ||||
|             call, args = obj[0], obj[1:] | ||||
|         if not isinstance(obj, (tuple, list)): | ||||
|             obj = (obj,) | ||||
|         # explict naming | ||||
|         if isinstance(obj[0], basestring): | ||||
|             name = obj[0] | ||||
|             obj = obj[1:] | ||||
|         else: | ||||
|             call, args = obj, () | ||||
|         return call, args  | ||||
|             name = None | ||||
|         call, args = obj[0], obj[1:] | ||||
|         return name, call, args  | ||||
| 
 | ||||
| # | ||||
| #  Test Items  | ||||
|  |  | |||
|  | @ -152,6 +152,48 @@ class TestCollect(suptest.InlineCollection): | |||
|         assert gencolitems[0].name == '[0]' | ||||
|         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): | ||||
|         modcol = self.getmodulecol("pass") | ||||
|         from py.__.magic import assertion | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue