Engine for LaTeX songbooks http://www.patacrep.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

55 lines
1.8 KiB

"""Tests for the chordpro parser."""
# pylint: disable=too-few-public-methods
import glob
import os
import unittest
from patacrep.build import DEFAULT_CONFIG
from patacrep.songs.chordpro import ChordproSong
from .. import disable_logging
LANGUAGES = {
'tex': 'latex',
'sgc': 'chordpro',
}
class TestParsingRendering(unittest.TestCase):
"""Test parsing and rendering"""
maxDiff = None
def test_all(self):
"""Test of chorpro parser, and several renderers.
For any given `foo.source`, it is parsed as a chordpro file, and
should be rendered as `foo.sgc` with the chordpro renderer, and
`foo.tex` with the latex renderer.
"""
config = DEFAULT_CONFIG.copy()
config.update({
'encoding': 'utf8',
})
for source in sorted(glob.glob(os.path.join(
os.path.dirname(__file__),
'*.source',
))):
base = source[:-len(".source")]
for dest in LANGUAGES:
destname = "{}.{}".format(base, dest)
if not os.path.exists(destname):
continue
with open(destname, 'r', encoding='utf8') as expectfile:
chordproname = "{}.source".format(base)
config['filename'] = chordproname
with disable_logging():
with self.subTest(base=os.path.basename(base), format=dest):
self.assertMultiLineEqual(
ChordproSong(None, chordproname, config).render(
output=chordproname,
output_format=LANGUAGES[dest],
).strip(),
expectfile.read().strip(),
)