python: fix empty parametrize() leading to "NotSetType.token" id
In ff8b7884e8 NOTSET was changed to a
singleton enum, which ended up unexpectedly triggering a code path in ID
generation which checks for `isinstance(Enum)`.
Add an explicit case for it, which is not too bad anyway.
			
			
This commit is contained in:
		
							parent
							
								
									00996adeb8
								
							
						
					
					
						commit
						a267a622eb
					
				| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					Fixed `NotSetType.token` being used as the parameter ID when the parametrization list is empty.
 | 
				
			||||||
 | 
					Regressed in pytest 6.0.0.
 | 
				
			||||||
| 
						 | 
					@ -1293,6 +1293,9 @@ def _idval(
 | 
				
			||||||
        return str(val)
 | 
					        return str(val)
 | 
				
			||||||
    elif isinstance(val, REGEX_TYPE):
 | 
					    elif isinstance(val, REGEX_TYPE):
 | 
				
			||||||
        return ascii_escaped(val.pattern)
 | 
					        return ascii_escaped(val.pattern)
 | 
				
			||||||
 | 
					    elif val is NOTSET:
 | 
				
			||||||
 | 
					        # Fallback to default. Note that NOTSET is an enum.Enum.
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
    elif isinstance(val, enum.Enum):
 | 
					    elif isinstance(val, enum.Enum):
 | 
				
			||||||
        return str(val)
 | 
					        return str(val)
 | 
				
			||||||
    elif isinstance(getattr(val, "__name__", None), str):
 | 
					    elif isinstance(getattr(val, "__name__", None), str):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,7 @@ from _pytest import fixtures
 | 
				
			||||||
from _pytest import python
 | 
					from _pytest import python
 | 
				
			||||||
from _pytest.compat import _format_args
 | 
					from _pytest.compat import _format_args
 | 
				
			||||||
from _pytest.compat import getfuncargnames
 | 
					from _pytest.compat import getfuncargnames
 | 
				
			||||||
 | 
					from _pytest.compat import NOTSET
 | 
				
			||||||
from _pytest.outcomes import fail
 | 
					from _pytest.outcomes import fail
 | 
				
			||||||
from _pytest.pytester import Testdir
 | 
					from _pytest.pytester import Testdir
 | 
				
			||||||
from _pytest.python import _idval
 | 
					from _pytest.python import _idval
 | 
				
			||||||
| 
						 | 
					@ -359,6 +360,14 @@ class TestMetafunc:
 | 
				
			||||||
        for val, expected in values:
 | 
					        for val, expected in values:
 | 
				
			||||||
            assert _idval(val, "a", 6, None, nodeid=None, config=None) == expected
 | 
					            assert _idval(val, "a", 6, None, nodeid=None, config=None) == expected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_notset_idval(self) -> None:
 | 
				
			||||||
 | 
					        """Test that a NOTSET value (used by an empty parameterset) generates
 | 
				
			||||||
 | 
					        a proper ID.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Regression test for #7686.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        assert _idval(NOTSET, "a", 0, None, nodeid=None, config=None) == "a0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_idmaker_autoname(self) -> None:
 | 
					    def test_idmaker_autoname(self) -> None:
 | 
				
			||||||
        """#250"""
 | 
					        """#250"""
 | 
				
			||||||
        result = idmaker(
 | 
					        result = idmaker(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue