summaryrefslogtreecommitdiffstats
path: root/tests/test_all_tables_e2e
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_all_tables_e2e')
-rw-r--r--tests/test_all_tables_e2e/__init__.py1
-rw-r--r--tests/test_all_tables_e2e/sub_ascii_win10.bmpbin0 -> 36870 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_ascii_winxp.bmpbin0 -> 49350 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_double_win10.bmpbin0 -> 36090 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_double_win10b.bmpbin0 -> 36090 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_double_winxp.bmpbin0 -> 48726 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_single_win10.bmpbin0 -> 34854 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_single_win10b.bmpbin0 -> 34854 bytes
-rw-r--r--tests/test_all_tables_e2e/sub_single_winxp.bmpbin0 -> 45954 bytes
-rw-r--r--tests/test_all_tables_e2e/test_ascii_table.py145
-rw-r--r--tests/test_all_tables_e2e/test_double_table.py245
-rw-r--r--tests/test_all_tables_e2e/test_github_table.py77
-rw-r--r--tests/test_all_tables_e2e/test_porcelain_table.py59
-rw-r--r--tests/test_all_tables_e2e/test_single_table.py171
-rw-r--r--tests/test_all_tables_e2e/test_single_table_windows.py246
15 files changed, 944 insertions, 0 deletions
diff --git a/tests/test_all_tables_e2e/__init__.py b/tests/test_all_tables_e2e/__init__.py
new file mode 100644
index 0000000..785cc5a
--- /dev/null
+++ b/tests/test_all_tables_e2e/__init__.py
@@ -0,0 +1 @@
+"""Allows importing from screenshot."""
diff --git a/tests/test_all_tables_e2e/sub_ascii_win10.bmp b/tests/test_all_tables_e2e/sub_ascii_win10.bmp
new file mode 100644
index 0000000..fe21fa7
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_ascii_win10.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_ascii_winxp.bmp b/tests/test_all_tables_e2e/sub_ascii_winxp.bmp
new file mode 100644
index 0000000..4105d11
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_ascii_winxp.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_double_win10.bmp b/tests/test_all_tables_e2e/sub_double_win10.bmp
new file mode 100644
index 0000000..e6b00ae
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_double_win10.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_double_win10b.bmp b/tests/test_all_tables_e2e/sub_double_win10b.bmp
new file mode 100644
index 0000000..a527959
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_double_win10b.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_double_winxp.bmp b/tests/test_all_tables_e2e/sub_double_winxp.bmp
new file mode 100644
index 0000000..aae7b24
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_double_winxp.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_single_win10.bmp b/tests/test_all_tables_e2e/sub_single_win10.bmp
new file mode 100644
index 0000000..ff6f272
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_single_win10.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_single_win10b.bmp b/tests/test_all_tables_e2e/sub_single_win10b.bmp
new file mode 100644
index 0000000..c8d1e36
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_single_win10b.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/sub_single_winxp.bmp b/tests/test_all_tables_e2e/sub_single_winxp.bmp
new file mode 100644
index 0000000..c4f5873
--- /dev/null
+++ b/tests/test_all_tables_e2e/sub_single_winxp.bmp
Binary files differ
diff --git a/tests/test_all_tables_e2e/test_ascii_table.py b/tests/test_all_tables_e2e/test_ascii_table.py
new file mode 100644
index 0000000..51ebc2a
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_ascii_table.py
@@ -0,0 +1,145 @@
+"""AsciiTable end to end testing."""
+
+import sys
+from textwrap import dedent
+
+import py
+import pytest
+
+from terminaltables import AsciiTable
+from terminaltables.terminal_io import IS_WINDOWS
+from tests import PROJECT_ROOT
+from tests.screenshot import RunNewConsole, screenshot_until_match
+
+HERE = py.path.local(__file__).dirpath()
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green'],
+ [],
+ ]
+ table = AsciiTable(table_data, 'Example')
+ table.inner_footing_row_border = True
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ '+Example-----+-------+-----------+\n'
+ '| Name | Color | Type |\n'
+ '+------------+-------+-----------+\n'
+ '| Avocado | green | nut |\n'
+ '| Tomato | red | fruit |\n'
+ '| Lettuce | green | vegetable |\n'
+ '| Watermelon | green | |\n'
+ '+------------+-------+-----------+\n'
+ '| | | |\n'
+ '+------------+-------+-----------+'
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = AsciiTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Show | Characters |\n'
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |\n'
+ '+------------+-------------------------------------------------------------------------------------+'
+ )
+ assert actual == expected
+
+ # Test inner row border.
+ table.inner_row_border = True
+ actual = table.table
+ expected = (
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Show | Characters |\n'
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |\n'
+ '+------------+-------------------------------------------------------------------------------------+'
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Show | Characters |\n'
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '+------------+-------------------------------------------------------------------------------------+\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |\n'
+ '+------------+-------------------------------------------------------------------------------------+'
+ )
+ assert actual == expected
+
+
+@pytest.mark.skipif(str(not IS_WINDOWS))
+@pytest.mark.skipif('True') # https://github.com/Robpol86/terminaltables/issues/30
+def test_windows_screenshot(tmpdir):
+ """Test on Windows in a new console window. Take a screenshot to verify it works.
+
+ :param tmpdir: pytest fixture.
+ """
+ script = tmpdir.join('script.py')
+ command = [sys.executable, str(script)]
+ screenshot = PROJECT_ROOT.join('test_ascii_table.png')
+ if screenshot.check():
+ screenshot.remove()
+
+ # Generate script.
+ script_template = dedent(u"""\
+ from __future__ import print_function
+ import os, time
+ from colorclass import Color, Windows
+ from terminaltables import AsciiTable
+ Windows.enable(auto_colors=True)
+ stop_after = time.time() + 20
+
+ table_data = [
+ [Color('{b}Name{/b}'), Color('{b}Color{/b}'), Color('{b}Misc{/b}')],
+ ['Avocado', Color('{autogreen}green{/fg}'), 100],
+ ['Tomato', Color('{autored}red{/fg}'), 0.5],
+ ['Lettuce', Color('{autogreen}green{/fg}'), None],
+ ]
+ print(AsciiTable(table_data).table)
+
+ print('Waiting for screenshot_until_match()...')
+ while not os.path.exists(r'%s') and time.time() < stop_after:
+ time.sleep(0.5)
+ """)
+ script_contents = script_template % str(screenshot)
+ script.write(script_contents.encode('utf-8'), mode='wb')
+
+ # Setup expected.
+ sub_images = [str(p) for p in HERE.listdir('sub_ascii_*.bmp')]
+ assert sub_images
+
+ # Run.
+ with RunNewConsole(command) as gen:
+ screenshot_until_match(str(screenshot), 15, sub_images, 1, gen)
diff --git a/tests/test_all_tables_e2e/test_double_table.py b/tests/test_all_tables_e2e/test_double_table.py
new file mode 100644
index 0000000..892357a
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_double_table.py
@@ -0,0 +1,245 @@
+"""DoubleTable end to end testing."""
+
+import sys
+from textwrap import dedent
+
+import py
+import pytest
+
+from terminaltables import DoubleTable
+from terminaltables.terminal_io import IS_WINDOWS
+from tests import PROJECT_ROOT
+from tests.screenshot import RunNewConsole, screenshot_until_match
+
+HERE = py.path.local(__file__).dirpath()
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green'],
+ [],
+ ]
+ table = DoubleTable(table_data, 'Example')
+ table.inner_footing_row_border = True
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ u'\u2554Example\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n'
+
+ u'\u2551 Name \u2551 Color \u2551 Type \u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 Avocado \u2551 green \u2551 nut \u2551\n'
+
+ u'\u2551 Tomato \u2551 red \u2551 fruit \u2551\n'
+
+ u'\u2551 Lettuce \u2551 green \u2551 vegetable \u2551\n'
+
+ u'\u2551 Watermelon \u2551 green \u2551 \u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 \u2551 \u2551 \u2551\n'
+
+ u'\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d'
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = DoubleTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ u'\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n'
+
+ u'\u2551 Show \u2551 Characters '
+ u'\u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 Rugrats \u2551 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2551\n'
+
+ u'\u2551 \u2551 Dil Pickles '
+ u'\u2551\n'
+
+ u'\u2551 South Park \u2551 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2551\n'
+
+ u'\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d'
+ )
+ assert actual == expected
+
+ # Test inner row border.
+ table.inner_row_border = True
+ actual = table.table
+ expected = (
+ u'\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n'
+
+ u'\u2551 Show \u2551 Characters '
+ u'\u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 Rugrats \u2551 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2551\n'
+
+ u'\u2551 \u2551 Dil Pickles '
+ u'\u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 South Park \u2551 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2551\n'
+
+ u'\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d'
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ u'\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n'
+
+ u'\u2551 Show \u2551 Characters '
+ u'\u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 Rugrats \u2551 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2551\n'
+
+ u'\u2551 \u2551 Dil Pickles '
+ u'\u2551\n'
+
+ u'\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n'
+
+ u'\u2551 South Park \u2551 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2551\n'
+
+ u'\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550'
+ u'\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d'
+ )
+ assert actual == expected
+
+
+@pytest.mark.skipif(str(not IS_WINDOWS))
+@pytest.mark.skipif('True') # https://github.com/Robpol86/terminaltables/issues/30
+def test_windows_screenshot(tmpdir):
+ """Test on Windows in a new console window. Take a screenshot to verify it works.
+
+ :param tmpdir: pytest fixture.
+ """
+ script = tmpdir.join('script.py')
+ command = [sys.executable, str(script)]
+ screenshot = PROJECT_ROOT.join('test_double_table.png')
+ if screenshot.check():
+ screenshot.remove()
+
+ # Generate script.
+ script_template = dedent(u"""\
+ from __future__ import print_function
+ import os, time
+ from colorclass import Color, Windows
+ from terminaltables import DoubleTable
+ Windows.enable(auto_colors=True)
+ stop_after = time.time() + 20
+
+ table_data = [
+ [Color('{b}Name{/b}'), Color('{b}Color{/b}'), Color('{b}Misc{/b}')],
+ ['Avocado', Color('{autogreen}green{/fg}'), 100],
+ ['Tomato', Color('{autored}red{/fg}'), 0.5],
+ ['Lettuce', Color('{autogreen}green{/fg}'), None],
+ ]
+ print(DoubleTable(table_data).table)
+
+ print('Waiting for screenshot_until_match()...')
+ while not os.path.exists(r'%s') and time.time() < stop_after:
+ time.sleep(0.5)
+ """)
+ script_contents = script_template % str(screenshot)
+ script.write(script_contents.encode('utf-8'), mode='wb')
+
+ # Setup expected.
+ sub_images = [str(p) for p in HERE.listdir('sub_double_*.bmp')]
+ assert sub_images
+
+ # Run.
+ with RunNewConsole(command) as gen:
+ screenshot_until_match(str(screenshot), 15, sub_images, 1, gen)
diff --git a/tests/test_all_tables_e2e/test_github_table.py b/tests/test_all_tables_e2e/test_github_table.py
new file mode 100644
index 0000000..6176215
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_github_table.py
@@ -0,0 +1,77 @@
+"""GithubFlavoredMarkdownTable end to end testing."""
+
+from terminaltables import GithubFlavoredMarkdownTable
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green'],
+ [],
+ ]
+ table = GithubFlavoredMarkdownTable(table_data)
+ table.inner_footing_row_border = True
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ '| Name | Color | Type |\n'
+ '|:-----------|:-----:|----------:|\n'
+ '| Avocado | green | nut |\n'
+ '| Tomato | red | fruit |\n'
+ '| Lettuce | green | vegetable |\n'
+ '| Watermelon | green | |\n'
+ '| | | |'
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = GithubFlavoredMarkdownTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ '| Show | Characters |\n'
+ '|------------|-------------------------------------------------------------------------------------|\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |'
+ )
+ assert actual == expected
+
+ # Test inner row border.
+ table.inner_row_border = True
+ actual = table.table
+ expected = (
+ '| Show | Characters |\n'
+ '|------------|-------------------------------------------------------------------------------------|\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |'
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ '| Show | Characters |\n'
+ '|------------|------------------------------------------------------------------------------------:|\n'
+ '| Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, |\n'
+ '| | Dil Pickles |\n'
+ '| South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick |'
+ )
+ assert actual == expected
diff --git a/tests/test_all_tables_e2e/test_porcelain_table.py b/tests/test_all_tables_e2e/test_porcelain_table.py
new file mode 100644
index 0000000..7677188
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_porcelain_table.py
@@ -0,0 +1,59 @@
+"""PorcelainTable end to end testing."""
+
+from terminaltables import PorcelainTable
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green']
+ ]
+ table = PorcelainTable(table_data)
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ ' Name | Color | Type \n'
+ ' Avocado | green | nut \n'
+ ' Tomato | red | fruit \n'
+ ' Lettuce | green | vegetable \n'
+ ' Watermelon | green | '
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = PorcelainTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ ' Show | Characters \n'
+ ' Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, \n'
+ ' | Dil Pickles \n'
+ ' South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ ' Show | Characters \n'
+ ' Rugrats | Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, \n'
+ ' | Dil Pickles \n'
+ ' South Park | Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ )
+ assert actual == expected
diff --git a/tests/test_all_tables_e2e/test_single_table.py b/tests/test_all_tables_e2e/test_single_table.py
new file mode 100644
index 0000000..f4fa6b9
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_single_table.py
@@ -0,0 +1,171 @@
+"""SingleTable end to end testing on Linux/OSX."""
+
+import pytest
+
+from terminaltables import SingleTable
+from terminaltables.terminal_io import IS_WINDOWS
+
+pytestmark = pytest.mark.skipif(str(IS_WINDOWS))
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green'],
+ [],
+ ]
+ table = SingleTable(table_data, 'Example')
+ table.inner_footing_row_border = True
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ '\033(0\x6c\033(BExample\033(0\x71\x71\x71\x71\x71\x77\x71\x71\x71\x71\x71\x71\x71\x77\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x6b\033(B\n'
+
+ '\033(0\x78\033(B Name \033(0\x78\033(B Color \033(0\x78\033(B Type \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B Avocado \033(0\x78\033(B green \033(0\x78\033(B nut \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B Tomato \033(0\x78\033(B red \033(0\x78\033(B fruit \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B Lettuce \033(0\x78\033(B green \033(0\x78\033(B vegetable \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B Watermelon \033(0\x78\033(B green \033(0\x78\033(B \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B \033(0\x78\033(B \033(0\x78\033(B \033(0\x78\033(B\n'
+
+ '\033(0\x6d\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x76\x71\x71\x71\x71\x71\x71\x71\x76\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x6a\033(B'
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = SingleTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ '\033(0\x6c\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x77\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6b\033(B\n'
+
+ '\033(0\x78\033(B Show \033(0\x78\033(B Characters '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B Rugrats \033(0\x78\033(B Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille,'
+ ' Angelica Pickles, \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B \033(0\x78\033(B Dil Pickles '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B South Park \033(0\x78\033(B Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x6d\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x76\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6a\033(B'
+ )
+ assert actual == expected
+
+ # Test inner row border.
+ table.inner_row_border = True
+ actual = table.table
+ expected = (
+ '\033(0\x6c\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x77\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6b\033(B\n'
+
+ '\033(0\x78\033(B Show \033(0\x78\033(B Characters '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B Rugrats \033(0\x78\033(B Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille,'
+ ' Angelica Pickles, \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B \033(0\x78\033(B Dil Pickles '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B South Park \033(0\x78\033(B Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ ' \033(0\x78\033(B\n'
+
+ '\033(0\x6d\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x76\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6a\033(B'
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ '\033(0\x6c\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x77\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6b\033(B\n'
+
+ '\033(0\x78\033(B Show \033(0\x78\033(B '
+ ' Characters \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B Rugrats \033(0\x78\033(B Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille,'
+ ' Angelica Pickles, \033(0\x78\033(B\n'
+
+ '\033(0\x78\033(B \033(0\x78\033(B '
+ ' Dil Pickles \033(0\x78\033(B\n'
+
+ '\033(0\x74\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6e\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x75\033(B\n'
+
+ '\033(0\x78\033(B South Park \033(0\x78\033(B Stan Marsh, Kyle Broflovski, '
+ 'Eric Cartman, Kenny McCormick \033(0\x78\033(B\n'
+
+ '\033(0\x6d\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x76\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71'
+ '\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x71\x6a\033(B'
+ )
+ assert actual == expected
diff --git a/tests/test_all_tables_e2e/test_single_table_windows.py b/tests/test_all_tables_e2e/test_single_table_windows.py
new file mode 100644
index 0000000..a15fa3a
--- /dev/null
+++ b/tests/test_all_tables_e2e/test_single_table_windows.py
@@ -0,0 +1,246 @@
+"""SingleTable end to end testing on Windows."""
+
+import sys
+from textwrap import dedent
+
+import py
+import pytest
+
+from terminaltables import SingleTable
+from terminaltables.terminal_io import IS_WINDOWS
+from tests import PROJECT_ROOT
+from tests.screenshot import RunNewConsole, screenshot_until_match
+
+HERE = py.path.local(__file__).dirpath()
+pytestmark = pytest.mark.skipif(str(not IS_WINDOWS))
+
+
+def test_single_line():
+ """Test single-lined cells."""
+ table_data = [
+ ['Name', 'Color', 'Type'],
+ ['Avocado', 'green', 'nut'],
+ ['Tomato', 'red', 'fruit'],
+ ['Lettuce', 'green', 'vegetable'],
+ ['Watermelon', 'green'],
+ [],
+ ]
+ table = SingleTable(table_data, 'Example')
+ table.inner_footing_row_border = True
+ table.justify_columns[0] = 'left'
+ table.justify_columns[1] = 'center'
+ table.justify_columns[2] = 'right'
+ actual = table.table
+
+ expected = (
+ u'\u250cExample\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n'
+
+ u'\u2502 Name \u2502 Color \u2502 Type \u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 Avocado \u2502 green \u2502 nut \u2502\n'
+
+ u'\u2502 Tomato \u2502 red \u2502 fruit \u2502\n'
+
+ u'\u2502 Lettuce \u2502 green \u2502 vegetable \u2502\n'
+
+ u'\u2502 Watermelon \u2502 green \u2502 \u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 \u2502 \u2502 \u2502\n'
+
+ u'\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518'
+ )
+ assert actual == expected
+
+
+def test_multi_line():
+ """Test multi-lined cells."""
+ table_data = [
+ ['Show', 'Characters'],
+ ['Rugrats', 'Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles,\nDil Pickles'],
+ ['South Park', 'Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick']
+ ]
+ table = SingleTable(table_data)
+
+ # Test defaults.
+ actual = table.table
+ expected = (
+ u'\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n'
+
+ u'\u2502 Show \u2502 Characters '
+ u'\u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 Rugrats \u2502 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2502\n'
+
+ u'\u2502 \u2502 Dil Pickles '
+ u'\u2502\n'
+
+ u'\u2502 South Park \u2502 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2502\n'
+
+ u'\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518'
+ )
+ assert actual == expected
+
+ # Test inner row border.
+ table.inner_row_border = True
+ actual = table.table
+ expected = (
+ u'\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n'
+
+ u'\u2502 Show \u2502 Characters '
+ u'\u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 Rugrats \u2502 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2502\n'
+
+ u'\u2502 \u2502 Dil Pickles '
+ u'\u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 South Park \u2502 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2502\n'
+
+ u'\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518'
+ )
+ assert actual == expected
+
+ # Justify right.
+ table.justify_columns = {1: 'right'}
+ actual = table.table
+ expected = (
+ u'\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n'
+
+ u'\u2502 Show \u2502 Characters '
+ u'\u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 Rugrats \u2502 Tommy Pickles, Chuckie Finster, Phillip DeVille, Lillian DeVille, Angelica Pickles, '
+ u'\u2502\n'
+
+ u'\u2502 \u2502 Dil Pickles '
+ u'\u2502\n'
+
+ u'\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n'
+
+ u'\u2502 South Park \u2502 Stan Marsh, Kyle Broflovski, Eric Cartman, Kenny McCormick '
+ u'\u2502\n'
+
+ u'\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'
+ u'\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518'
+ )
+ assert actual == expected
+
+
+@pytest.mark.skipif(str(not IS_WINDOWS))
+@pytest.mark.skipif('True') # https://github.com/Robpol86/terminaltables/issues/30
+def test_windows_screenshot(tmpdir):
+ """Test on Windows in a new console window. Take a screenshot to verify it works.
+
+ :param tmpdir: pytest fixture.
+ """
+ script = tmpdir.join('script.py')
+ command = [sys.executable, str(script)]
+ screenshot = PROJECT_ROOT.join('test_single_table.png')
+ if screenshot.check():
+ screenshot.remove()
+
+ # Generate script.
+ script_template = dedent(u"""\
+ from __future__ import print_function
+ import os, time
+ from colorclass import Color, Windows
+ from terminaltables import SingleTable
+ Windows.enable(auto_colors=True)
+ stop_after = time.time() + 20
+
+ table_data = [
+ [Color('{b}Name{/b}'), Color('{b}Color{/b}'), Color('{b}Misc{/b}')],
+ ['Avocado', Color('{autogreen}green{/fg}'), 100],
+ ['Tomato', Color('{autored}red{/fg}'), 0.5],
+ ['Lettuce', Color('{autogreen}green{/fg}'), None],
+ ]
+ print(SingleTable(table_data).table)
+
+ print('Waiting for screenshot_until_match()...')
+ while not os.path.exists(r'%s') and time.time() < stop_after:
+ time.sleep(0.5)
+ """)
+ script_contents = script_template % str(screenshot)
+ script.write(script_contents.encode('utf-8'), mode='wb')
+
+ # Setup expected.
+ sub_images = [str(p) for p in HERE.listdir('sub_single_*.bmp')]
+ assert sub_images
+
+ # Run.
+ with RunNewConsole(command) as gen:
+ screenshot_until_match(str(screenshot), 15, sub_images, 1, gen)