CI / test (push) Successful in 1m25s
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>
52 lines
2.5 KiB
Python
52 lines
2.5 KiB
Python
"""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")
|