Private
Public Access
0
0
Files
manual_slop/tests/test_theme_models.py
T

49 lines
1.7 KiB
Python

from pathlib import Path
import pytest
from src.theme_models import ThemeFile, ThemePalette, load_theme_file
FIXTURES = Path(__file__).parent / "fixtures" / "themes"
def test_load_minimal_theme_file():
p = FIXTURES / "minimal.toml"
theme = load_theme_file(p, scope="project")
assert theme.syntax_palette == "dark"
assert theme.palette.window_bg == (10, 20, 30)
assert theme.palette.text == (200, 200, 200)
assert theme.palette.button_hovered == (255, 100, 50)
assert theme.source_path == p
assert theme.scope == "project"
def test_missing_required_keys_raises():
p = FIXTURES / "missing_required.toml"
with pytest.raises(ValueError, match=r"missing required \[colors\]"):
load_theme_file(p, scope="project")
def test_invalid_syntax_palette_raises():
p = FIXTURES / "minimal.toml"
with pytest.raises(ValueError, match=r"invalid syntax_palette"):
ThemeFile(name="x", palette=ThemePalette(), syntax_palette="not_a_real_palette", source_path=p, scope="project")
def test_round_trip_to_from_dict():
p = FIXTURES / "minimal.toml"
loaded = load_theme_file(p, scope="project")
dumped = loaded.to_dict()
reloaded = ThemeFile.from_dict(loaded.name, dumped, source_path=p, scope="project")
assert reloaded.syntax_palette == loaded.syntax_palette
assert reloaded.palette.window_bg == loaded.palette.window_bg
assert reloaded.palette.text == loaded.palette.text
def test_scope_setter():
p = FIXTURES / "minimal.toml"
theme = load_theme_file(p, scope="global")
assert theme.scope == "global"
themed_as_project = theme.with_scope("project")
assert themed_as_project.scope == "project"
assert themed_as_project.name == theme.name