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() == """
Field 1 Field 2 Field 3
""".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() == """
Field 1 Field 2 Field 3
""".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() )