mirror of https://github.com/patacrep/patacrep.git
Louis
9 years ago
6 changed files with 210 additions and 5 deletions
@ -0,0 +1,85 @@ |
|||
"""Tests of the patatools-convert command.""" |
|||
|
|||
# pylint: disable=too-few-public-methods |
|||
|
|||
from pkg_resources import resource_filename |
|||
import contextlib |
|||
import glob |
|||
import os |
|||
import shutil |
|||
import unittest |
|||
|
|||
from patacrep import files |
|||
from patacrep.tools.__main__ import main as tools_main |
|||
from patacrep.encoding import open_read |
|||
from patacrep.tools.convert.__main__ import main as convert_main |
|||
from patacrep.songbook.__main__ import main as songbook_main |
|||
|
|||
from .. import dynamic |
|||
from .. import logging_reduced |
|||
|
|||
class TestConvert(unittest.TestCase, metaclass=dynamic.DynamicTest): |
|||
"""Test of the "patatools convert" subcommand""" |
|||
|
|||
def _system(self, main, args): |
|||
try: |
|||
main(args) |
|||
except SystemExit as systemexit: |
|||
return systemexit.code |
|||
return 0 |
|||
|
|||
def assertConvert(self, basename, in_format, out_format): |
|||
"""Test of the "patatools convert" subcommand""" |
|||
sourcename = "{}.{}".format(basename, in_format) |
|||
destname = "{}.{}".format(basename, out_format) |
|||
controlname = "{}.{}.control".format(sourcename, out_format) |
|||
for main, args in [ |
|||
(tools_main, ["patatools", "convert"]), |
|||
(convert_main, ["patatools-convert"]), |
|||
]: |
|||
with self.subTest(main=main, args=args): |
|||
with self.chdir("test_convert_success"): |
|||
with open_read(controlname) as controlfile: |
|||
with logging_reduced(): |
|||
if os.path.exists(destname): |
|||
os.remove(destname) |
|||
self._system(main, args + [in_format, out_format, sourcename]) |
|||
expected = controlfile.read().strip().replace( |
|||
"@TEST_FOLDER@", |
|||
files.path2posix(resource_filename(__name__, "")), |
|||
) |
|||
with open_read(destname) as destfile: |
|||
self.assertMultiLineEqual( |
|||
destfile.read().strip(), |
|||
expected, |
|||
) |
|||
|
|||
@staticmethod |
|||
@contextlib.contextmanager |
|||
def chdir(*path): |
|||
"""Context to temporarry change current directory, relative to this file directory |
|||
""" |
|||
with files.chdir(resource_filename(__name__, ""), *path): |
|||
yield |
|||
|
|||
@classmethod |
|||
def _iter_testmethods(cls): |
|||
"""Iterate over song files to test.""" |
|||
with cls.chdir("test_convert_success"): |
|||
for control in sorted(glob.glob('*.*.*.control')): |
|||
[*base, in_format, out_format, _] = control.split('.') |
|||
base = '.'.join(base) |
|||
yield ( |
|||
"test_{}_{}_{}".format(base, in_format, out_format), |
|||
cls._create_test(base, in_format, out_format), |
|||
) |
|||
|
|||
@classmethod |
|||
def _create_test(cls, base, in_format, out_format): |
|||
"""Return a function testing that `base` compilation from `in_format` to `out_format` format. |
|||
""" |
|||
test_parse_render = lambda self: self.assertConvert(base, in_format, out_format) |
|||
test_parse_render.__doc__ = ( |
|||
"Test that '{base}.{in_format}' is correctly converted to '{out_format}'." |
|||
).format(base=os.path.basename(base), in_format=in_format, out_format=out_format) |
|||
return test_parse_render |
@ -0,0 +1,12 @@ |
|||
\beginsong{Wonderful song} |
|||
[by={Anonymous}] |
|||
|
|||
\begin{verse} |
|||
\[A]La la la\\ |
|||
\end{verse} |
|||
|
|||
\begin{chorus} |
|||
\[C]La la la\\ |
|||
\end{chorus} |
|||
|
|||
\endsong |
@ -0,0 +1 @@ |
|||
greensleeves.tsg |
@ -0,0 +1,45 @@ |
|||
{lang: en} |
|||
{columns: 2} |
|||
{title: Greensleeves} |
|||
{title: Un autre sous-titre} |
|||
{title: Un sous titre} |
|||
{artist: Traditionnel} |
|||
{album: Angleterre} |
|||
|
|||
|
|||
A[Am]las, my love, ye [G]do me wrong |
|||
To [Am]cast me oft dis[E]curteously |
|||
And [Am]I have loved [G]you so long |
|||
De[Am]lighting [E]in your [Am]companie |
|||
|
|||
|
|||
{start_of_chorus} |
|||
[C]Green[B]sleeves was [G]all my joy |
|||
[Am]Greensleeves was [E]my delight |
|||
[C]Greensleeves was my [G]heart of gold |
|||
And [Am]who but [E]Ladie [Am]Greensleeves |
|||
{end_of_chorus} |
|||
|
|||
|
|||
I [Am]have been ready [G]at your hand |
|||
To [Am]grant what ever [E]you would crave |
|||
I [Am]have both waged [G]life and land |
|||
Your [Am]love and [E]good will [Am]for to have |
|||
|
|||
|
|||
I [Am]bought thee kerchers [G]to thy head |
|||
That [Am]were wrought fine and [E]gallantly |
|||
I [Am]kept thee both at [G]boord and bed |
|||
Which [Am]cost my [E]purse well [Am]favouredly |
|||
|
|||
|
|||
I [Am]bought thee peticotes [G]of the best |
|||
The [Am]cloth so fine as [E]fine might be |
|||
I [Am]gave thee jewels [G]for thy chest |
|||
And [Am]all this [E]cost I [Am]spent on thee |
|||
|
|||
|
|||
Thy [Am]smock of silke, both [G]faire and white |
|||
With [Am]gold embrodered [E]gorgeously |
|||
Thy [Am]peticote of [G]sendall right |
|||
And [Am]this I [E]bought thee [Am]gladly |
@ -0,0 +1,62 @@ |
|||
\selectlanguage{english} |
|||
\songcolumns{2} |
|||
|
|||
\beginsong{Greensleeves\\ |
|||
Un autre sous-titre\\ |
|||
Un sous titre}[ |
|||
by={ |
|||
Traditionnel }, |
|||
album={Angleterre}, |
|||
] |
|||
|
|||
|
|||
|
|||
|
|||
\begin{verse} |
|||
A\[Am]las, my love, ye \[G]do me wrong |
|||
To \[Am]cast me oft dis\[E]curteously |
|||
And \[Am]I have loved \[G]you so long |
|||
De\[Am]lighting \[E]in your \[Am]companie |
|||
\end{verse} |
|||
|
|||
|
|||
\begin{chorus} |
|||
\[C]Green\[B]sleeves was \[G]all my joy |
|||
\[Am]Greensleeves was \[E]my delight |
|||
\[C]Greensleeves was my \[G]heart of gold |
|||
And \[Am]who but \[E]Ladie \[Am]Greensleeves |
|||
\end{chorus} |
|||
|
|||
|
|||
\begin{verse} |
|||
I \[Am]have been ready \[G]at your hand |
|||
To \[Am]grant what ever \[E]you would crave |
|||
I \[Am]have both waged \[G]life and land |
|||
Your \[Am]love and \[E]good will \[Am]for to have |
|||
\end{verse} |
|||
|
|||
|
|||
\begin{verse} |
|||
I \[Am]bought thee kerchers \[G]to thy head |
|||
That \[Am]were wrought fine and \[E]gallantly |
|||
I \[Am]kept thee both at \[G]boord and bed |
|||
Which \[Am]cost my \[E]purse well \[Am]favouredly |
|||
\end{verse} |
|||
|
|||
|
|||
\begin{verse} |
|||
I \[Am]bought thee peticotes \[G]of the best |
|||
The \[Am]cloth so fine as \[E]fine might be |
|||
I \[Am]gave thee jewels \[G]for thy chest |
|||
And \[Am]all this \[E]cost I \[Am]spent on thee |
|||
\end{verse} |
|||
|
|||
|
|||
\begin{verse} |
|||
Thy \[Am]smock of silke, both \[G]faire and white |
|||
With \[Am]gold embrodered \[E]gorgeously |
|||
Thy \[Am]peticote of \[G]sendall right |
|||
And \[Am]this I \[E]bought thee \[Am]gladly |
|||
\end{verse} |
|||
|
|||
\endsong |
Loading…
Reference in new issue