+11
-18
@@ -26,7 +26,7 @@ import generator.musicxml_writer
|
||||
import generator.pico_artwork
|
||||
import generator.pitch
|
||||
import generator.playback
|
||||
import generator.practice.generate
|
||||
import tests.arrangement_fixtures
|
||||
import generator.score
|
||||
import tests.musicxml_roundtrip
|
||||
import tests.rhythm_fixtures
|
||||
@@ -39,19 +39,12 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
root = pathlib.Path(temporary)
|
||||
data, output = root / 'data', root / 'output'
|
||||
(data / 'songs').mkdir(parents=True)
|
||||
(data / 'practice').mkdir()
|
||||
source = data / 'practice/0001.xml'
|
||||
source = data / 'songs/fixture.xml'
|
||||
source.write_text(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
args = argparse.Namespace(data_dir=data, output_dir=output, static_assets_dir=pathlib.Path('package/assets'), check=False)
|
||||
generator.__main__.generate_assets(args)
|
||||
original = {p.relative_to(output): p.read_bytes() for p in output.rglob('*') if p.is_file()}
|
||||
self.assertTrue(list(output.rglob('*.png')))
|
||||
legacy_source = source.with_name('001.xml')
|
||||
source.rename(legacy_source)
|
||||
with self.assertRaisesRegex(ValueError, 'four-digit'):
|
||||
generator.__main__.generate_assets(args)
|
||||
self.assertEqual(original, {p.relative_to(output): p.read_bytes() for p in output.rglob('*') if p.is_file()})
|
||||
legacy_source.rename(source)
|
||||
(data / 'rhythms' / 'drafts').mkdir(parents=True)
|
||||
for path in ('rhythms/0001.xml', 'rhythms/drafts/0002.xml'):
|
||||
(data / path).write_text('<unfinished')
|
||||
@@ -75,16 +68,16 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
generator.__main__.generate_assets(args)
|
||||
self.assertEqual(original, {p.relative_to(output): p.read_bytes() for p in output.rglob('*') if p.is_file()})
|
||||
source.write_text(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
renamed = data / 'practice/0127.xml'
|
||||
renamed = data / 'songs/renamed.xml'
|
||||
source.rename(renamed)
|
||||
source = renamed
|
||||
legacy_output = output / 'practice/001'
|
||||
legacy_output = output / 'obsolete'
|
||||
legacy_output.mkdir()
|
||||
(legacy_output / 'electric.json').write_text('{}')
|
||||
generator.__main__.generate_assets(args)
|
||||
self.assertFalse(legacy_output.exists())
|
||||
self.assertFalse((output / 'practice/0001').exists())
|
||||
self.assertEqual(len(list((output / 'practice/0127').glob('*.json'))), 3)
|
||||
self.assertFalse(list((output / 'songs').glob('fixture*')))
|
||||
self.assertEqual(len(list((output / 'songs').glob('renamed-*.json'))), 3)
|
||||
source.unlink()
|
||||
generator.__main__.generate_assets(args)
|
||||
self.assertFalse(list(output.rglob('*.png')))
|
||||
@@ -170,7 +163,7 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note(), attributes='<clef><sign>TAB</sign></clef>'))
|
||||
for part in ('vocal', 'acoustic', 'electric'):
|
||||
with self.assertRaisesRegex(ValueError, 'pitched'):
|
||||
generator.practice.generate.practice_document(source, part, rhythms=tests.rhythm_fixtures.library())
|
||||
tests.arrangement_fixtures.section_document(source, part, rhythms=tests.rhythm_fixtures.library())
|
||||
with self.assertRaisesRegex(ValueError, 'pitched'):
|
||||
generator.arrange.generate.arrange_document(source, part, rhythms=tests.rhythm_fixtures.library())
|
||||
def test_percussion_instrument_definitions_round_trip_and_are_audited(self):
|
||||
@@ -192,7 +185,7 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
with self.assertRaisesRegex(ValueError, 'unknown score instrument'):
|
||||
generator.model.validate_document(source)
|
||||
def test_catalog_roundtrip_preserves_written_pitch_and_rhythm(self):
|
||||
for path in sorted(path for category in ('practice', 'songs') for path in (pathlib.Path('data') / category).glob('*.xml')):
|
||||
for path in sorted(pathlib.Path('data/songs').glob('*.xml')):
|
||||
with self.subTest(path=path):
|
||||
source = generator.musicxml.load_musicxml(path)
|
||||
restored = self.round_trip(source)
|
||||
@@ -281,12 +274,12 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
root = pathlib.Path(temporary)
|
||||
document = tests.test_musicxml.parse(tests.test_musicxml.xml_score(tests.test_musicxml.xml_note()))
|
||||
for index in range(3):
|
||||
generator.score.write_json(root / 'practice' / f'{index}.json', document)
|
||||
generator.score.write_json(root / 'songs' / f'{index}.json', document)
|
||||
trusted = generator.engraving.pipeline.engrave_tree(root, pathlib.Path('package/assets/fonts/petaluma'))
|
||||
generator.pico_artwork.generate_titles(root, pathlib.Path('package/assets/fonts/petaluma'))
|
||||
with unittest.mock.patch('generator.engraving.validation.check_content', side_effect=AssertionError('already validated content')):
|
||||
generator.score.validate_generated_tree(root, trusted)
|
||||
page = root / 'practice/2.pages/0001.png'
|
||||
page = root / 'songs/2.pages/0001.png'
|
||||
original = page.read_bytes()
|
||||
page.write_bytes(original + b'changed')
|
||||
with self.assertRaisesRegex(ValueError, 'checksum'):
|
||||
@@ -296,7 +289,7 @@ class ScoreBundleTests(unittest.TestCase):
|
||||
generator.score.validate_generated_tree(root)
|
||||
decode.assert_called_once()
|
||||
PIL.Image.new('RGB', (976, 484), 'white').save(page)
|
||||
path = root / 'practice/2.json'
|
||||
path = root / 'songs/2.json'
|
||||
bundle = json.loads(path.read_text())
|
||||
bundle['presentation']['pages'][0]['sha256'] = hashlib.sha256(page.read_bytes()).hexdigest()
|
||||
path.write_text(json.dumps(bundle))
|
||||
|
||||
Reference in New Issue
Block a user