"""Unit tests for map/generator.py and map/format_panel.py.""" import sys sys.path.insert(0, ".") from map.format_panel import format_panel_entitas from map.generator import generate_dream_map from map.themes import PALET_MOOD, gelapkan, get_palette, terangkan ENTITAS_LENGKAP = { "title": "The White Deer Forest", "mood": "mysterious", "characters": [ {"name": "Dreamer", "role": "self", "emotion": "afraid"}, {"name": "White Deer", "role": "creature", "emotion": "elusive"}, {"name": "Childhood Friend", "role": "known", "emotion": "shifting"}, ], "places": [ {"name": "Night Forest", "type": "fantastical", "feeling": "chasing"}, ], "symbols": [ {"name": "Changing Face", "appearance": "friend face shifts", "significance": "identity"}, ], "connections": [ {"from": "Dreamer", "to": "White Deer", "type": "pursuit"}, {"from": "Dreamer", "to": "Night Forest", "type": "tension"}, {"from": "Dreamer", "to": "Changing Face", "type": "tension"}, ], "core_theme": "Chasing something familiar that stays out of reach", } ENTITAS_MINIMAL = { "title": "Gray Room", "mood": "anxious", "characters": [{"name": "Dreamer", "role": "self", "emotion": "weightless"}], "places": [], "symbols": [], "connections": [], "core_theme": "Solitude without exit", } ENTITAS_KOSONG = { "title": "Parse Failed", "mood": "mysterious", "characters": [], "places": [], "symbols": [], "connections": [], "core_theme": "", } # ── themes ────────────────────────────────────────────────────────────────── def test_semua_mood_ada(): for mood in ("mysterious", "joyful", "anxious", "surreal", "peaceful"): assert mood in PALET_MOOD, f"mood '{mood}' tidak ada di PALET_MOOD" def test_palette_fallback_mood_invalid(): p = get_palette("nonexistent") assert p["bg"] == PALET_MOOD["mysterious"]["bg"] def test_terangkan_menghasilkan_hex_valid(): result = terangkan("#9774ff", 0.15) assert result.startswith("#") and len(result) == 7 def test_gelapkan_menghasilkan_hex_valid(): result = gelapkan("#9774ff", 0.15) assert result.startswith("#") and len(result) == 7 # ── generator ─────────────────────────────────────────────────────────────── def test_generate_menghasilkan_svg(): svg = generate_dream_map(ENTITAS_LENGKAP) assert svg.strip().startswith("" in svg def test_generate_nama_entitas_ada_di_svg(): svg = generate_dream_map(ENTITAS_LENGKAP) assert "Dreamer" in svg assert "White Deer" in svg assert "Night Forest" in svg assert "Changing Face" in svg def test_generate_edge_pursuit_dashed(): svg = generate_dream_map(ENTITAS_LENGKAP) # pursuit → dashed edge assert "stroke-dasharray" in svg def test_generate_minimal_tidak_crash(): svg = generate_dream_map(ENTITAS_MINIMAL) assert "alert(1)"} svg = generate_dream_map(ent) assert "