"""Tests for context monitor."""
from pathfinder_mcp.context import ContextMonitor
class TestContextMonitor:
"""Tests for ContextMonitor class."""
def test_initial_state(self, context_monitor: ContextMonitor) -> None:
"""New monitor starts with zero tokens."""
assert context_monitor.current_tokens == 0
assert context_monitor.get_utilization() == 0.0
assert not context_monitor.should_compact()
assert not context_monitor.should_warn()
def test_count_tokens(self, context_monitor: ContextMonitor) -> None:
"""count_tokens returns positive count for text."""
count = context_monitor.count_tokens("Hello, world!")
assert count > 0
def test_add_message_tracks_tokens(self, context_monitor: ContextMonitor) -> None:
"""add_message increases token count."""
initial = context_monitor.current_tokens
context_monitor.add_message("Test message content")
assert context_monitor.current_tokens > initial
def test_get_utilization_percentage(self) -> None:
"""get_utilization returns correct percentage."""
monitor = ContextMonitor(max_tokens=100)
# Manually set tokens for testing
monitor._current_tokens = 50
assert monitor.get_utilization() == 50.0
def test_should_compact_at_60_percent(self) -> None:
"""should_compact returns True above 60%."""
monitor = ContextMonitor(max_tokens=100)
monitor._current_tokens = 59
assert not monitor.should_compact()
monitor._current_tokens = 61
assert monitor.should_compact()
def test_should_warn_at_70_percent(self) -> None:
"""should_warn returns True above 70%."""
monitor = ContextMonitor(max_tokens=100)
monitor._current_tokens = 69
assert not monitor.should_warn()
monitor._current_tokens = 71
assert monitor.should_warn()
def test_reset_clears_tokens(self, context_monitor: ContextMonitor) -> None:
"""reset clears token count."""
context_monitor.add_message("Some content to add tokens")
assert context_monitor.current_tokens > 0
context_monitor.reset()
assert context_monitor.current_tokens == 0
def test_reset_with_initial_value(self, context_monitor: ContextMonitor) -> None:
"""reset can set initial token count."""
context_monitor.reset(new_token_count=500)
assert context_monitor.current_tokens == 500
def test_remaining_tokens(self) -> None:
"""remaining_tokens calculates correctly."""
monitor = ContextMonitor(max_tokens=1000)
monitor._current_tokens = 300
assert monitor.remaining_tokens == 700
def test_get_status_returns_dict(self, context_monitor: ContextMonitor) -> None:
"""get_status returns complete status dict."""
status = context_monitor.get_status()
assert "current_tokens" in status
assert "max_tokens" in status
assert "utilization_percent" in status
assert "should_compact" in status
assert "should_warn" in status