Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✅ Add more tests for the behaviour of rich_markup_mode #964

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
186 changes: 186 additions & 0 deletions tests/test_rich_markup_mode.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from typing import List

import pytest
import typer
import typer.completion
from typer.testing import CliRunner
Expand Down Expand Up @@ -38,3 +41,186 @@ def main(arg: str):

result = runner.invoke(app, ["--help"])
assert any(c in result.stdout for c in rounded)


@pytest.mark.parametrize(
"mode,lines",
[
("markdown", ["First line", "Line 1 Line 2 Line 3", ""]),
("rich", ["First line", "Line 1", "", "Line 2", "", "Line 3", ""]),
("none", ["First line", "Line 1", "Line 2", "Line 3", ""]),
],
)
def test_markup_mode_newline_pr815(mode: str, lines: List[str]):
svlandeg marked this conversation as resolved.
Show resolved Hide resolved
app = typer.Typer(rich_markup_mode=mode)

@app.command()
def main(arg: str):
"""First line

Line 1

Line 2

Line 3
"""
print(f"Hello {arg}")

assert app.rich_markup_mode == mode

result = runner.invoke(app, ["World"])
assert "Hello World" in result.stdout

result = runner.invoke(app, ["--help"])
result_lines = [line.strip() for line in result.stdout.split("\n")]
assert any(c in result.stdout for c in rounded)
help_start = result_lines.index("First line")
arg_start = [i for i, row in enumerate(result_lines) if "Arguments" in row][0]
assert help_start != -1
assert result_lines[help_start:arg_start] == lines


@pytest.mark.parametrize(
"mode,lines",
[
(
"markdown",
[
"This header is just pretty long really",
"Line 1 of a very extremely super long line And a short line 2",
"",
],
),
(
"rich",
[
"This header is just pretty long really",
"Line 1 of a very",
"extremely super long",
"line",
"",
"And a short line 2",
"",
],
),
(
"none",
[
"This header is just pretty long really",
"Line 1 of a very extremely super long line",
"And a short line 2",
"",
],
),
],
)
def test_markup_mode_newline_issue447(mode: str, lines: List[str]):
svlandeg marked this conversation as resolved.
Show resolved Hide resolved
app = typer.Typer(rich_markup_mode=mode)

@app.command()
def main(arg: str):
"""This header
is just
pretty long
really

Line 1 of a very
extremely super long
line

And a short line 2
"""
print(f"Hello {arg}")

assert app.rich_markup_mode == mode

result = runner.invoke(app, ["World"])
assert "Hello World" in result.stdout

result = runner.invoke(app, ["--help"])
result_lines = [line.strip() for line in result.stdout.split("\n")]
assert any(c in result.stdout for c in rounded)
help_start = [i for i, row in enumerate(result_lines) if "This header" in row][0]
arg_start = [i for i, row in enumerate(result_lines) if "Arguments" in row][0]
assert help_start != -1
assert result_lines[help_start:arg_start] == lines


@pytest.mark.parametrize(
"mode,lines",
[
pytest.param(
"markdown",
["First line", "", "• 1", "• 2", "• 3", ""],
marks=pytest.mark.xfail(),
),
svlandeg marked this conversation as resolved.
Show resolved Hide resolved
("rich", ["First line", "- 1", "- 2", "- 3", ""]),
("none", ["First line", "- 1 - 2 - 3", ""]),
],
)
def test_markup_mode_bullets(mode: str, lines: List[str]):
app = typer.Typer(rich_markup_mode=mode)

@app.command()
def main(arg: str):
"""First line

- 1
- 2
- 3
"""
print(f"Hello {arg}")

assert app.rich_markup_mode == mode

result = runner.invoke(app, ["World"])
assert "Hello World" in result.stdout

result = runner.invoke(app, ["--help"])
result_lines = [line.strip() for line in result.stdout.split("\n")]
assert any(c in result.stdout for c in rounded)
help_start = result_lines.index("First line")
arg_start = [i for i, row in enumerate(result_lines) if "Arguments" in row][0]
assert help_start != -1
assert result_lines[help_start:arg_start] == lines


@pytest.mark.parametrize(
"mode,lines",
[
pytest.param(
"markdown",
["First line", "", "• 1", "• 2", "• a", "• b", "• 3", ""],
marks=pytest.mark.xfail(),
),
svlandeg marked this conversation as resolved.
Show resolved Hide resolved
("rich", ["First line", "- 1", "- 2", "- a", "- b", "- 3", ""]),
("none", ["First line", "- 1 - 2 - a - b - 3", ""]),
],
)
def test_markup_mode_nested_bullets(mode: str, lines: List[str]):
app = typer.Typer(rich_markup_mode=mode)

@app.command()
def main(arg: str):
"""First line

- 1
- 2
- a
- b
- 3
"""
print(f"Hello {arg}")

assert app.rich_markup_mode == mode

result = runner.invoke(app, ["World"])
assert "Hello World" in result.stdout

result = runner.invoke(app, ["--help"])
result_lines = [line.strip() for line in result.stdout.split("\n")]
assert any(c in result.stdout for c in rounded)
help_start = result_lines.index("First line")
arg_start = [i for i, row in enumerate(result_lines) if "Arguments" in row][0]
assert help_start != -1
assert result_lines[help_start:arg_start] == lines
Loading