Fix `pytest.mark.parametrize` when the argvalue is an iterator
This commit is contained in:
		
							parent
							
								
									917195ea8e
								
							
						
					
					
						commit
						cafb13c95f
					
				|  | @ -0,0 +1 @@ | |||
| Fix ``pytest.mark.parametrize`` when the argvalues is an iterator. | ||||
|  | @ -113,14 +113,18 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): | |||
|             force_tuple = len(argnames) == 1 | ||||
|         else: | ||||
|             force_tuple = False | ||||
|         parameters = [ | ||||
|         return argnames, force_tuple | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def _parse_parametrize_parameters(argvalues, force_tuple): | ||||
|         return [ | ||||
|             ParameterSet.extract_from(x, force_tuple=force_tuple) for x in argvalues | ||||
|         ] | ||||
|         return argnames, parameters | ||||
| 
 | ||||
|     @classmethod | ||||
|     def _for_parametrize(cls, argnames, argvalues, func, config, function_definition): | ||||
|         argnames, parameters = cls._parse_parametrize_args(argnames, argvalues) | ||||
|         argnames, force_tuple = cls._parse_parametrize_args(argnames, argvalues) | ||||
|         parameters = cls._parse_parametrize_parameters(argvalues, force_tuple) | ||||
|         del argvalues | ||||
| 
 | ||||
|         if parameters: | ||||
|  |  | |||
|  | @ -413,6 +413,28 @@ def test_parametrized_with_kwargs(testdir): | |||
|     assert result.ret == 0 | ||||
| 
 | ||||
| 
 | ||||
| def test_parametrize_iterator(testdir): | ||||
|     """parametrize should work with generators (#5354).""" | ||||
|     py_file = testdir.makepyfile( | ||||
|         """\ | ||||
|         import pytest | ||||
| 
 | ||||
|         def gen(): | ||||
|             yield 1 | ||||
|             yield 2 | ||||
|             yield 3 | ||||
| 
 | ||||
|         @pytest.mark.parametrize('a', gen()) | ||||
|         def test(a): | ||||
|             assert a >= 1 | ||||
|         """ | ||||
|     ) | ||||
|     result = testdir.runpytest(py_file) | ||||
|     assert result.ret == 0 | ||||
|     # should not skip any tests | ||||
|     result.stdout.fnmatch_lines(["*3 passed*"]) | ||||
| 
 | ||||
| 
 | ||||
| class TestFunctional(object): | ||||
|     def test_merging_markers_deep(self, testdir): | ||||
|         # issue 199 - propagate markers into nested classes | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue