120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| import pytest, py, sys
 | |
| 
 | |
| class TestOEJSKITSpecials:
 | |
|     def test_funcarg_non_pycollectobj(self, testdir): # rough jstests usage
 | |
|         testdir.makeconftest("""
 | |
|             import pytest
 | |
|             def pytest_pycollect_makeitem(collector, name, obj):
 | |
|                 if name == "MyClass":
 | |
|                     return MyCollector(name, parent=collector)
 | |
|             class MyCollector(pytest.Collector):
 | |
|                 def reportinfo(self):
 | |
|                     return self.fspath, 3, "xyz"
 | |
|         """)
 | |
|         modcol = testdir.getmodulecol("""
 | |
|             def pytest_funcarg__arg1(request):
 | |
|                 return 42
 | |
|             class MyClass:
 | |
|                 pass
 | |
|         """)
 | |
|         # this hook finds funcarg factories
 | |
|         rep = modcol.ihook.pytest_make_collect_report(collector=modcol)
 | |
|         clscol = rep.result[0]
 | |
|         clscol.obj = lambda arg1: None
 | |
|         clscol.funcargs = {}
 | |
|         pytest._fillfuncargs(clscol)
 | |
|         assert clscol.funcargs['arg1'] == 42
 | |
| 
 | |
|     def test_autouse_fixture(self, testdir): # rough jstests usage
 | |
|         testdir.makeconftest("""
 | |
|             import pytest
 | |
|             def pytest_pycollect_makeitem(collector, name, obj):
 | |
|                 if name == "MyClass":
 | |
|                     return MyCollector(name, parent=collector)
 | |
|             class MyCollector(pytest.Collector):
 | |
|                 def reportinfo(self):
 | |
|                     return self.fspath, 3, "xyz"
 | |
|         """)
 | |
|         modcol = testdir.getmodulecol("""
 | |
|             import pytest
 | |
|             @pytest.fixture(autouse=True)
 | |
|             def hello():
 | |
|                 pass
 | |
|             def pytest_funcarg__arg1(request):
 | |
|                 return 42
 | |
|             class MyClass:
 | |
|                 pass
 | |
|         """)
 | |
|         # this hook finds funcarg factories
 | |
|         rep = modcol.ihook.pytest_make_collect_report(collector=modcol)
 | |
|         clscol = rep.result[0]
 | |
|         clscol.obj = lambda: None
 | |
|         clscol.funcargs = {}
 | |
|         pytest._fillfuncargs(clscol)
 | |
|         assert not clscol.funcargs
 | |
| 
 | |
| 
 | |
| class TestMockDecoration:
 | |
|     def test_wrapped_getfuncargnames(self):
 | |
|         from _pytest.python import getfuncargnames
 | |
|         def wrap(f):
 | |
|             def func():
 | |
|                 pass
 | |
|             func.__wrapped__ = f
 | |
|             return func
 | |
|         @wrap
 | |
|         def f(x):
 | |
|             pass
 | |
|         l = getfuncargnames(f)
 | |
|         assert l == ("x",)
 | |
| 
 | |
|     def test_wrapped_getfuncargnames_patching(self):
 | |
|         from _pytest.python import getfuncargnames
 | |
|         def wrap(f):
 | |
|             def func():
 | |
|                 pass
 | |
|             func.__wrapped__ = f
 | |
|             func.patchings = ["qwe"]
 | |
|             return func
 | |
|         @wrap
 | |
|         def f(x, y, z):
 | |
|             pass
 | |
|         l = getfuncargnames(f)
 | |
|         assert l == ("y", "z")
 | |
| 
 | |
|     def test_unittest_mock(self, testdir):
 | |
|         pytest.importorskip("unittest.mock")
 | |
|         testdir.makepyfile("""
 | |
|             import unittest.mock
 | |
|             class T(unittest.TestCase):
 | |
|                 @unittest.mock.patch("os.path.abspath")
 | |
|                 def test_hello(self, abspath):
 | |
|                     import os
 | |
|                     os.path.abspath("hello")
 | |
|                     abspath.assert_any_call("hello")
 | |
|         """)
 | |
|         reprec = testdir.inline_run()
 | |
|         reprec.assertoutcome(passed=1)
 | |
| 
 | |
|     def test_mock(self, testdir):
 | |
|         pytest.importorskip("mock", "1.0.1")
 | |
|         testdir.makepyfile("""
 | |
|             import os
 | |
|             import unittest
 | |
|             import mock
 | |
| 
 | |
|             class T(unittest.TestCase):
 | |
|                 @mock.patch("os.path.abspath")
 | |
|                 def test_hello(self, abspath):
 | |
|                     os.path.abspath("hello")
 | |
|                     abspath.assert_any_call("hello")
 | |
|             @mock.patch("os.path.abspath")
 | |
|             @mock.patch("os.path.normpath")
 | |
|             def test_someting(normpath, abspath, tmpdir):
 | |
|                 abspath.return_value = "this"
 | |
|                 os.path.normpath(os.path.abspath("hello"))
 | |
|                 normpath.assert_any_call("this")
 | |
|         """)
 | |
|         reprec = testdir.inline_run()
 | |
|         reprec.assertoutcome(passed=2)
 |