[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