1
0
Fork 0
terminaltables3/tests/test_base_table/test_gen_table.py
Daniel Baumann 07735c967b
Merging upstream version 4.0.0 (Closes: #1095814).
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-12 15:00:49 +01:00

207 lines
6.8 KiB
Python

"""Test method in BaseTable class."""
import pytest
from terminaltables3.base_table import BaseTable
from terminaltables3.build import flatten
from terminaltables3.width_and_alignment import max_dimensions
@pytest.mark.parametrize("inner_heading_row_border", [True, False])
@pytest.mark.parametrize("inner_footing_row_border", [True, False])
@pytest.mark.parametrize("inner_row_border", [True, False])
def test_inner_row_borders(
inner_heading_row_border, inner_footing_row_border, inner_row_border
):
"""Test heading/footing/row borders.
:param bool inner_heading_row_border: Passed to table.
:param bool inner_footing_row_border: Passed to table.
:param bool inner_row_border: Passed to table.
"""
table_data = [
["Name", "Color", "Type"],
["Avocado", "green", "nut"],
["Tomato", "red", "fruit"],
["Lettuce", "green", "vegetable"],
]
table = BaseTable(table_data)
table.inner_heading_row_border = inner_heading_row_border
table.inner_footing_row_border = inner_footing_row_border
table.inner_row_border = inner_row_border
inner_widths, inner_heights, outer_widths = max_dimensions(
table_data, table.padding_left, table.padding_right
)[:3]
actual = flatten(table.gen_table(inner_widths, inner_heights, outer_widths))
# Determine expected.
if inner_row_border:
expected = (
"+---------+-------+-----------+\n"
"| Name | Color | Type |\n"
"+---------+-------+-----------+\n"
"| Avocado | green | nut |\n"
"+---------+-------+-----------+\n"
"| Tomato | red | fruit |\n"
"+---------+-------+-----------+\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
elif inner_heading_row_border and inner_footing_row_border:
expected = (
"+---------+-------+-----------+\n"
"| Name | Color | Type |\n"
"+---------+-------+-----------+\n"
"| Avocado | green | nut |\n"
"| Tomato | red | fruit |\n"
"+---------+-------+-----------+\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
elif inner_heading_row_border:
expected = (
"+---------+-------+-----------+\n"
"| Name | Color | Type |\n"
"+---------+-------+-----------+\n"
"| Avocado | green | nut |\n"
"| Tomato | red | fruit |\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
elif inner_footing_row_border:
expected = (
"+---------+-------+-----------+\n"
"| Name | Color | Type |\n"
"| Avocado | green | nut |\n"
"| Tomato | red | fruit |\n"
"+---------+-------+-----------+\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
else:
expected = (
"+---------+-------+-----------+\n"
"| Name | Color | Type |\n"
"| Avocado | green | nut |\n"
"| Tomato | red | fruit |\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
assert actual == expected
@pytest.mark.parametrize("outer_border", [True, False])
def test_outer_borders(outer_border):
"""Test left/right/top/bottom table borders.
:param bool outer_border: Passed to table.
"""
table_data = [
["Name", "Color", "Type"],
["Avocado", "green", "nut"],
["Tomato", "red", "fruit"],
["Lettuce", "green", "vegetable"],
]
table = BaseTable(table_data, "Example Table")
table.outer_border = outer_border
inner_widths, inner_heights, outer_widths = max_dimensions(
table_data, table.padding_left, table.padding_right
)[:3]
actual = flatten(table.gen_table(inner_widths, inner_heights, outer_widths))
# Determine expected.
if outer_border:
expected = (
"+Example Table----+-----------+\n"
"| Name | Color | Type |\n"
"+---------+-------+-----------+\n"
"| Avocado | green | nut |\n"
"| Tomato | red | fruit |\n"
"| Lettuce | green | vegetable |\n"
"+---------+-------+-----------+"
)
else:
expected = (
" Name | Color | Type \n"
"---------+-------+-----------\n"
" Avocado | green | nut \n"
" Tomato | red | fruit \n"
" Lettuce | green | vegetable "
)
assert actual == expected
@pytest.mark.parametrize("mode", ["row", "one", "blank", "empty", "none"])
@pytest.mark.parametrize("bare", [False, True])
def test_one_no_rows(mode, bare):
"""Test with one or no rows.
:param str mode: Type of table contents to test.
:param bool bare: Disable padding/borders.
"""
if mode == "row":
table_data = [
["Avocado", "green", "nut"],
]
elif mode == "one":
table_data = [
["Avocado"],
]
elif mode == "blank":
table_data = [
[""],
]
elif mode == "empty":
table_data = [
[],
]
else:
table_data = []
table = BaseTable(table_data)
if bare:
table.inner_column_border = False
table.inner_footing_row_border = False
table.inner_heading_row_border = False
table.inner_row_border = False
table.outer_border = False
table.padding_left = 0
table.padding_right = 0
inner_widths, inner_heights, outer_widths = max_dimensions(
table_data, table.padding_left, table.padding_right
)[:3]
actual = flatten(table.gen_table(inner_widths, inner_heights, outer_widths))
# Determine expected.
if mode == "row":
if bare:
expected = "Avocadogreennut"
else:
expected = (
"+---------+-------+-----+\n"
"| Avocado | green | nut |\n"
"+---------+-------+-----+"
)
elif mode == "one":
if bare:
expected = "Avocado"
else:
expected = "+---------+\n" "| Avocado |\n" "+---------+"
elif mode == "blank": # Remember there's still padding.
if bare:
expected = ""
else:
expected = "+--+\n" "| |\n" "+--+"
elif mode == "empty":
if bare:
expected = ""
else:
expected = "++\n" "||\n" "++"
else:
if bare:
expected = ""
else:
expected = "++\n" "++"
assert actual == expected