Files
agwandClaude Opus 5.5 d22f1d5e2e
CI / test (push) Successful in 1m25s
Tegn og Gæt: tegn dit eget ord på telefon, storskærm og speaker
Telefonen og storskærmen siger "Tegn dit eget ord" i trin 1 ved et
lige antal spillere, og speakeren har fem faste replikker til det
(forvarmes med de andre faste). dev.html?game=tegn har fasen draw-own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:59:59 +02:00

52 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Speakerens replikker til Tegn og Gæt (tegnoggaet/narrator/lines.json) følger samme regler som Fup og Fakta."""
import json
import re
from pathlib import Path
from django.test import SimpleTestCase
from party.narrator import AUDIO_TAGS as TAGS
LINES = Path(__file__).resolve().parents[1] / "narrator" / "lines.json"
# begivenhed -> tilladte pladsholdere
EVENTS = {
"lobby_welcome": set(), "lobby_join": {"navn"}, "lobby_waiting": {"vip"}, "game_start": {"antal_spillere"},
"theme_choose": {"vip"}, "theme_chosen": {"tema"}, "theme_timeout": {"tema"}, "word_start": {"tema"},
"draw_start": set(), "draw_own_start": set(), "guess_start": set(), "step_hurry": set(), "step_all_done": set(),
"reveal_intro": set(), "chain_intro": {"navn"}, "chain_survived": {"ord"}, "chain_changed": {"ord", "gaet"},
"award_best_drawing": {"navn"}, "award_best_guess": {"navn"}, "award_survived": {"navn"},
"award_transformed": {"navn"}, "winner": {"vinder", "point"}, "play_again": set(),
}
class TegnLinesTests(SimpleTestCase):
def setUp(self):
self.lines = json.loads(LINES.read_text(encoding="utf-8"))
def test_all_events_present_with_variants(self):
self.assertEqual(set(self.lines), set(EVENTS))
for event, variants in self.lines.items():
self.assertGreaterEqual(len(variants), 5, event)
self.assertEqual(len(variants), len(set(variants)), f"dubletter i {event}")
def test_placeholders_tags_and_style(self):
for event, variants in self.lines.items():
for line in variants:
with self.subTest(event=event, line=line):
self.assertLessEqual(set(re.findall(r"\{(\w+)\}", line)), EVENTS[event])
self.assertLessEqual(set(re.findall(r"\[([a-z ]+)\]", line)), TAGS)
spoken = re.sub(r"\[[a-z ]+\]", "", line)
self.assertLessEqual(len(spoken.split()), 20)
self.assertNotRegex(line, r"—|–| - ", "ingen tankestreger")
self.assertNotRegex(line, r"\d", "tal skrives med bogstaver")
# ord, gæt og tal indsættes med små bogstaver: de må ikke starte en sætning på skærmen
self.assertNotRegex(line, r"[.!?] (\[[a-z ]+\] )*\{(ord|gaet|point|antal_spillere)\}")
def test_rules_cards_follow_the_same_style(self):
from tegnoggaet.engine import RULES
for r in RULES:
for text in (r["title"], r["body"], r["say"]):
self.assertNotRegex(text, r"—|–| - |\d")