Organize tests into a class
This commit is contained in:
parent
dc52beadc4
commit
61cc290f3e
|
@ -2616,121 +2616,113 @@ def test_format_trimmed() -> None:
|
||||||
assert _format_trimmed(" ({}) ", msg, len(msg) + 3) == " (unconditional ...) "
|
assert _format_trimmed(" ({}) ", msg, len(msg) + 3) == " (unconditional ...) "
|
||||||
|
|
||||||
|
|
||||||
def test_fine_grained_test_case_verbosity(pytester: Pytester) -> None:
|
class TestFineGrainedTestCase:
|
||||||
p = pytester.makepyfile(_fine_grained_verbosity_file_contents())
|
def test_max_verbosity(self, pytester: Pytester) -> None:
|
||||||
pytester.makeini(
|
p = TestFineGrainedTestCase._initialize_files(pytester, verbosity=2)
|
||||||
"""
|
result = pytester.runpytest(p)
|
||||||
[pytest]
|
|
||||||
verbosity_test_cases = 2
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
result = pytester.runpytest(p)
|
|
||||||
|
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
[
|
[
|
||||||
f"{p.name}::test_ok PASSED [ 14%]",
|
f"{p.name}::test_ok PASSED [ 14%]",
|
||||||
f"{p.name}::test_words_fail FAILED [ 28%]",
|
f"{p.name}::test_words_fail FAILED [ 28%]",
|
||||||
f"{p.name}::test_numbers_fail FAILED [ 42%]",
|
f"{p.name}::test_numbers_fail FAILED [ 42%]",
|
||||||
f"{p.name}::test_long_text_fail FAILED [ 57%]",
|
f"{p.name}::test_long_text_fail FAILED [ 57%]",
|
||||||
f"{p.name}::test_parametrize_fail[hello-1] FAILED [ 71%]",
|
f"{p.name}::test_parametrize_fail[hello-1] FAILED [ 71%]",
|
||||||
f"{p.name}::test_parametrize_fail[world-987654321] FAILED [ 85%]",
|
f"{p.name}::test_parametrize_fail[world-987654321] FAILED [ 85%]",
|
||||||
f"{p.name}::test_sample_skip SKIPPED (some",
|
f"{p.name}::test_sample_skip SKIPPED (some long skip reason",
|
||||||
"long skip reason that will not fit on a single line with other content",
|
"that will not fit on a single line with other content that goes on and",
|
||||||
"that goes on and on and on and on and on) [100%]",
|
"on and on and on and on) [100%]",
|
||||||
],
|
],
|
||||||
consecutive=True,
|
consecutive=True,
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_fine_grained_test_case_verbosity_collect_only_negative_2(pytester: Pytester) -> None:
|
|
||||||
p = pytester.makepyfile(_fine_grained_verbosity_file_contents())
|
|
||||||
pytester.makeini(
|
|
||||||
"""
|
|
||||||
[pytest]
|
|
||||||
verbosity_test_cases = -2
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
result = pytester.runpytest("--collect-only", p)
|
|
||||||
|
|
||||||
result.stdout.fnmatch_lines(
|
|
||||||
[
|
|
||||||
"collected 7 items",
|
|
||||||
"",
|
|
||||||
f"{p.name}: 7",
|
|
||||||
],
|
|
||||||
consecutive=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_fine_grained_test_case_verbosity_collect_only_positive_2(pytester: Pytester) -> None:
|
|
||||||
p = pytester.makepyfile(_fine_grained_verbosity_file_contents())
|
|
||||||
pytester.makeini(
|
|
||||||
"""
|
|
||||||
[pytest]
|
|
||||||
verbosity_test_cases = 2
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
result = pytester.runpytest("--collect-only", p)
|
|
||||||
|
|
||||||
result.stdout.fnmatch_lines(
|
|
||||||
[
|
|
||||||
"collected 7 items",
|
|
||||||
"",
|
|
||||||
f"<Module {p.name}>",
|
|
||||||
" <Function test_ok>",
|
|
||||||
" some docstring",
|
|
||||||
" <Function test_words_fail>",
|
|
||||||
" <Function test_numbers_fail>",
|
|
||||||
" <Function test_long_text_fail>",
|
|
||||||
" <Function test_parametrize_fail[hello-1]>",
|
|
||||||
" <Function test_parametrize_fail[world-987654321]>",
|
|
||||||
" <Function test_sample_skip>",
|
|
||||||
],
|
|
||||||
consecutive=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _fine_grained_verbosity_file_contents() -> str:
|
|
||||||
long_text = "Lorem ipsum dolor sit amet " * 10
|
|
||||||
return f"""
|
|
||||||
import pytest
|
|
||||||
def test_ok():
|
|
||||||
'''
|
|
||||||
some docstring
|
|
||||||
'''
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def test_words_fail():
|
|
||||||
fruits1 = ["banana", "apple", "grapes", "melon", "kiwi"]
|
|
||||||
fruits2 = ["banana", "apple", "orange", "melon", "kiwi"]
|
|
||||||
assert fruits1 == fruits2
|
|
||||||
|
|
||||||
|
|
||||||
def test_numbers_fail():
|
|
||||||
number_to_text1 = {{str(x): x for x in range(5)}}
|
|
||||||
number_to_text2 = {{str(x * 10): x * 10 for x in range(5)}}
|
|
||||||
assert number_to_text1 == number_to_text2
|
|
||||||
|
|
||||||
|
|
||||||
def test_long_text_fail():
|
|
||||||
long_text = "{long_text}"
|
|
||||||
assert "hello world" in long_text
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(["foo", "bar"], [
|
|
||||||
("hello", 1),
|
|
||||||
("world", 987654321),
|
|
||||||
])
|
|
||||||
def test_parametrize_fail(foo, bar):
|
|
||||||
long_text = f"{{foo}} {{bar}}"
|
|
||||||
assert "hello world" in long_text
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip(
|
|
||||||
"some long skip reason that will not fit on a single line with other content that goes"
|
|
||||||
" on and on and on and on and on"
|
|
||||||
)
|
)
|
||||||
def test_sample_skip():
|
|
||||||
pass
|
def test_collect_only_negative_2(self, pytester: Pytester) -> None:
|
||||||
"""
|
p = TestFineGrainedTestCase._initialize_files(pytester, verbosity=-2)
|
||||||
|
result = pytester.runpytest("--collect-only", p)
|
||||||
|
|
||||||
|
result.stdout.fnmatch_lines(
|
||||||
|
[
|
||||||
|
"collected 7 items",
|
||||||
|
"",
|
||||||
|
f"{p.name}: 7",
|
||||||
|
],
|
||||||
|
consecutive=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test__collect_only_positive_2(self, pytester: Pytester) -> None:
|
||||||
|
p = TestFineGrainedTestCase._initialize_files(pytester, verbosity=2)
|
||||||
|
result = pytester.runpytest("--collect-only", p)
|
||||||
|
|
||||||
|
result.stdout.fnmatch_lines(
|
||||||
|
[
|
||||||
|
"collected 7 items",
|
||||||
|
"",
|
||||||
|
f"<Module {p.name}>",
|
||||||
|
" <Function test_ok>",
|
||||||
|
" some docstring",
|
||||||
|
" <Function test_words_fail>",
|
||||||
|
" <Function test_numbers_fail>",
|
||||||
|
" <Function test_long_text_fail>",
|
||||||
|
" <Function test_parametrize_fail[hello-1]>",
|
||||||
|
" <Function test_parametrize_fail[world-987654321]>",
|
||||||
|
" <Function test_sample_skip>",
|
||||||
|
],
|
||||||
|
consecutive=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _initialize_files(pytester: Pytester, verbosity: int) -> Path:
|
||||||
|
p = pytester.makepyfile(TestFineGrainedTestCase.file_contents())
|
||||||
|
pytester.makeini(
|
||||||
|
f"""
|
||||||
|
[pytest]
|
||||||
|
verbosity_test_cases = {verbosity}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
return p
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def file_contents() -> str:
|
||||||
|
long_text = "Lorem ipsum dolor sit amet " * 10
|
||||||
|
return f"""
|
||||||
|
import pytest
|
||||||
|
def test_ok():
|
||||||
|
'''
|
||||||
|
some docstring
|
||||||
|
'''
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_words_fail():
|
||||||
|
fruits1 = ["banana", "apple", "grapes", "melon", "kiwi"]
|
||||||
|
fruits2 = ["banana", "apple", "orange", "melon", "kiwi"]
|
||||||
|
assert fruits1 == fruits2
|
||||||
|
|
||||||
|
|
||||||
|
def test_numbers_fail():
|
||||||
|
number_to_text1 = {{str(x): x for x in range(5)}}
|
||||||
|
number_to_text2 = {{str(x * 10): x * 10 for x in range(5)}}
|
||||||
|
assert number_to_text1 == number_to_text2
|
||||||
|
|
||||||
|
|
||||||
|
def test_long_text_fail():
|
||||||
|
long_text = "{long_text}"
|
||||||
|
assert "hello world" in long_text
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(["foo", "bar"], [
|
||||||
|
("hello", 1),
|
||||||
|
("world", 987654321),
|
||||||
|
])
|
||||||
|
def test_parametrize_fail(foo, bar):
|
||||||
|
long_text = f"{{foo}} {{bar}}"
|
||||||
|
assert "hello world" in long_text
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skip(
|
||||||
|
"some long skip reason that will not fit on a single line with other content that goes"
|
||||||
|
" on and on and on and on and on"
|
||||||
|
)
|
||||||
|
def test_sample_skip():
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
|
Loading…
Reference in New Issue