From 896739353a613f23c007d9acaa2809010a522a37 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 16 Sep 2022 11:10:14 +0200 Subject: Adding upstream version 2.2.0. Signed-off-by: Daniel Baumann --- tests/test_example.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 tests/test_example.py (limited to 'tests/test_example.py') 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) -- cgit v1.2.3