# -*- coding: utf-8 -*- """ Test suite for Tarot Fortune Mind & Teacher Grade Divination. Exercises the native assembly engine directly. """ from pathlib import Path import subprocess import re ROOT = Path(__file__).resolve().parents[2] def test_tarot_database(): data = (ROOT / "src_graphics/fortune_mind_data.inc").read_bytes().decode("cp1251") code = (ROOT / "src_graphics/fortune_mind.inc").read_bytes().decode("cp1251") dialog = (ROOT / "src_graphics/fortune_dialog.inc").read_bytes().decode("cp1251") # 1. Check all 22 Major Arcana exist in data cards = ["Шут", "Маг", "Верховная Жрица", "Императрица", "Император", "Иерофант", "Влюблённые", "Колесница", "Сила", "Отшельник", "Колесо Фортуны", "Справедливость", "Повешенный", "Смерть", "Умеренность", "Дьявол", "Башня", "Звезда", "Луна", "Солнце", "Суд", "Мир"] for c in cards: assert c in data, f"Card '{c}' missing from database" print(f"[OK] All 22 Major Arcana found in Tarot database.") # 2. Check 3-card spread positions: Ситуация, Препятствие, Исход assert "1. СИТУАЦИЯ" in data, "Position 1 (Ситуация) missing" assert "2. ПРЕПЯТСТВИЕ" in data, "Position 2 (Препятствие) missing" assert "3. ИСХОД" in data, "Position 3 (Исход) missing" print("[OK] Fixed 3-card spread positions verified (Ситуация, Препятствие, Исход).") # 3. Check student mode components assert "1. КАРМА УЧЕБЫ" in data, "Student Position 1 missing" assert "2. ТАЙНЫЙ ГРЕХ" in data, "Student Position 2 missing" assert "3. СУД ВСЕЛЕННОЙ" in data, "Student Position 3 missing" assert "КАБИНЕТ ПРЕПОДАВАТЕЛЯ: СУДЬБА СТУДЕНТА" in data, "Teacher mode title missing" assert "ВЕРДИКТ СУДЬБЫ: СТАВИТЬ" in data, "Verdict string missing" assert "9 или 10" in data, "Borderline 9-10 choice missing" assert "8 или 9" in data, "Borderline 8-9 choice missing" print("[OK] Teacher Grade Divination database & borderline choices verified.") # 4. Check procedure implementations procs = ["InitFortuneMindState3D", "DetectTopic3D", "SubStrI3D", "GenerateTarotReadingMind3D", "GenerateStudentGradeMind3D", "SubmitStudentGrade3D", "DrawFortuneCardBox3D", "RenderFortuneDialog3D"] for p in procs: assert p in code or p in dialog, f"Procedure '{p}' missing from engine implementation" print(f"[OK] All {len(procs)} required Fortune Mind procedures verified.") # 5. Check mode transitions assert "FORTUNE_SUBMODE_MENU" in data assert "FORTUNE_SUBMODE_TAROT" in data assert "FORTUNE_SUBMODE_STUDENT" in data print("[OK] Menu, Tarot, and Student submodes verified.") def test_hall_expansion_integration(): cmd = ["python", str(ROOT / "tools/tests/check_hall_expansion.py")] proc = subprocess.run(cmd, cwd=ROOT, capture_output=True, text=True) assert proc.returncode == 0, f"check_hall_expansion.py failed:\n{proc.stdout}\n{proc.stderr}" assert "PASS" in proc.stdout, proc.stdout print("[OK] check_hall_expansion native test suite passed with updated fortune dialogue.") if __name__ == '__main__': test_tarot_database() test_hall_expansion_integration() print("\nALL TAROT & TEACHER GRADE DIVINATION TESTS PASSED SUCCESSFULLY!")