def tableify(result, max_width): renderer = CellRenderer() columns = zip(result.keys(), [renderer] * len(result.keys())) table = Table(columns, max_width=max_width) for row in islice(result, 10): table.add_row(row) return u("\n").join(table.render())
def test_left_justify_multiple_columns(self): expected = "| spam + eggs |" table = Table([("fooobar", None), ("raboof", None)]) renderer = DefaultCellRenderer("left") lines = table.render_row( [("spam", renderer), ("eggs", renderer)], "|", "|", "+") self.assertEqual(next(lines), expected)
def test_only_header_with_columns(self): expected = textwrap.dedent("""\ ╒══════╤══════╕ │ spam │ eggs │ ╞══════╪══════╡ └──────┴──────┘""") renderer = DefaultCellRenderer("left") table = Table([("spam", renderer), ("eggs", renderer)], 15) lines = list(table.render()) for line in lines: self.assertEqual(len(line), 15) self.assertEqual("\n".join(lines), expected)
def test_only_header_with_columns(self): expected = textwrap.dedent(u("""\ \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2555 \u2502 spam \u2502 eggs \u2502 \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2561 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518""")) renderer = DefaultCellRenderer("left") table = Table([("spam", renderer), ("eggs", renderer)], 15) lines = list(table.render()) for line in lines: self.assertEqual(len(line), 15) self.assertEqual(u("\n").join(lines), expected)
def test_full_table(self): expected = textwrap.dedent("""\ ╒══════════════════╤═══════════╕ │ Column A │ Column B │ ╞══════════════════╪═══════════╡ │ Value 1 A │ Value 1 B │ ├──────────────────┼───────────┤ │ Value 2 A longer │ 2 B │ └──────────────────┴───────────┘""") left_renderer = DefaultCellRenderer("left") right_renderer = DefaultCellRenderer("right") table = Table([ ("Column A", left_renderer), ("Column B", right_renderer) ]) table.add_row(["Value 1 A", "Value 1 B"]) table.add_row(["Value 2 A longer", "2 B"]) rendered_table = "\n".join(table.render()) self.assertEqual(rendered_table, expected)
def test_full_table(self): expected = textwrap.dedent(u("""\ \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555 \u2502 Column A \u2502 Column B \u2502 \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561 \u2502 Value 1 A \u2502 Value 1 B \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 Value 2 A longer \u2502 2 B \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518""")) left_renderer = DefaultCellRenderer("left") right_renderer = DefaultCellRenderer("right") table = Table([ ("Column A", left_renderer), ("Column B", right_renderer) ]) table.add_row(["Value 1 A", "Value 1 B"]) table.add_row(["Value 2 A longer", "2 B"]) rendered_table = u("\n").join(table.render()) self.assertEqual(rendered_table, expected)
def test_wrapping(self): renderer = DefaultCellRenderer("left") table = Table([("spam", renderer), ("eggs", renderer)], 25) table.add_row(["spam " * 10, "eggs " * 5]) for line in table.render(): self.assertEqual(len(line), 25)
def test_multiple(self): expected = "|---+---|" table = Table([("a", None), ("b", None)]) line = table._render_sep_line("|", "|", "-", "+") self.assertEqual(line, expected)
def test_empty(self): expected = "||" table = Table([]) line = table._render_sep_line("|", "|", "-", "+") self.assertEqual(line, expected)
def test_left_justify(self): expected = "| spam |" table = Table([("fooobar", None)]) renderer = DefaultCellRenderer("left") lines = table.render_row([("spam", renderer)], "|", "|", "+") self.assertEqual(next(lines), expected)