- Core engine: simulator, game mechanics, triggers (138 tests) - Fog-of-war per-player state tracking - Meeting flow: interrupt, discussion, voting, consolidation - Prompt assembler with strategy injection tiers - LLM client with fallbacks for models without JSON/system support - Prompt templates: action, discussion, voting, reflection - Full integration in main.py orchestrator - Verified working with free OpenRouter models (Gemma)
106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
"""
|
|
Tests for the fog-of-war system.
|
|
"""
|
|
|
|
import unittest
|
|
import sys
|
|
import os
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from src.engine.fog_of_war import FogOfWarManager, PlayerKnowledge, PlayerSighting
|
|
|
|
|
|
class TestPlayerKnowledge(unittest.TestCase):
|
|
"""Tests for PlayerKnowledge."""
|
|
|
|
def setUp(self):
|
|
self.pk = PlayerKnowledge(player_id="red")
|
|
|
|
def test_see_player(self):
|
|
self.pk.see_player("blue", "Blue", "cafeteria", 10.0, "walking")
|
|
|
|
self.assertIn("blue", self.pk.last_seen)
|
|
self.assertEqual(self.pk.last_seen["blue"].room_id, "cafeteria")
|
|
|
|
def test_witness_event(self):
|
|
self.pk.witness_event("VENT_WITNESSED", 15.0, {"player": "green"})
|
|
|
|
self.assertEqual(len(self.pk.witnessed_events), 1)
|
|
self.assertEqual(self.pk.witnessed_events[0].event_type, "VENT_WITNESSED")
|
|
|
|
def test_learn_death(self):
|
|
self.pk.learn_death("blue", via="body")
|
|
|
|
self.assertIn("blue", self.pk.known_dead)
|
|
|
|
def test_find_body(self):
|
|
self.pk.find_body("body_blue", "Blue", "electrical", 20.0)
|
|
|
|
self.assertIn("body_blue", self.pk.bodies_found)
|
|
self.assertIn("blue", self.pk.known_dead)
|
|
|
|
def test_to_dict_and_from_dict(self):
|
|
self.pk.see_player("blue", "Blue", "cafeteria", 10.0)
|
|
self.pk.learn_death("green")
|
|
|
|
data = self.pk.to_dict()
|
|
restored = PlayerKnowledge.from_dict(data)
|
|
|
|
self.assertEqual(restored.player_id, "red")
|
|
self.assertIn("blue", restored.last_seen)
|
|
self.assertIn("green", restored.known_dead)
|
|
|
|
|
|
class TestFogOfWarManager(unittest.TestCase):
|
|
"""Tests for FogOfWarManager."""
|
|
|
|
def setUp(self):
|
|
self.fow = FogOfWarManager()
|
|
self.fow.register_player("red")
|
|
self.fow.register_player("blue")
|
|
|
|
def test_register_player(self):
|
|
self.assertIsNotNone(self.fow.get_knowledge("red"))
|
|
self.assertIsNotNone(self.fow.get_knowledge("blue"))
|
|
|
|
def test_update_vision(self):
|
|
visible = [{"id": "blue", "name": "Blue", "action": "standing"}]
|
|
self.fow.update_vision("red", visible, "cafeteria", 10.0)
|
|
|
|
pk = self.fow.get_knowledge("red")
|
|
self.assertIn("blue", pk.last_seen)
|
|
|
|
def test_witness_vent(self):
|
|
self.fow.witness_vent("red", "blue", "Blue", "electrical", "entered", 15.0)
|
|
|
|
pk = self.fow.get_knowledge("red")
|
|
self.assertEqual(len(pk.witnessed_events), 1)
|
|
self.assertEqual(pk.witnessed_events[0].event_type, "VENT_WITNESSED")
|
|
|
|
def test_witness_kill(self):
|
|
self.fow.witness_kill("red", "blue", "Blue", "green", "Green", "admin", 20.0)
|
|
|
|
pk = self.fow.get_knowledge("red")
|
|
self.assertIn("green", pk.known_dead)
|
|
|
|
def test_announce_death(self):
|
|
self.fow.announce_death("green", via="meeting")
|
|
|
|
pk_red = self.fow.get_knowledge("red")
|
|
pk_blue = self.fow.get_knowledge("blue")
|
|
|
|
self.assertIn("green", pk_red.known_dead)
|
|
self.assertIn("green", pk_blue.known_dead)
|
|
|
|
def test_reset_for_new_game(self):
|
|
self.fow.get_knowledge("red").learn_death("blue")
|
|
self.fow.reset_for_new_game()
|
|
|
|
pk = self.fow.get_knowledge("red")
|
|
self.assertEqual(len(pk.known_dead), 0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|