from __future__ import annotations
import pytest
from prettytable import HRuleStyle, PrettyTable, from_html, from_html_one
class TestHtmlConstructor:
def test_html_and_back(self, city_data: PrettyTable) -> None:
html_string = city_data.get_html_string()
new_table = from_html(html_string)[0]
assert new_table.get_string() == city_data.get_string()
def test_html_one_and_back(self, city_data: PrettyTable) -> None:
html_string = city_data.get_html_string()
new_table = from_html_one(html_string)
assert new_table.get_string() == city_data.get_string()
def test_html_one_fail_on_many(self, city_data: PrettyTable) -> None:
html_string = city_data.get_html_string()
html_string += city_data.get_html_string()
with pytest.raises(ValueError):
from_html_one(html_string)
class TestHtmlOutput:
def test_html_output(self, helper_table: PrettyTable) -> None:
result = helper_table.get_html_string()
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
| 4 |
value 4 |
value5 |
value6 |
| 7 |
value 7 |
value8 |
value9 |
""".strip()
)
def test_html_output_formatted(self, helper_table: PrettyTable) -> None:
result = helper_table.get_html_string(format=True)
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
| 4 |
value 4 |
value5 |
value6 |
| 7 |
value 7 |
value8 |
value9 |
""".strip() # noqa: E501
)
def test_html_output_with_title(self, helper_table: PrettyTable) -> None:
helper_table.title = "Title & Title"
result = helper_table.get_html_string(
attributes={"bgcolor": "red", "a
Title & Title
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
| 4 |
value 4 |
value5 |
value6 |
| 7 |
value 7 |
value8 |
value9 |
""".strip()
)
def test_html_output_formatted_with_title(self, helper_table: PrettyTable) -> None:
helper_table.title = "Title & Title"
result = helper_table.get_html_string(
attributes={"bgcolor": "red", "a
Title & Title
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
| 4 |
value 4 |
value5 |
value6 |
| 7 |
value 7 |
value8 |
value9 |
""".strip() # noqa: E501
)
def test_html_output_without_escaped_header(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.field_names = [
"",
"Field 1",
"Field 2",
"Field 3",
]
result = empty_helper_table.get_html_string(escape_header=False)
assert (
result.strip()
== """
""".strip()
)
def test_html_output_without_escaped_data(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.add_row(
[
1,
"value 1",
"value2",
"value3",
]
)
result = empty_helper_table.get_html_string(escape_data=False)
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
""".strip()
)
def test_html_output_with_escaped_header(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.field_names = [
"",
"Field 1",
"Field 2",
"Field 3",
]
result = empty_helper_table.get_html_string(escape_header=True)
assert (
result.strip()
== """
|
Field 1 |
<em>Field 2</em> |
<a href='#'>Field 3</a> |
""".strip()
)
def test_html_output_with_escaped_data(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.add_row(
[
1,
"value 1",
"value2",
"value3",
]
)
result = empty_helper_table.get_html_string(escape_data=True)
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
<b>value 1</b> |
<span style='text-decoration: underline;'>value2</span> |
<a href='#'>value3</a> |
""".strip() # noqa: E501
)
def test_html_output_formatted_without_escaped_header(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.field_names = [
"",
"Field 1",
"Field 2",
"Field 3",
]
result = empty_helper_table.get_html_string(escape_header=False, format=True)
assert (
result.strip()
== """
""".strip() # noqa: E501
)
def test_html_output_formatted_without_escaped_data(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.add_row(
[
1,
"value 1",
"value2",
"value3",
]
)
result = empty_helper_table.get_html_string(escape_data=False, format=True)
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
""".strip() # noqa: E501
)
def test_html_output_formatted_with_escaped_header(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.field_names = [
"",
"Field 1",
"Field 2",
"Field 3",
]
result = empty_helper_table.get_html_string(escape_header=True, format=True)
assert (
result.strip()
== """
|
Field 1 |
<em>Field 2</em> |
<a href='#'>Field 3</a> |
""".strip() # noqa: E501
)
def test_html_output_formatted_with_escaped_data(
self, empty_helper_table: PrettyTable
) -> None:
empty_helper_table.add_row(
[
1,
"value 1",
"value2",
"value3",
]
)
result = empty_helper_table.get_html_string(escape_data=True, format=True)
assert (
result.strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
<b>value 1</b> |
<span style='text-decoration: underline;'>value2</span> |
<a href='#'>value3</a> |
""".strip() # noqa: E501
)
def test_table_formatted_html_autoindex(self) -> None:
"""See also #199"""
table = PrettyTable(["Field 1", "Field 2", "Field 3"])
for row in range(1, 3 * 3, 3):
table.add_row(
[f"value {row*100}", f"value {row+1*100}", f"value {row+2*100}"]
)
table.format = True
table.add_autoindex("I")
assert (
table.get_html_string().strip()
== """
| I |
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 100 |
value 101 |
value 201 |
| 2 |
value 400 |
value 104 |
value 204 |
| 3 |
value 700 |
value 107 |
value 207 |
""".strip() # noqa: E501
)
def test_internal_border_preserved_html(self, helper_table: PrettyTable) -> None:
helper_table.format = True
helper_table.border = False
helper_table.preserve_internal_border = True
assert (
helper_table.get_html_string().strip()
== """
|
Field 1 |
Field 2 |
Field 3 |
| 1 |
value 1 |
value2 |
value3 |
| 4 |
value 4 |
value5 |
value6 |
| 7 |
value 7 |
value8 |
value9 |
""".strip() # noqa: E501
)
def test_break_line_html(self) -> None:
table = PrettyTable(["Field 1", "Field 2"])
table.add_row(["value 1", "value2\nsecond line"])
table.add_row(["value 3", "value4"])
result = table.get_html_string(hrules=HRuleStyle.ALL)
assert (
result.strip()
== """
| Field 1 |
Field 2 |
| value 1 |
value2 second line |
| value 3 |
value4 |
""".strip()
)
def test_break_line_xhtml(self) -> None:
table = PrettyTable(["Field 1", "Field 2"])
table.add_row(["value 1", "value2\nsecond line"])
table.add_row(["value 3", "value4"])
result = table.get_html_string(hrules=HRuleStyle.ALL, xhtml=True)
assert (
result.strip()
== """
| Field 1 |
Field 2 |
| value 1 |
value2 second line |
| value 3 |
value4 |
""".strip()
)