Use std_warn for warning about applying marks directly to parameters
This commit is contained in:
		
							parent
							
								
									0100f61b62
								
							
						
					
					
						commit
						8e4501ee29
					
				|  | @ -65,7 +65,7 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): | ||||||
|         return cls(values, marks, id_) |         return cls(values, marks, id_) | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def extract_from(cls, parameterset, legacy_force_tuple=False): |     def extract_from(cls, parameterset, legacy_force_tuple=False, item=None): | ||||||
|         """ |         """ | ||||||
|         :param parameterset: |         :param parameterset: | ||||||
|             a legacy style parameterset that may or may not be a tuple, |             a legacy style parameterset that may or may not be a tuple, | ||||||
|  | @ -75,6 +75,7 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): | ||||||
|             enforce tuple wrapping so single argument tuple values |             enforce tuple wrapping so single argument tuple values | ||||||
|             don't get decomposed and break tests |             don't get decomposed and break tests | ||||||
| 
 | 
 | ||||||
|  |         :param item: the item that we will be extracting the parameters from. | ||||||
|         """ |         """ | ||||||
| 
 | 
 | ||||||
|         if isinstance(parameterset, cls): |         if isinstance(parameterset, cls): | ||||||
|  | @ -94,19 +95,21 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): | ||||||
|             argval = (argval,) |             argval = (argval,) | ||||||
| 
 | 
 | ||||||
|         if newmarks: |         if newmarks: | ||||||
|             warnings.warn(MARK_PARAMETERSET_UNPACKING) |             item.std_warn(MARK_PARAMETERSET_UNPACKING) | ||||||
| 
 | 
 | ||||||
|         return cls(argval, marks=newmarks, id=None) |         return cls(argval, marks=newmarks, id=None) | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def _for_parametrize(cls, argnames, argvalues, func, config): |     def _for_parametrize(cls, argnames, argvalues, func, config, function_definition): | ||||||
|         if not isinstance(argnames, (tuple, list)): |         if not isinstance(argnames, (tuple, list)): | ||||||
|             argnames = [x.strip() for x in argnames.split(",") if x.strip()] |             argnames = [x.strip() for x in argnames.split(",") if x.strip()] | ||||||
|             force_tuple = len(argnames) == 1 |             force_tuple = len(argnames) == 1 | ||||||
|         else: |         else: | ||||||
|             force_tuple = False |             force_tuple = False | ||||||
|         parameters = [ |         parameters = [ | ||||||
|             ParameterSet.extract_from(x, legacy_force_tuple=force_tuple) |             ParameterSet.extract_from( | ||||||
|  |                 x, legacy_force_tuple=force_tuple, item=function_definition | ||||||
|  |             ) | ||||||
|             for x in argvalues |             for x in argvalues | ||||||
|         ] |         ] | ||||||
|         del argvalues |         del argvalues | ||||||
|  |  | ||||||
|  | @ -326,7 +326,7 @@ def get_fslocation_from_item(item): | ||||||
|     """ |     """ | ||||||
|     result = getattr(item, "location", None) |     result = getattr(item, "location", None) | ||||||
|     if result is not None: |     if result is not None: | ||||||
|         return result |         return result[:2] | ||||||
|     obj = getattr(item, "obj", None) |     obj = getattr(item, "obj", None) | ||||||
|     if obj is not None: |     if obj is not None: | ||||||
|         return getfslineno(obj) |         return getfslineno(obj) | ||||||
|  |  | ||||||
|  | @ -967,7 +967,11 @@ class Metafunc(fixtures.FuncargnamesCompatAttr): | ||||||
|         from _pytest.mark import ParameterSet |         from _pytest.mark import ParameterSet | ||||||
| 
 | 
 | ||||||
|         argnames, parameters = ParameterSet._for_parametrize( |         argnames, parameters = ParameterSet._for_parametrize( | ||||||
|             argnames, argvalues, self.function, self.config |             argnames, | ||||||
|  |             argvalues, | ||||||
|  |             self.function, | ||||||
|  |             self.config, | ||||||
|  |             function_definition=self.definition, | ||||||
|         ) |         ) | ||||||
|         del argvalues |         del argvalues | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,7 +18,9 @@ from _pytest.capture import CaptureManager | ||||||
| from _pytest.main import EXIT_NOTESTSCOLLECTED | from _pytest.main import EXIT_NOTESTSCOLLECTED | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| needsosdup = pytest.mark.xfail("not hasattr(os, 'dup')") | needsosdup = pytest.mark.skipif( | ||||||
|  |     not hasattr(os, "dup"), reason="test needs os.dup, not available on this platform" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def tobytes(obj): | def tobytes(obj): | ||||||
|  | @ -61,9 +63,8 @@ class TestCaptureManager(object): | ||||||
|         pytest_addoption(parser) |         pytest_addoption(parser) | ||||||
|         assert parser._groups[0].options[0].default == "sys" |         assert parser._groups[0].options[0].default == "sys" | ||||||
| 
 | 
 | ||||||
|     @needsosdup |  | ||||||
|     @pytest.mark.parametrize( |     @pytest.mark.parametrize( | ||||||
|         "method", ["no", "sys", pytest.mark.skipif('not hasattr(os, "dup")', "fd")] |         "method", ["no", "sys", pytest.param("fd", marks=needsosdup)] | ||||||
|     ) |     ) | ||||||
|     def test_capturing_basic_api(self, method): |     def test_capturing_basic_api(self, method): | ||||||
|         capouter = StdCaptureFD() |         capouter = StdCaptureFD() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue