xfstestsdb/tests/test_colors.py
Anna Schumaker 6529eb61f8 xfstestsdb: Create a ColorScheme class
This will be used by tools to print out text with colored outut. I
provide 3 options:

  * A NoneScheme for printing text without any formatting
  * A DarkScheme with colors chosen for a dark terminal
  * A LightScheme with colors chosen for a light terminal

Users can set the XFSTESTSDB_COLORS environment variable to either
"none", "dark", or "light". If this environment variable isn't set, or
if it is set to an invalid value, then xfstestsdb will use dark mode by
default.

Signed-off-by: Anna Schumaker <anna@nowheycreamery.com>
2023-02-15 15:57:19 -05:00

106 lines
4.6 KiB
Python

# Copyright 2023 (c) Anna Schumaker.
"""Tests our color handling code."""
import os
import termcolor
import unittest
import unittest.mock
import xfstestsdb.colors
class TestColors(unittest.TestCase):
"""Test color handling code."""
def test_get_default_colors(self):
"""Test getting the default color scheme."""
os.unsetenv("XFSTESTSDB_COLORS")
self.assertEqual(xfstestsdb.colors.get_default_colors(), "dark")
os.environ["XFSTESTSDB_COLORS"] = "light"
self.assertEqual(xfstestsdb.colors.get_default_colors(), "light")
os.environ["XFSTESTSDB_COLORS"] = "none"
self.assertEqual(xfstestsdb.colors.get_default_colors(), "none")
os.environ["XFSTESTSDB_COLORS"] = "dark"
self.assertEqual(xfstestsdb.colors.get_default_colors(), "dark")
os.environ["XFSTESTSDB_COLORS"] = "invalid"
self.assertEqual(xfstestsdb.colors.get_default_colors(), "dark")
@unittest.mock.patch.dict("os.environ", {"FORCE_COLOR": "1"})
def test_dark_colors(self):
"""Test the dark color scheme."""
scheme = xfstestsdb.colors.get_colors("dark")
self.assertIsInstance(scheme, xfstestsdb.colors.ColorScheme)
self.assertIsInstance(scheme, xfstestsdb.colors.DarkScheme)
self.assertEqual(scheme.name, "dark")
self.assertEqual(scheme["diff-+"], "green")
self.assertEqual(scheme["diff--"], "red")
self.assertEqual(scheme["diff-@"], "magenta")
self.assertEqual(scheme["diff- "], "light_grey")
self.assertEqual(scheme["fg"], "light_grey")
self.assertEqual(scheme["fg-odd"], "light_grey")
self.assertEqual(scheme["fg-even"], "cyan")
self.assertEqual(scheme["fg-header"], "yellow")
self.assertEqual(scheme["fg-passed"], "green")
self.assertEqual(scheme["fg-failure"], "red")
self.assertEqual(scheme["fg-skipped"], "dark_grey")
self.assertEqual(scheme["fg-testcase"], "cyan")
self.assertFalse(scheme["fg-dark"])
self.assertEqual(scheme["table-bg"], "black")
self.assertEqual(scheme["table-border"], "dark_grey")
self.assertEqual(scheme["any-key"], None)
self.assertEqual(scheme.format("text", bgcolor="table-bg",
bold=True, dark="fg-dark"),
termcolor.colored("text", on_color="on_black",
attrs=["bold"]))
self.assertEqual(scheme.format("text", bgcolor="other", bold=False),
termcolor.colored("text", on_color=None))
@unittest.mock.patch.dict("os.environ", {"FORCE_COLOR": "1"})
def test_light_colors(self):
"""Test the light color scheme."""
scheme = xfstestsdb.colors.get_colors("light")
self.assertIsInstance(scheme, xfstestsdb.colors.ColorScheme)
self.assertIsInstance(scheme, xfstestsdb.colors.LightScheme)
self.assertEqual(scheme.name, "light")
self.assertEqual(scheme["diff-+"], "green")
self.assertEqual(scheme["diff--"], "red")
self.assertEqual(scheme["diff-@"], "magenta")
self.assertEqual(scheme["diff- "], "light_grey")
self.assertEqual(scheme["fg"], "dark_grey")
self.assertEqual(scheme["fg-odd"], "dark_grey")
self.assertEqual(scheme["fg-even"], "green")
self.assertEqual(scheme["fg-header"], "blue")
self.assertEqual(scheme["fg-passed"], "green")
self.assertEqual(scheme["fg-failure"], "red")
self.assertEqual(scheme["fg-skipped"], "light_grey")
self.assertEqual(scheme["fg-testcase"], "cyan")
self.assertTrue(scheme["fg-dark"])
self.assertEqual(scheme["table-bg"], "white")
self.assertEqual(scheme["table-border"], "light_grey")
self.assertEqual(scheme["any-key"], None)
self.assertEqual(scheme.format("text", dark="fg-dark"),
termcolor.colored("text", attrs=["dark"]))
self.assertEqual(scheme.format("text", dark=True),
termcolor.colored("text", attrs=["dark"]))
@unittest.mock.patch.dict("os.environ", {"FORCE_COLOR": "1"})
def test_none_colors(self):
"""Test the fallback color scheme."""
scheme = xfstestsdb.colors.get_colors("none")
self.assertIsInstance(scheme, xfstestsdb.colors.ColorScheme)
self.assertIsInstance(scheme, xfstestsdb.colors.NoneScheme)
self.assertEqual(scheme.name, "none")
self.assertFalse(scheme["fg-dark"])
self.assertEqual(scheme["any-key"], None)
self.assertEqual(scheme.format("text", bgcolor="table-bg", bold=True),
"text")