fix #2540, introduce mark.with_args
This commit is contained in:
		
							parent
							
								
									abb5d20841
								
							
						
					
					
						commit
						65b2de13a3
					
				|  | @ -335,6 +335,17 @@ class MarkDecorator: | |||
|     def __repr__(self): | ||||
|         return "<MarkDecorator %r>" % (self.mark,) | ||||
| 
 | ||||
|     def with_args(self, *args, **kwargs): | ||||
|         """ return a MarkDecorator with extra arguments added | ||||
| 
 | ||||
|         unlike call this can be used even if the sole argument is a callable/class | ||||
| 
 | ||||
|         :return: MarkDecorator | ||||
|         """ | ||||
| 
 | ||||
|         mark = Mark(self.name, args, kwargs) | ||||
|         return self.__class__(self.mark.combined_with(mark)) | ||||
| 
 | ||||
|     def __call__(self, *args, **kwargs): | ||||
|         """ if passed a single callable argument: decorate it with mark info. | ||||
|             otherwise add *args/**kwargs in-place to mark information. """ | ||||
|  | @ -348,9 +359,7 @@ class MarkDecorator: | |||
|                     store_legacy_markinfo(func, self.mark) | ||||
|                     store_mark(func, self.mark) | ||||
|                 return func | ||||
| 
 | ||||
|         mark = Mark(self.name, args, kwargs) | ||||
|         return self.__class__(self.mark.combined_with(mark)) | ||||
|         return self.with_args(*args, **kwargs) | ||||
| 
 | ||||
| 
 | ||||
| def get_unpacked_marks(obj): | ||||
|  |  | |||
|  | @ -0,0 +1 @@ | |||
| Introduce ``mark.with_args`` in order to allow passing functions/classes as sole argument to marks. | ||||
|  | @ -22,6 +22,19 @@ class TestMark(object): | |||
|         mark = Mark() | ||||
|         pytest.raises((AttributeError, TypeError), mark) | ||||
| 
 | ||||
|     def test_mark_with_param(self): | ||||
|         def some_function(abc): | ||||
|             pass | ||||
| 
 | ||||
|         class SomeClass(object): | ||||
|             pass | ||||
| 
 | ||||
|         assert pytest.mark.fun(some_function) is some_function | ||||
|         assert pytest.mark.fun.with_args(some_function) is not some_function | ||||
| 
 | ||||
|         assert pytest.mark.fun(SomeClass) is SomeClass | ||||
|         assert pytest.mark.fun.with_args(SomeClass) is not SomeClass | ||||
| 
 | ||||
|     def test_pytest_mark_name_starts_with_underscore(self): | ||||
|         mark = Mark() | ||||
|         pytest.raises(AttributeError, getattr, mark, '_some_name') | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue