96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
"""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)
|