From f898aa7bf1a9e455932ba870931c076e13c8ae28 Mon Sep 17 00:00:00 2001 From: Niru Maheswaranathan Date: Tue, 3 May 2016 17:35:15 -0700 Subject: [PATCH] Adds test suite for tableprint --- tests/test_functions.py | 26 ++++++++++++++++++++++++ tests/test_headers.py | 14 ------------- tests/test_io.py | 44 +++++++++++++++++++++++++++++++++++++++++ tests/test_utils.py | 15 +++++++++++++- 4 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 tests/test_functions.py delete mode 100644 tests/test_headers.py create mode 100644 tests/test_io.py diff --git a/tests/test_functions.py b/tests/test_functions.py new file mode 100644 index 0000000..f14755b --- /dev/null +++ b/tests/test_functions.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from tableprint import top, bottom, row +import pytest + + +def test_borders(): + + # top + assert top(5, width=2, style='round') == '╭──┬──┬──┬──┬──╮' + assert top(1, width=6, style='grid') == '+------+' + + # bottom + assert bottom(3, width=1, style='fancy_grid') == '╘═╧═╧═╛' + assert bottom(3, 4, style='clean') == ' ──── ──── ──── ' + + +def test_row(): + + # valid + assert row("abc", width=3, style='round') == '│ a│ b│ c│' + assert row([1, 2, 3], width=3, style='clean') == ' 1 2 3 ' + + # invalid + with pytest.raises(ValueError) as context: + row([{}]) diff --git a/tests/test_headers.py b/tests/test_headers.py deleted file mode 100644 index 6e76421..0000000 --- a/tests/test_headers.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals -from tableprint import humantime - -# def table(data, headers=None, format_spec=FMT, width=WIDTH, style=STYLE, out=sys.stdout): -# def header(headers, width=WIDTH, style=STYLE, add_hr=True): -# def row(values, width=WIDTH, format_spec=FMT, style=STYLE): -# def hr(n, width=WIDTH, linestyle=LineStyle('|', '-', '+', '|')): -# def top(n, width=WIDTH, style=STYLE): -# def bottom(n, width=WIDTH, style=STYLE): -# def banner(message, width=30, style='banner', out=sys.stdout): -# def dataframe(df, **kwargs): -# def humantime(t): -# def _format_line(data, linestyle): diff --git a/tests/test_io.py b/tests/test_io.py new file mode 100644 index 0000000..49a7229 --- /dev/null +++ b/tests/test_io.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from tableprint import table, banner, dataframe +from io import StringIO +import numpy as np + + +def test_table(): + + output = StringIO() + table([[1, 2, 3], [4, 5 ,6]], "ABC", style='round', width=5, out=output) + assert output.getvalue() == '╭─────┬─────┬─────╮\n│ A │ B │ C │\n├─────┼─────┼─────┤\n│ 1│ 2│ 3│\n│ 4│ 5│ 6│\n╰─────┴─────┴─────╯\n' + + output = StringIO() + table(["bar"], "foo", style='grid', width=3, out=output) + assert output.getvalue() == '+---+---+---+\n| f | o | o |\n+---+---+---+\n| b| a| r|\n+---+---+---+\n' + + +def test_frame(): + + # mock of a pandas DataFrame + class DataFrame: + def __init__(self, data, headers): + self.data = data + self.columns = headers + def __array__(self): + return self.data + + # build a mock DataFrame + df = DataFrame(np.array([[1, 2, 3]]), ['a', 'b', 'c']) + output = StringIO() + dataframe(df, width=4, style='fancy_grid', out=output) + assert output.getvalue() == '╒════╤════╤════╕\n│ a │ b │ c │\n╞════╪════╪════╡\n│ 1│ 2│ 3│\n╘════╧════╧════╛\n' + + +def test_banner(): + + output = StringIO() + banner('hello world', style='clean', width=11, out=output) + assert output.getvalue() == ' ─────────── \n hello world \n ─────────── \n' + + output = StringIO() + banner('!', style='banner', width=1, out=output) + assert output.getvalue() == '╒═╕\n│!│\n╘═╛\n' diff --git a/tests/test_utils.py b/tests/test_utils.py index f514c02..3a83ae2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,9 +1,22 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from tableprint import humantime +from tableprint import humantime, _format_line, LineStyle import pytest +def test_format_line(): + + # using ASCII + assert _format_line(['foo', 'bar'], LineStyle('(', '_', '+', ')')) == '(foo+bar)' + assert _format_line("abc", LineStyle('[', '*', '.', ']')) == '[a.b.c]' + assert _format_line(["_"], LineStyle('o', '', '!', 'o')) == 'o_o' + assert _format_line([], LineStyle(':', '', '', ')')) == ':)' + + # using unicode + assert _format_line(['.', '.', '.'], LineStyle('★', '_', '╳', '☆')) == '★.╳.╳.☆' + assert _format_line("☚☛", LineStyle('♪', '*', '♩', '♫')) == '♪☚♩☛♫' + + def test_humantime(): # test numeric input