1
0
Fork 0
terminaltables3/tests/test_build/test_build_border.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

335 lines
12 KiB
Python

"""Test function in module."""
import pytest
from colorama import Fore, Style
from colorclass import Color
from termcolor import colored
from terminaltables3.build import build_border
@pytest.mark.parametrize(
"outer_widths,horizontal,left,intersect,right,expected",
[
([5, 6, 7], "-", "<", "+", ">", "<-----+------+------->"),
([1, 1, 1], "-", "", "", "", "---"),
([1, 1, 1], "", "", "", "", ""),
([1], "-", "<", "+", ">", "<->"),
([], "-", "<", "+", ">", "<>"),
],
)
def test_no_title(outer_widths, horizontal, left, intersect, right, expected):
"""Test without title.
:param iter outer_widths: List of integers representing column widths with padding.
:param str horizontal: Character to stretch across each column.
:param str left: Left border.
:param str intersect: Column separator.
:param str right: Right border.
:param str expected: Expected output.
"""
actual = build_border(outer_widths, horizontal, left, intersect, right)
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,intersect,expected",
[
([20], "+", "Applications--------"),
([20], "", "Applications--------"),
([15, 5], "+", "Applications---+-----"),
([15, 5], "", "Applications--------"),
([12], "+", "Applications"),
([12], "", "Applications"),
([12, 1], "+", "Applications+-"),
([12, 1], "", "Applications-"),
([12, 0], "+", "Applications+"),
([12, 0], "", "Applications"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
def test_first_column_fit(outer_widths, left, intersect, right, expected):
"""Test with title that fits in the first column.
:param iter outer_widths: List of integers representing column widths with padding.
:param str left: Left border.
:param str intersect: Column separator.
:param str right: Right border.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(
outer_widths, "-", left, intersect, right, title="Applications"
)
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,expected",
[
([20], "Applications--------"),
([10, 10], "Applications--------"),
([5, 5, 5, 5], "Applications--------"),
([3, 2, 3, 2, 3, 2, 3, 2], "Applications--------"),
([1] * 20, "Applications--------"),
([10, 5], "Applications---"),
([9, 5], "Applications--"),
([8, 5], "Applications-"),
([7, 5], "Applications"),
([6, 5], "-----------"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
def test_no_intersect(outer_widths, left, right, expected):
"""Test with no column dividers.
:param iter outer_widths: List of integers representing column widths.
:param str left: Left border.
:param str right: Right border.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(outer_widths, "-", left, "", right, title="Applications")
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,expected",
[
([20], "Applications--------"),
([0, 20], "Applications---------"),
([20, 0], "Applications--------+"),
([0, 0, 20], "Applications----------"),
([20, 0, 0], "Applications--------++"),
([10, 10], "Applications---------"),
([11, 9], "Applications---------"),
([12, 8], "Applications+--------"),
([13, 7], "Applications-+-------"),
([5, 5, 5, 5], "Applications-----+-----"),
([4, 4, 6, 6], "Applications----+------"),
([3, 3, 7, 7], "Applications---+-------"),
([2, 2, 7, 9], "Applications-+---------"),
([1, 1, 9, 9], "Applications-+---------"),
([2, 2, 2, 2, 2, 2, 2], "Applications--+--+--"),
([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "Applications-+-+-+-"),
(
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"Applications++++++++",
),
([2, 2, 2, 2], "--+--+--+--"),
([1, 1, 1, 1, 1], "-+-+-+-+-"),
([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "+++++++++"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
def test_intersect(outer_widths, left, right, expected):
"""Test with column dividers.
:param iter outer_widths: List of integers representing column widths.
:param str left: Left border.
:param str right: Right border.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(outer_widths, "-", left, "+", right, title="Applications")
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,intersect,expected",
[
([12], "+", "蓝色--------"),
([12], "", "蓝色--------"),
([7, 5], "+", "蓝色---+-----"),
([7, 5], "", "蓝色--------"),
([4], "+", "蓝色"),
([4], "", "蓝色"),
([4, 1], "+", "蓝色+-"),
([4, 1], "", "蓝色-"),
([4, 0], "+", "蓝色+"),
([4, 0], "", "蓝色"),
([12], "", "蓝色--------"),
([6, 6], "", "蓝色--------"),
([3, 3, 3, 3], "", "蓝色--------"),
([2, 1, 2, 1, 2, 1, 2, 1], "", "蓝色--------"),
([1] * 12, "", "蓝色--------"),
([2, 4], "", "蓝色--"),
([1, 4], "", "蓝色-"),
([1, 3], "", "蓝色"),
([1, 2], "", "---"),
([2], "", "--"),
([12], "+", "蓝色--------"),
([0, 12], "+", "蓝色---------"),
([12, 0], "+", "蓝色--------+"),
([0, 0, 12], "+", "蓝色----------"),
([12, 0, 0], "+", "蓝色--------++"),
([3, 3], "+", "蓝色---"),
([4, 2], "+", "蓝色+--"),
([5, 1], "+", "蓝色-+-"),
([3, 3, 3, 3], "+", "蓝色---+---+---"),
([2, 2, 4, 4], "+", "蓝色-+----+----"),
([1, 1, 5, 5], "+", "蓝色-----+-----"),
([2, 2, 2, 2], "+", "蓝色-+--+--"),
([1, 1, 1, 1, 1], "+", "蓝色-+-+-"),
([0, 0, 0, 0, 0, 0, 0], "+", "蓝色++"),
([1, 1], "+", "-+-"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
def test_cjk(outer_widths, left, intersect, right, expected):
"""Test with CJK characters in title.
:param iter outer_widths: List of integers representing column widths.
:param str left: Left border.
:param str intersect: Column separator.
:param str right: Right border.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(outer_widths, "-", left, intersect, right, title="蓝色")
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,intersect,expected",
[
([12], "+", "معرب--------"),
([12], "", "معرب--------"),
([7, 5], "+", "معرب---+-----"),
([7, 5], "", "معرب--------"),
([4], "+", "معرب"),
([4], "", "معرب"),
([4, 1], "+", "معرب+-"),
([4, 1], "", "معرب-"),
([4, 0], "+", "معرب+"),
([4, 0], "", "معرب"),
([12], "", "معرب--------"),
([6, 6], "", "معرب--------"),
([3, 3, 3, 3], "", "معرب--------"),
([2, 1, 2, 1, 2, 1, 2, 1], "", "معرب--------"),
([1] * 12, "", "معرب--------"),
([2, 4], "", "معرب--"),
([1, 4], "", "معرب-"),
([1, 3], "", "معرب"),
([1, 2], "", "---"),
([2], "", "--"),
([12], "+", "معرب--------"),
([0, 12], "+", "معرب---------"),
([12, 0], "+", "معرب--------+"),
([0, 0, 12], "+", "معرب----------"),
([12, 0, 0], "+", "معرب--------++"),
([3, 3], "+", "معرب---"),
([4, 2], "+", "معرب+--"),
([5, 1], "+", "معرب-+-"),
([3, 3, 3, 3], "+", "معرب---+---+---"),
([2, 2, 4, 4], "+", "معرب-+----+----"),
([1, 1, 5, 5], "+", "معرب-----+-----"),
([2, 2, 2, 2], "+", "معرب-+--+--"),
([1, 1, 1, 1, 1], "+", "معرب-+-+-"),
([0, 0, 0, 0, 0, 0, 0], "+", "معرب++"),
([1, 1], "+", "-+-"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
def test_rtl(outer_widths, left, intersect, right, expected):
"""Test with RTL characters in title.
:param iter outer_widths: List of integers representing column widths.
:param str left: Left border.
:param str intersect: Column separator.
:param str right: Right border.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(outer_widths, "-", left, intersect, right, title="معرب")
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,intersect,expected",
[
([12], "+", "\x1b[34mTEST\x1b[0m--------"),
([12], "", "\x1b[34mTEST\x1b[0m--------"),
([7, 5], "+", "\x1b[34mTEST\x1b[0m---+-----"),
([7, 5], "", "\x1b[34mTEST\x1b[0m--------"),
([4], "+", "\x1b[34mTEST\x1b[0m"),
([4], "", "\x1b[34mTEST\x1b[0m"),
([4, 1], "+", "\x1b[34mTEST\x1b[0m+-"),
([4, 1], "", "\x1b[34mTEST\x1b[0m-"),
([4, 0], "+", "\x1b[34mTEST\x1b[0m+"),
([4, 0], "", "\x1b[34mTEST\x1b[0m"),
([12], "", "\x1b[34mTEST\x1b[0m--------"),
([6, 6], "", "\x1b[34mTEST\x1b[0m--------"),
([3, 3, 3, 3], "", "\x1b[34mTEST\x1b[0m--------"),
([2, 1, 2, 1, 2, 1, 2, 1], "", "\x1b[34mTEST\x1b[0m--------"),
([1] * 12, "", "\x1b[34mTEST\x1b[0m--------"),
([2, 4], "", "\x1b[34mTEST\x1b[0m--"),
([1, 4], "", "\x1b[34mTEST\x1b[0m-"),
([1, 3], "", "\x1b[34mTEST\x1b[0m"),
([1, 2], "", "---"),
([12], "+", "\x1b[34mTEST\x1b[0m--------"),
([0, 12], "+", "\x1b[34mTEST\x1b[0m---------"),
([12, 0], "+", "\x1b[34mTEST\x1b[0m--------+"),
([0, 0, 12], "+", "\x1b[34mTEST\x1b[0m----------"),
([12, 0, 0], "+", "\x1b[34mTEST\x1b[0m--------++"),
([3, 3], "+", "\x1b[34mTEST\x1b[0m---"),
([4, 2], "+", "\x1b[34mTEST\x1b[0m+--"),
([5, 1], "+", "\x1b[34mTEST\x1b[0m-+-"),
([3, 3, 3, 3], "+", "\x1b[34mTEST\x1b[0m---+---+---"),
([2, 2, 4, 4], "+", "\x1b[34mTEST\x1b[0m-+----+----"),
([1, 1, 5, 5], "+", "\x1b[34mTEST\x1b[0m-----+-----"),
([2, 2, 2, 2], "+", "\x1b[34mTEST\x1b[0m-+--+--"),
([1, 1, 1, 1, 1], "+", "\x1b[34mTEST\x1b[0m-+-+-"),
([0, 0, 0, 0, 0, 0, 0], "+", "\x1b[34mTEST\x1b[0m++"),
([1, 1], "+", "-+-"),
],
)
@pytest.mark.parametrize("left,right", [("", ""), ("<", ">")])
@pytest.mark.parametrize(
"title",
[
"\x1b[34mTEST\x1b[0m",
Color("{blue}TEST{/all}"),
Fore.BLUE + "TEST" + Style.RESET_ALL,
colored("TEST", "blue"),
],
)
def test_colors(outer_widths, left, intersect, right, title, expected):
"""Test with color title characters.
:param iter outer_widths: List of integers representing column widths with padding.
:param str left: Left border.
:param str intersect: Column separator.
:param str right: Right border.
:param title: Title in border with color codes.
:param str expected: Expected output.
"""
if left and right:
expected = left + expected + right
actual = build_border(outer_widths, "-", left, intersect, right, title=title)
assert "".join(actual) == expected
@pytest.mark.parametrize(
"outer_widths,title,expected",
[
([3, 3, 3], 123, "<123+---+--->"),
([3, 3, 3], 0.9, "<0.9+---+--->"),
([3, 3, 3], True, "<True---+--->"),
([3, 3, 3], False, "<False--+--->"),
],
)
def test_non_string(outer_widths, title, expected):
"""Test with non-string values.
:param iter outer_widths: List of integers representing column widths with padding.
:param title: Title in border.
:param str expected: Expected output.
"""
actual = build_border(outer_widths, "-", "<", "+", ">", title=title)
assert "".join(actual) == expected