97 lines
3.4 KiB
Python
97 lines
3.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
"""Test the tabulate output adapter."""
|
||
|
|
||
|
from __future__ import unicode_literals
|
||
|
from textwrap import dedent
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
from cli_helpers.compat import HAS_PYGMENTS
|
||
|
from cli_helpers.tabular_output import tabulate_adapter
|
||
|
|
||
|
if HAS_PYGMENTS:
|
||
|
from pygments.style import Style
|
||
|
from pygments.token import Token
|
||
|
|
||
|
|
||
|
def test_tabulate_wrapper():
|
||
|
"""Test the *output_formatter.tabulate_wrapper()* function."""
|
||
|
data = [['abc', 1], ['d', 456]]
|
||
|
headers = ['letters', 'number']
|
||
|
output = tabulate_adapter.adapter(iter(data), headers, table_format='psql')
|
||
|
assert "\n".join(output) == dedent('''\
|
||
|
+-----------+----------+
|
||
|
| letters | number |
|
||
|
|-----------+----------|
|
||
|
| abc | 1 |
|
||
|
| d | 456 |
|
||
|
+-----------+----------+''')
|
||
|
|
||
|
data = [['{1,2,3}', '{{1,2},{3,4}}', '{å,魚,текст}'], ['{}', '<null>', '{<null>}']]
|
||
|
headers = ['bigint_array', 'nested_numeric_array', '配列']
|
||
|
output = tabulate_adapter.adapter(iter(data), headers, table_format='psql')
|
||
|
assert "\n".join(output) == dedent('''\
|
||
|
+----------------+------------------------+--------------+
|
||
|
| bigint_array | nested_numeric_array | 配列 |
|
||
|
|----------------+------------------------+--------------|
|
||
|
| {1,2,3} | {{1,2},{3,4}} | {å,魚,текст} |
|
||
|
| {} | <null> | {<null>} |
|
||
|
+----------------+------------------------+--------------+''')
|
||
|
|
||
|
|
||
|
def test_markup_format():
|
||
|
"""Test that markup formats do not have number align or string align."""
|
||
|
data = [['abc', 1], ['d', 456]]
|
||
|
headers = ['letters', 'number']
|
||
|
output = tabulate_adapter.adapter(iter(data), headers, table_format='mediawiki')
|
||
|
assert "\n".join(output) == dedent('''\
|
||
|
{| class="wikitable" style="text-align: left;"
|
||
|
|+ <!-- caption -->
|
||
|
|-
|
||
|
! letters !! number
|
||
|
|-
|
||
|
| abc || 1
|
||
|
|-
|
||
|
| d || 456
|
||
|
|}''')
|
||
|
|
||
|
|
||
|
@pytest.mark.skipif(not HAS_PYGMENTS, reason='requires the Pygments library')
|
||
|
def test_style_output_table():
|
||
|
"""Test that *style_output_table()* styles the output table."""
|
||
|
|
||
|
class CliStyle(Style):
|
||
|
default_style = ""
|
||
|
styles = {
|
||
|
Token.Output.TableSeparator: 'ansibrightred',
|
||
|
}
|
||
|
headers = ['h1', 'h2']
|
||
|
data = [['观音', '2'], ['Ποσειδῶν', 'b']]
|
||
|
style_output_table = tabulate_adapter.style_output_table('psql')
|
||
|
|
||
|
style_output_table(data, headers, style=CliStyle)
|
||
|
output = tabulate_adapter.adapter(iter(data), headers, table_format='psql')
|
||
|
|
||
|
assert "\n".join(output) == dedent('''\
|
||
|
\x1b[91m+\x1b[39m''' + (
|
||
|
('\x1b[91m-\x1b[39m' * 10) +
|
||
|
'\x1b[91m+\x1b[39m' +
|
||
|
('\x1b[91m-\x1b[39m' * 6)) +
|
||
|
'''\x1b[91m+\x1b[39m
|
||
|
\x1b[91m|\x1b[39m h1 \x1b[91m|\x1b[39m''' +
|
||
|
''' h2 \x1b[91m|\x1b[39m
|
||
|
''' + '\x1b[91m|\x1b[39m' + (
|
||
|
('\x1b[91m-\x1b[39m' * 10) +
|
||
|
'\x1b[91m+\x1b[39m' +
|
||
|
('\x1b[91m-\x1b[39m' * 6)) +
|
||
|
'''\x1b[91m|\x1b[39m
|
||
|
\x1b[91m|\x1b[39m 观音 \x1b[91m|\x1b[39m''' +
|
||
|
''' 2 \x1b[91m|\x1b[39m
|
||
|
\x1b[91m|\x1b[39m Ποσειδῶν \x1b[91m|\x1b[39m''' +
|
||
|
''' b \x1b[91m|\x1b[39m
|
||
|
''' + '\x1b[91m+\x1b[39m' + (
|
||
|
('\x1b[91m-\x1b[39m' * 10) +
|
||
|
'\x1b[91m+\x1b[39m' +
|
||
|
('\x1b[91m-\x1b[39m' * 6)) +
|
||
|
'\x1b[91m+\x1b[39m')
|