1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use ChordPro::Testing;
use ChordPro::Config;
use ChordPro::Songbook;
plan tests => 4;
# For transcoding, both source and target notation systems must be
# defined. The source system must be last, so it is current and used
# to parse the the input data.
our $config =
eval {
ChordPro::Config::configurator
( { nosysconfig => 1, nolegacyconfig => 1, nouserconfig => 1,
config => [ getresource("config/notes/latin.json"),
getresource("config/notes/common.json") ],
transcode => "latin"
} );
};
ok( $config, "got config" );
my $s = ChordPro::Songbook->new;
my $data = <<EOD;
{title: Swing Low Sweet Chariot}
{key: D}
I [D]looked over Jordan, and [Gm7]what did I [D]see,
EOD
eval { $s->parse_file( \$data ) } or diag("$@");
ok( scalar( @{ $s->{songs} } ) == 1, "One song" );
isa_ok( $s->{songs}->[0], 'ChordPro::Song', "It's a song" );
my $song = {
'settings' => {},
'meta' => {
'songindex' => 1,
'key' => [ 'Re' ],
'title' => [
'Swing Low Sweet Chariot'
],
},
'title' => 'Swing Low Sweet Chariot',
'chords' => {
'origin' => 'song',
'type' => 'diagrams',
'show' => 'all',
'chords' => [
'Re',
'Solm7'
]
},
'body' => [
{
'context' => '',
'line' => 3,
'phrases' => [
'I ',
'looked over Jordan, and ',
'what did I ',
'see,'
],
'chords' => [
'',
'Re',
'Solm7',
'Re'
],
'type' => 'songline'
}
],
chordsinfo => { map { $_ => $_ } qw( Re Solm7 ) },
'source' => { file => "__STRING__", line => 1 },
'structure' => 'linear',
'system' => 'common',
};
is_deeply( { %{ $s->{songs}->[0] } }, $song, "Song contents" );
|