summaryrefslogtreecommitdiffstats
path: root/tests/test_base_table/test_gen_table.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_base_table/test_gen_table.py')
-rw-r--r--tests/test_base_table/test_gen_table.py225
1 files changed, 225 insertions, 0 deletions
diff --git a/tests/test_base_table/test_gen_table.py b/tests/test_base_table/test_gen_table.py
new file mode 100644
index 0000000..54d5fe1
--- /dev/null
+++ b/tests/test_base_table/test_gen_table.py
@@ -0,0 +1,225 @@
+"""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