forked from test_framework/pytest-bdd
155 lines
4.1 KiB
Python
155 lines
4.1 KiB
Python
"""Multiline steps tests."""
|
|
import textwrap
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
["feature_text", "expected_text"],
|
|
[
|
|
(
|
|
textwrap.dedent(
|
|
'''\
|
|
Feature: Multiline
|
|
Scenario: Multiline step using sub indentation
|
|
Given I have a step with:
|
|
"""
|
|
Some
|
|
|
|
Extra
|
|
Lines
|
|
"""
|
|
Then the text should be parsed with correct indentation
|
|
'''
|
|
),
|
|
"Some\n\nExtra\nLines",
|
|
),
|
|
(
|
|
textwrap.dedent(
|
|
"""\
|
|
Feature: Multiline
|
|
Scenario: Multiline step using sub indentation
|
|
Given I have a step with:
|
|
Some
|
|
|
|
Extra
|
|
Lines
|
|
Then the text should be parsed with correct indentation
|
|
"""
|
|
),
|
|
"Some\n\nExtra\nLines",
|
|
),
|
|
(
|
|
textwrap.dedent(
|
|
"""\
|
|
Feature: Multiline
|
|
Scenario: Multiline step using sub indentation
|
|
Given I have a step with:
|
|
Some
|
|
|
|
Extra
|
|
Lines
|
|
|
|
Then the text should be parsed with correct indentation
|
|
"""
|
|
),
|
|
" Some\n\n Extra\nLines",
|
|
),
|
|
(
|
|
textwrap.dedent(
|
|
"""\
|
|
Feature: Multiline
|
|
Scenario: Multiline step using sub indentation
|
|
Given I have a step with:
|
|
Some
|
|
Extra
|
|
Lines
|
|
|
|
"""
|
|
),
|
|
"Some\nExtra\nLines",
|
|
),
|
|
],
|
|
)
|
|
def test_multiline(testdir, feature_text, expected_text):
|
|
testdir.makefile(".feature", multiline=feature_text)
|
|
|
|
testdir.makepyfile(
|
|
textwrap.dedent(
|
|
"""\
|
|
from pytest_bdd import parsers, given, then, scenario
|
|
|
|
expected_text = '''{expected_text}'''
|
|
|
|
|
|
@scenario("multiline.feature", "Multiline step using sub indentation")
|
|
def test_multiline(request):
|
|
assert request.getfixturevalue("text") == expected_text
|
|
|
|
|
|
@given(parsers.parse("I have a step with:\\n{{text}}"), target_fixture="text")
|
|
def _(text):
|
|
return text
|
|
|
|
|
|
@then("the text should be parsed with correct indentation")
|
|
def _(text):
|
|
assert text == expected_text
|
|
|
|
""".format(
|
|
expected_text=expected_text.encode("unicode_escape").decode("utf-8"),
|
|
)
|
|
)
|
|
)
|
|
result = testdir.runpytest()
|
|
result.assert_outcomes(passed=1)
|
|
|
|
|
|
def test_multiline_wrong_indent(testdir):
|
|
"""Multiline step using sub indentation wrong indent."""
|
|
|
|
testdir.makefile(
|
|
".feature",
|
|
multiline=textwrap.dedent(
|
|
"""\
|
|
|
|
Feature: Multiline
|
|
Scenario: Multiline step using sub indentation wrong indent
|
|
Given I have a step with:
|
|
Some
|
|
|
|
Extra
|
|
Lines
|
|
Then the text should be parsed with correct indentation
|
|
|
|
"""
|
|
),
|
|
)
|
|
|
|
testdir.makepyfile(
|
|
textwrap.dedent(
|
|
"""\
|
|
from pytest_bdd import parsers, given, then, scenario
|
|
|
|
|
|
@scenario("multiline.feature", "Multiline step using sub indentation wrong indent")
|
|
def test_multiline(request):
|
|
pass
|
|
|
|
|
|
@given(parsers.parse("I have a step with:\\n{{text}}"), target_fixture="text")
|
|
def _(text):
|
|
return text
|
|
|
|
|
|
@then("the text should be parsed with correct indentation")
|
|
def _(text):
|
|
assert text == expected_text
|
|
|
|
"""
|
|
)
|
|
)
|
|
result = testdir.runpytest()
|
|
result.assert_outcomes(failed=1)
|
|
result.stdout.fnmatch_lines("*StepDefinitionNotFoundError: Step definition is not found:*")
|