1
0
Fork 0
colorclass/tests/conftest.py

79 lines
2.4 KiB
Python
Raw Normal View History

"""Configure tests."""
import py
import pytest
from colorclass.codes import ANSICodeMapping
from colorclass.color import Color
from colorclass.core import ColorStr, PARENT_CLASS
PROJECT_ROOT = py.path.local(__file__).dirpath().join('..')
@pytest.fixture(autouse=True)
def set_defaults(monkeypatch):
"""Set ANSICodeMapping defaults before each test.
:param monkeypatch: pytest fixture.
"""
monkeypatch.setattr(ANSICodeMapping, 'DISABLE_COLORS', False)
monkeypatch.setattr(ANSICodeMapping, 'LIGHT_BACKGROUND', False)
def assert_both_values(actual, expected_plain, expected_color, kind=None):
"""Handle asserts for color and non-color strings in color and non-color tests.
:param ColorStr actual: Return value of ColorStr class method.
:param expected_plain: Expected non-color value.
:param expected_color: Expected color value.
:param str kind: Type of string to test.
"""
if kind.endswith('plain'):
assert actual.value_colors == expected_plain
assert actual.value_no_colors == expected_plain
assert actual.has_colors is False
elif kind.endswith('color'):
assert actual.value_colors == expected_color
assert actual.value_no_colors == expected_plain
if '\033' in actual.value_colors:
assert actual.has_colors is True
else:
assert actual.has_colors is False
else:
assert actual == expected_plain
if kind.startswith('ColorStr'):
assert actual.__class__ == ColorStr
elif kind.startswith('Color'):
assert actual.__class__ == Color
def get_instance(kind, sample=None, color='red'):
"""Get either a string, non-color ColorStr, or color ColorStr instance.
:param str kind: Type of string to test.
:param iter sample: Input test to derive instances from.
:param str color: Color tags to use. Default is red.
:return: Instance.
"""
# First determine which class/type to use.
if kind.startswith('ColorStr'):
cls = ColorStr
elif kind.startswith('Color'):
cls = Color
else:
cls = PARENT_CLASS
# Next handle NoneType samples.
if sample is None:
return cls()
# Finally handle non-None samples.
if kind.endswith('plain'):
return cls(sample)
elif kind.endswith('color'):
tags = '{%s}' % color, '{/%s}' % color
return cls(tags[0] + sample + tags[1])
return sample