47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| import py
 | |
| import os, sys
 | |
| from py._plugin.pytest__pytest import HookRecorder
 | |
| from py._test.pluginmanager import Registry
 | |
| 
 | |
| def test_hookrecorder_basic():
 | |
|     rec = HookRecorder(Registry())
 | |
|     class ApiClass:
 | |
|         def pytest_xyz(self, arg):
 | |
|             "x"
 | |
|     rec.start_recording(ApiClass)
 | |
|     rec.hook.pytest_xyz(arg=123)
 | |
|     call = rec.popcall("pytest_xyz")
 | |
|     assert call.arg == 123 
 | |
|     assert call._name == "pytest_xyz"
 | |
|     py.test.raises(ValueError, "rec.popcall('abc')")
 | |
| 
 | |
| def test_hookrecorder_basic_no_args_hook():
 | |
|     rec = HookRecorder(Registry())
 | |
|     apimod = type(os)('api')
 | |
|     def pytest_xyz():
 | |
|         "x"
 | |
|     apimod.pytest_xyz = pytest_xyz
 | |
|     rec.start_recording(apimod)
 | |
|     rec.hook.pytest_xyz()
 | |
|     call = rec.popcall("pytest_xyz")
 | |
|     assert call._name == "pytest_xyz"
 | |
| 
 | |
| def test_functional(testdir, linecomp):
 | |
|     reprec = testdir.inline_runsource("""
 | |
|         import py
 | |
|         from py._test.pluginmanager import HookRelay, Registry
 | |
|         pytest_plugins="_pytest"
 | |
|         def test_func(_pytest):
 | |
|             class ApiClass:
 | |
|                 def pytest_xyz(self, arg):  "x"
 | |
|             hook = HookRelay([ApiClass], Registry())
 | |
|             rec = _pytest.gethookrecorder(hook)
 | |
|             class Plugin:
 | |
|                 def pytest_xyz(self, arg):
 | |
|                     return arg + 1
 | |
|             rec._registry.register(Plugin())
 | |
|             res = rec.hook.pytest_xyz(arg=41)
 | |
|             assert res == [42]
 | |
|     """)
 | |
|     reprec.assertoutcome(passed=1)
 |