21 lines
917 B
Python
21 lines
917 B
Python
"""Exact role scores protect musical choices, notation, IDs and tablature."""
|
|
import generator.composition_types
|
|
import generator.composition
|
|
import generator.source
|
|
import json
|
|
import pathlib
|
|
import unittest
|
|
|
|
import tests.solo_fixtures
|
|
|
|
class OutputContract(unittest.TestCase):
|
|
def test_complete_roles_including_learned_fallback_match_reviewed_output(self):
|
|
root = pathlib.Path(__file__).resolve().parents[1]
|
|
expected = json.loads((root / 'tests/fixtures/role_outputs.json').read_text())
|
|
source = generator.source.SourceAnalysis.read(tests.solo_fixtures.song(count=2, chords=('Dm7', 'G7')))
|
|
for role in generator.composition_types.ROLES:
|
|
with self.subTest(role=role):
|
|
settings = {'predict': True} if role.endswith('_solo') else {}
|
|
actual = generator.composition.generate_role(source, role, root / 'data', settings)['document']
|
|
self.assertEqual(actual, expected[role])
|