@@ -1,3 +1,4 @@
|
||||
import generator.validation
|
||||
import tests.production_fixtures
|
||||
import argparse
|
||||
import fractions
|
||||
@@ -73,16 +74,16 @@ class MusicModelTests(unittest.TestCase):
|
||||
document = tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
tests.test_musicxml.notes(document)[0]['pitches'][0]['tie_to'] = 'missing'
|
||||
with self.assertRaisesRegex(ValueError, 'dangling tie'):
|
||||
generator.model.validate_document(document)
|
||||
generator.validation.validate_document(document)
|
||||
document = tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
tests.test_musicxml.notes(document)[0]['duration'] = {'numerator': 8, 'denominator': 2}
|
||||
with self.assertRaisesRegex(ValueError, 'reduced'):
|
||||
generator.model.validate_document(document)
|
||||
generator.validation.validate_document(document)
|
||||
def test_optional_turnaround_and_form(self):
|
||||
source = generator.musicxml.load_musicxml(pathlib.Path('data/songs/all-of-me.xml'))
|
||||
for part in ('acoustic', 'electric', 'vocal'):
|
||||
result = generator.arrange.generate.arrange_document(source, part)
|
||||
generator.model.validate_document(result)
|
||||
generator.validation.validate_document(result)
|
||||
measures = result['staves'][0]['measures']
|
||||
self.assertEqual([m['section_label'] for m in measures if m.get('section_label')], ['Rhythm Lead-in', 'Vocal Melody', 'Guitar Melody', 'Acoustic Solo', 'Electric Solo', 'Vocal Melody', 'Ending'])
|
||||
self.assertFalse(measures[-1]['harmonies'])
|
||||
@@ -96,12 +97,12 @@ class MusicModelTests(unittest.TestCase):
|
||||
source = tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
source['staves'][0]['measures'][0][field] = {}
|
||||
with self.assertRaisesRegex(ValueError, 'repeat notation'):
|
||||
generator.model.validate_document(source)
|
||||
generator.validation.validate_document(source)
|
||||
for field in ('sound_ties', 'printed_ties'):
|
||||
source = tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
tests.test_musicxml.notes(source)[0]['pitches'][0][field] = []
|
||||
with self.assertRaisesRegex(ValueError, 'pass-specific tie'):
|
||||
generator.model.validate_document(source)
|
||||
generator.validation.validate_document(source)
|
||||
def test_failure_preserves_generated_assets(self):
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
root = pathlib.Path(temp)
|
||||
@@ -149,7 +150,7 @@ class MusicModelTests(unittest.TestCase):
|
||||
source = tests.test_musicxml.xml_score(tests.test_musicxml.xml_note(duration=1, kind='quarter', extra='<tie type="start"/>'), implicit=True)
|
||||
source = source.replace('</measure></part>', '</measure><measure number="2">' + tests.test_musicxml.xml_note(extra='<tie type="stop"/>') + '</measure></part>')
|
||||
result = generator.arrange.generate.arrange_document(tests.test_musicxml.parse(source), 'vocal')
|
||||
generator.model.validate_document(result)
|
||||
generator.validation.validate_document(result)
|
||||
measures = result['staves'][0]['measures']
|
||||
start = measures[0]['voices'][0]['notes'][-1]['pitches'][0]
|
||||
end = measures[1]['voices'][0]['notes'][0]['pitches'][0]
|
||||
|
||||
Reference in New Issue
Block a user