Fix collection of staticmethods defined with functools.partial
Related to #5701
This commit is contained in:
committed by
Bruno Oliveira
parent
a295a3ddaf
commit
137255816e
@@ -1143,52 +1143,6 @@ def test_unorderable_types(testdir):
|
||||
assert result.ret == ExitCode.NO_TESTS_COLLECTED
|
||||
|
||||
|
||||
def test_collect_functools_partial(testdir):
|
||||
"""
|
||||
Test that collection of functools.partial object works, and arguments
|
||||
to the wrapped functions are dealt with correctly (see #811).
|
||||
"""
|
||||
testdir.makepyfile(
|
||||
"""
|
||||
import functools
|
||||
import pytest
|
||||
|
||||
@pytest.fixture
|
||||
def fix1():
|
||||
return 'fix1'
|
||||
|
||||
@pytest.fixture
|
||||
def fix2():
|
||||
return 'fix2'
|
||||
|
||||
def check1(i, fix1):
|
||||
assert i == 2
|
||||
assert fix1 == 'fix1'
|
||||
|
||||
def check2(fix1, i):
|
||||
assert i == 2
|
||||
assert fix1 == 'fix1'
|
||||
|
||||
def check3(fix1, i, fix2):
|
||||
assert i == 2
|
||||
assert fix1 == 'fix1'
|
||||
assert fix2 == 'fix2'
|
||||
|
||||
test_ok_1 = functools.partial(check1, i=2)
|
||||
test_ok_2 = functools.partial(check1, i=2, fix1='fix1')
|
||||
test_ok_3 = functools.partial(check1, 2)
|
||||
test_ok_4 = functools.partial(check2, i=2)
|
||||
test_ok_5 = functools.partial(check3, i=2)
|
||||
test_ok_6 = functools.partial(check3, i=2, fix1='fix1')
|
||||
|
||||
test_fail_1 = functools.partial(check2, 2)
|
||||
test_fail_2 = functools.partial(check3, 2)
|
||||
"""
|
||||
)
|
||||
result = testdir.inline_run()
|
||||
result.assertoutcome(passed=6, failed=2)
|
||||
|
||||
|
||||
@pytest.mark.filterwarnings("default")
|
||||
def test_dont_collect_non_function_callable(testdir):
|
||||
"""Test for issue https://github.com/pytest-dev/pytest/issues/331
|
||||
|
||||
@@ -10,7 +10,9 @@ from _pytest.pytester import get_public_names
|
||||
from _pytest.warnings import SHOW_PYTEST_WARNINGS_ARG
|
||||
|
||||
|
||||
def test_getfuncargnames():
|
||||
def test_getfuncargnames_functions():
|
||||
"""Test getfuncargnames for normal functions"""
|
||||
|
||||
def f():
|
||||
pass
|
||||
|
||||
@@ -31,18 +33,56 @@ def test_getfuncargnames():
|
||||
|
||||
assert fixtures.getfuncargnames(j) == ("arg1", "arg2")
|
||||
|
||||
|
||||
def test_getfuncargnames_methods():
|
||||
"""Test getfuncargnames for normal methods"""
|
||||
|
||||
class A:
|
||||
def f(self, arg1, arg2="hello"):
|
||||
pass
|
||||
|
||||
assert fixtures.getfuncargnames(A().f) == ("arg1",)
|
||||
|
||||
|
||||
def test_getfuncargnames_staticmethod():
|
||||
"""Test getfuncargnames for staticmethods"""
|
||||
|
||||
class A:
|
||||
@staticmethod
|
||||
def static(arg1, arg2):
|
||||
def static(arg1, arg2, x=1):
|
||||
pass
|
||||
|
||||
assert fixtures.getfuncargnames(A().f) == ("arg1",)
|
||||
assert fixtures.getfuncargnames(A.static, cls=A) == ("arg1", "arg2")
|
||||
|
||||
|
||||
def test_getfuncargnames_partial():
|
||||
"""Check getfuncargnames for methods defined with functools.partial (#5701)"""
|
||||
import functools
|
||||
|
||||
def check(arg1, arg2, i):
|
||||
pass
|
||||
|
||||
class T:
|
||||
test_ok = functools.partial(check, i=2)
|
||||
|
||||
values = fixtures.getfuncargnames(T().test_ok, name="test_ok")
|
||||
assert values == ("arg1", "arg2")
|
||||
|
||||
|
||||
def test_getfuncargnames_staticmethod_partial():
|
||||
"""Check getfuncargnames for staticmethods defined with functools.partial (#5701)"""
|
||||
import functools
|
||||
|
||||
def check(arg1, arg2, i):
|
||||
pass
|
||||
|
||||
class T:
|
||||
test_ok = staticmethod(functools.partial(check, i=2))
|
||||
|
||||
values = fixtures.getfuncargnames(T().test_ok, name="test_ok")
|
||||
assert values == ("arg1", "arg2")
|
||||
|
||||
|
||||
@pytest.mark.pytester_example_path("fixtures/fill_fixtures")
|
||||
class TestFillFixtures:
|
||||
def test_fillfuncargs_exposed(self):
|
||||
|
||||
Reference in New Issue
Block a user