73 lines
2.9 KiB
Python
73 lines
2.9 KiB
Python
|
|
"""
|
||
|
|
Tests for #632 — Scene description files have no placeholder lyrics or colors.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import json
|
||
|
|
import os
|
||
|
|
import unittest
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
REPO_ROOT = Path(__file__).parent.parent
|
||
|
|
|
||
|
|
SCENE_FILES = [
|
||
|
|
"training-data/scene-descriptions-rock.jsonl",
|
||
|
|
"training-data/scene-descriptions-hip-hop.jsonl",
|
||
|
|
"training-data/scene-descriptions-electronic.jsonl",
|
||
|
|
"training-data/scene-descriptions-rnb.jsonl",
|
||
|
|
"training-data/scene-descriptions-country.jsonl",
|
||
|
|
"training-data/scene-descriptions-jazz.jsonl",
|
||
|
|
"training-data/scene-descriptions-classical.jsonl",
|
||
|
|
"training-data/scene-descriptions-metal.jsonl",
|
||
|
|
"training-data/scene-descriptions-latin.jsonl",
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
class TestNoPlaceholders(unittest.TestCase):
|
||
|
|
def test_no_placeholder_lyrics(self):
|
||
|
|
"""No lyric_line contains [Beat N] or other placeholders."""
|
||
|
|
for relpath in SCENE_FILES:
|
||
|
|
filepath = REPO_ROOT / relpath
|
||
|
|
if not filepath.exists():
|
||
|
|
continue
|
||
|
|
with open(filepath) as f:
|
||
|
|
for i, line in enumerate(f, 1):
|
||
|
|
entry = json.loads(line)
|
||
|
|
lyric = entry.get("lyric_line", "")
|
||
|
|
with self.subTest(file=relpath, line=i):
|
||
|
|
self.assertNotIn("[Beat", lyric, f"Placeholder lyric at {relpath}:{i}")
|
||
|
|
self.assertNotIn("[beat", lyric.lower())
|
||
|
|
self.assertGreater(len(lyric), 3, f"Lyric too short at {relpath}:{i}")
|
||
|
|
|
||
|
|
def test_no_placeholder_colors(self):
|
||
|
|
"""No scene.colors contains 'placeholder'."""
|
||
|
|
for relpath in SCENE_FILES:
|
||
|
|
filepath = REPO_ROOT / relpath
|
||
|
|
if not filepath.exists():
|
||
|
|
continue
|
||
|
|
with open(filepath) as f:
|
||
|
|
for i, line in enumerate(f, 1):
|
||
|
|
entry = json.loads(line)
|
||
|
|
colors = entry.get("scene", {}).get("colors", [])
|
||
|
|
with self.subTest(file=relpath, line=i):
|
||
|
|
for color in colors:
|
||
|
|
self.assertNotIn("placeholder", color.lower(),
|
||
|
|
f"Placeholder color '{color}' at {relpath}:{i}")
|
||
|
|
|
||
|
|
def test_descriptions_are_specific(self):
|
||
|
|
"""Scene descriptions are not generic templates."""
|
||
|
|
for relpath in SCENE_FILES[:1]: # Just test rock
|
||
|
|
filepath = REPO_ROOT / relpath
|
||
|
|
if not filepath.exists():
|
||
|
|
continue
|
||
|
|
with open(filepath) as f:
|
||
|
|
for i, line in enumerate(f, 1):
|
||
|
|
entry = json.loads(line)
|
||
|
|
desc = entry.get("scene", {}).get("description", "")
|
||
|
|
with self.subTest(file=relpath, line=i):
|
||
|
|
self.assertGreater(len(desc), 20, f"Description too short at {relpath}:{i}")
|
||
|
|
self.assertNotIn("[placeholder", desc.lower())
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|