""" 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()