1
0
Fork 0
terminaltables3/tests/test_base_table/test_gen_table.py
Daniel Baumann a35389c891
Adding upstream version 3.1.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-12 13:04:33 +01:00

225 lines
7.1 KiB
Python

"""Test method in BaseTable class."""
import pytest
from terminaltables.base_table import BaseTable
from terminaltables.build import flatten
from terminaltables.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