Files
khodowany 09656a9d60
ci / checks (push) Successful in 48m34s
Package
2026-09-30 19:46:37 -05:00

34 lines
1.6 KiB
Python

import pathlib
import tempfile
import unittest
import unittest.mock
import generator.theme
class ThemeTests(unittest.TestCase):
def test_foregrounds_remain_readable_on_dark_surfaces(self):
def luminance(color):
channels = [value / 255 for value in color]
linear = [value / 12.92 if value <= 0.04045 else ((value + 0.055) / 1.055) ** 2.4 for value in channels]
return sum(value * weight for value, weight in zip(linear, (0.2126, 0.7152, 0.0722)))
for surface in ('background', 'panel', 'selection'):
background = luminance(generator.theme.rgb(surface))
self.assertLess(background, 0.06)
for name in ('ink', 'muted', 'accent', 'connecting', 'retrying', 'connected', 'danger'):
contrast = (luminance(generator.theme.rgb(name)) + 0.05) / (background + 0.05)
self.assertGreaterEqual(contrast, 4.5, (name, surface))
def test_cpp_colors_match_the_renderer_palette_without_rewriting(self):
with tempfile.TemporaryDirectory() as temporary:
header = pathlib.Path(temporary) / 'palette.hpp'
generator.theme.generate_header(header)
stamp = header.stat().st_mtime_ns
for name in generator.theme.COLORS:
red, green, blue = generator.theme.rgb(name)
self.assertIn(f'{name} = vamp_style::color{{{red}, {green}, {blue}, 255}};', header.read_text())
generator.theme.generate_header(header)
self.assertEqual(stamp, header.stat().st_mtime_ns)
def test_invalid_colors_fail_before_writing(self):
with unittest.mock.patch.dict(generator.theme.COLORS, {'background': '#xyz'}):
with self.assertRaisesRegex(ValueError, 'background'):
generator.theme.rgb('background')