test(theme): Add unit tests for NERV theme colors and geometry

This commit is contained in:
2026-03-09 00:47:55 -04:00
parent 4b78e77e2c
commit de0d9f339e

47
tests/test_theme_nerv.py Normal file
View File

@@ -0,0 +1,47 @@
import pytest
from unittest.mock import MagicMock
from imgui_bundle import imgui
from src import theme_nerv
def test_apply_nerv_sets_rounding_and_colors(monkeypatch):
# Mock imgui on the module level to intercept calls in apply_nerv
mock_style = MagicMock()
mock_imgui = MagicMock()
mock_imgui.get_style.return_value = mock_style
# Mock ImVec4 to return its arguments as a tuple to verify values
mock_imgui.ImVec4.side_effect = lambda r, g, b, a=1.0: (r, g, b, a)
monkeypatch.setattr(theme_nerv, "imgui", mock_imgui)
# Call apply_nerv
theme_nerv.apply_nerv()
# Verify rounding styles (must be 0.0 for NERV theme)
assert mock_style.window_rounding == 0.0
assert mock_style.child_rounding == 0.0
assert mock_style.frame_rounding == 0.0
assert mock_style.popup_rounding == 0.0
assert mock_style.scrollbar_rounding == 0.0
assert mock_style.grab_rounding == 0.0
assert mock_style.tab_rounding == 0.0
# Verify borders
assert mock_style.window_border_size == 1.0
assert mock_style.frame_border_size == 1.0
assert mock_style.popup_border_size == 1.0
assert mock_style.child_border_size == 1.0
assert mock_style.tab_border_size == 1.0
# Verify key colors
# window_bg should be BLACK (0, 0, 0, 1.0)
# text should be NERV_ORANGE (255/255.0, 152/255.0, 48/255.0, 1.0)
# Extract calls to set_color_
# Using real imgui.Col_ values for keys because they are bound in NERV_PALETTE at import time
color_calls = {call[0][0]: call[0][1] for call in mock_style.set_color_.call_args_list}
assert imgui.Col_.window_bg in color_calls
assert color_calls[imgui.Col_.window_bg] == (0.0, 0.0, 0.0, 1.0)
assert imgui.Col_.text in color_calls
assert color_calls[imgui.Col_.text] == (1.0, 152/255.0, 48/255.0, 1.0)