summaryrefslogtreecommitdiffstats
path: root/tests/test_example.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_example.py')
-rw-r--r--tests/test_example.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/tests/test_example.py b/tests/test_example.py
new file mode 100644
index 0000000..7ee8c05
--- /dev/null
+++ b/tests/test_example.py
@@ -0,0 +1,96 @@
+"""Test example script."""
+
+import subprocess
+import sys
+
+import pytest
+
+from colorclass.windows import IS_WINDOWS
+from tests.conftest import PROJECT_ROOT
+from tests.screenshot import RunNewConsole, screenshot_until_match
+
+
+@pytest.mark.parametrize('colors', [True, False, None])
+@pytest.mark.parametrize('light_bg', [True, False, None])
+def test_piped(colors, light_bg):
+ """Test script with output piped to non-tty (this pytest process).
+
+ :param bool colors: Enable, disable, or omit color arguments (default is no colors due to no tty).
+ :param bool light_bg: Enable light, dark, or omit light/dark arguments.
+ """
+ command = [sys.executable, str(PROJECT_ROOT.join('example.py')), 'print']
+
+ # Set options.
+ if colors is True:
+ command.append('--colors')
+ elif colors is False:
+ command.append('--no-colors')
+ if light_bg is True:
+ command.append('--light-bg')
+ elif light_bg is False:
+ command.append('--dark-bg')
+
+ # Run.
+ proc = subprocess.Popen(command, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
+ output = proc.communicate()[0].decode()
+ assert proc.poll() == 0
+ assert 'Autocolors for all backgrounds' in output
+ assert 'Red' in output
+
+ # Verify colors. Output is always stripped of all colors on Windows when piped to non-console (e.g. pytest).
+ if colors is False or IS_WINDOWS:
+ assert '\033[' not in output
+ assert 'Black Red Green Yellow Blue Magenta Cyan White' in output
+ return
+ assert '\033[' in output
+
+ # Verify light bg.
+ count_dark_fg = output.count('\033[31mRed')
+ count_light_fg = output.count('\033[91mRed')
+ if light_bg:
+ assert count_dark_fg == 2
+ assert count_light_fg == 1
+ else:
+ assert count_dark_fg == 1
+ assert count_light_fg == 2
+
+
+@pytest.mark.skipif(str(not IS_WINDOWS))
+@pytest.mark.parametrize('colors,light_bg', [
+ (True, False),
+ (True, True),
+ (False, False),
+ (None, False),
+])
+def test_windows_screenshot(colors, light_bg):
+ """Test script on Windows in a new console window. Take a screenshot to verify colors work.
+
+ :param bool colors: Enable, disable, or omit color arguments (default has colors).
+ :param bool light_bg: Create console with white background color.
+ """
+ screenshot = PROJECT_ROOT.join('test_example_test_windows_screenshot.png')
+ if screenshot.check():
+ screenshot.remove()
+ command = [sys.executable, str(PROJECT_ROOT.join('example.py')), 'print', '-w', str(screenshot)]
+
+ # Set options.
+ if colors is True:
+ command.append('--colors')
+ elif colors is False:
+ command.append('--no-colors')
+
+ # Setup expected.
+ if colors is False:
+ candidates = [str(p) for p in PROJECT_ROOT.join('tests').listdir('sub_red_sans_*.bmp')]
+ expected_count = 27
+ elif light_bg:
+ candidates = [str(p) for p in PROJECT_ROOT.join('tests').listdir('sub_red_dark_fg_*.bmp')]
+ expected_count = 2
+ else:
+ candidates = [str(p) for p in PROJECT_ROOT.join('tests').listdir('sub_red_light_fg_*.bmp')]
+ expected_count = 2
+ assert candidates
+
+ # Run.
+ with RunNewConsole(command, maximized=True, white_bg=light_bg) as gen:
+ screenshot_until_match(str(screenshot), 15, candidates, expected_count, gen)