-
-
Notifications
You must be signed in to change notification settings - Fork 672
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
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 | ||
|
@@ -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]): | ||
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]): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here, the splitting of the strings is different for all 3 options, with |
||
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(), | ||
), | ||
Comment on lines
+152
to
+156
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test currently fails on
-> this happens mostly because the newlines are not parsed correctly, after which the bullet points aren't recognized correctly. PR #815 attempts to fix this. |
||
("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(), | ||
), | ||
Comment on lines
+191
to
+195
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test currently fails on
-> this happens mostly because the newlines are not parsed correctly, after which the bullet points aren't recognized correctly. PR #815 attempts to fix this. |
||
("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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here, the question is mostly about the newlines: should there be one after "First line" or not?
Further, should the
markdown
parser output "Line 1 Line 2 Line 3" as one string, or split them into multiple strings, similar to the current behaviour for the optionnone
?