Files
mjlab/tests/test_reward_bar_panel.py
T

35 lines
1.2 KiB
Python
Raw Normal View History

"""Tests for the Viser reward bar panel term cap."""
from unittest.mock import Mock
import pytest
from mjlab.viewer.viser.reward_bar_panel import RewardBarPanel
def _term_names(n: int) -> list[str]:
return [f"term_{i}" for i in range(n)]
def test_warns_and_truncates_over_cap():
"""More terms than the cap warns and keeps only the first ``max_terms``."""
server = Mock()
with pytest.warns(UserWarning, match="exceed max_terms"):
panel = RewardBarPanel(server, _term_names(21), update_dt=1 / 30, max_terms=20)
assert panel._term_names == _term_names(21)[:20]
def test_no_warning_at_or_below_cap(recwarn):
"""At or below the cap, all terms are kept and no truncation warning fires."""
server = Mock()
panel = RewardBarPanel(server, _term_names(20), update_dt=1 / 30, max_terms=20)
assert panel._term_names == _term_names(20)
assert not [w for w in recwarn if "exceed max_terms" in str(w.message)]
def test_raised_cap_shows_all_terms():
"""Raising ``max_terms`` (the fix for #1079) surfaces the overflow terms."""
server = Mock()
panel = RewardBarPanel(server, _term_names(24), update_dt=1 / 30, max_terms=32)
assert panel._term_names == _term_names(24)