"""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])