207 lines
6.8 KiB
Python
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
|