App-Music-ChordPro

 view release on metacpan or  search on metacpan

t/105_chords.t  view on Meta::CPAN


my %tbl;

our $config =
  eval {
      ChordPro::Config::configurator
	  ( { nosysconfig => 1, nolegacyconfig => 1, nouserconfig => 1,
	      config => getresource("config/notes/common.json") } );
  };

=for generating

while ( <DATA> ) {
    chomp;
    my ( $chord, $info ) = split( /\t/, $_ );
    my $c = $chord;
    $c =~ s/[()]//g;
    my $res = ChordPro::Chords::parse_chord($c);
    unless ( $res ) {
	print( "$_\tFAIL\n");
	next;
    }
    print("$chord\t", reformat($res), "\n");
}

exit;

=cut

while ( <DATA> ) {
    chomp;
    my ( $chord, $info ) = split( /\t/, $_ );
    my $c = $chord;
    $c =~ s/[()]//g;
    $tbl{$c} = $info;
}

plan tests => 0 + keys(%tbl);

while ( my ( $c, $info ) = each %tbl ) {
    my $res = ChordPro::Chords::parse_chord($c);
    $res //= "FAIL";
    if ( UNIVERSAL::isa( $res, 'HASH' ) ) {
        $res = reformat($res);
    }
    is( $res, $info, "parsing chord $c");
}

sub reformat {
    my ( $res ) = @_;
    $res = {%$res};
    delete($res->{parser});
    use Data::Dumper qw();
    local $Data::Dumper::Sortkeys  = 1;
    local $Data::Dumper::Indent    = 1;
    local $Data::Dumper::Quotekeys = 0;
    local $Data::Dumper::Deparse   = 1;
    local $Data::Dumper::Terse     = 1;
    local $Data::Dumper::Trailingcomma = 1;
    local $Data::Dumper::Useperl = 1;
    local $Data::Dumper::Useqq     = 0; # I want unicode visible
    my $s = Data::Dumper::Dumper($res);
    $s =~ s/\s+/ /gs;
    $s =~ s/, \}/ }/gs;
    $s =~ s/\s+$//;
    return $s;
}

__DATA__
C	{ bass => '', ext => '', ext_canon => '', name => 'C', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C+	{ bass => '', ext => '', ext_canon => '', name => 'C+', qual => '+', qual_canon => '+', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C4	{ bass => '', ext => 4, ext_canon => 4, name => 'C4', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C6	{ bass => '', ext => 6, ext_canon => 6, name => 'C6', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C7	{ bass => '', ext => 7, ext_canon => 7, name => 'C7', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C9	{ bass => '', ext => 9, ext_canon => 9, name => 'C9', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C9(11)	{ bass => '', ext => 911, ext_canon => 911, name => 'C911', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C11	{ bass => '', ext => 11, ext_canon => 11, name => 'C11', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Csus	{ bass => '', ext => 'sus', ext_canon => 'sus4', name => 'Csus', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Csus2	{ bass => '', ext => 'sus2', ext_canon => 'sus2', name => 'Csus2', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Csus4	{ bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'Csus4', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Csus9	{ bass => '', ext => 'sus9', ext_canon => 'sus9', name => 'Csus9', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cmaj	{ bass => '', ext => '', ext_canon => '', name => 'Cmaj', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cmaj7	{ bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'Cmaj7', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cm	{ bass => '', ext => '', ext_canon => '', name => 'Cm', qual => 'm', qual_canon => '-', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cmin	{ bass => '', ext => '', ext_canon => '', name => 'Cmin', qual => 'min', qual_canon => '-', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cdim	{ bass => '', ext => '', ext_canon => '', name => 'Cdim', qual => 'dim', qual_canon => 0, root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C/B	{ bass => 'B', bass_canon => 'B', bass_mod => 0, bass_ord => 11, ext => '', ext_canon => '', name => 'C/B', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cadd9	{ bass => '', ext => 'add9', ext_canon => 'add9', name => 'Cadd9', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C3	{ bass => '', ext => 3, ext_canon => 3, name => 'C3', qual => '', qual_canon => '', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cm7	{ bass => '', ext => 7, ext_canon => 7, name => 'Cm7', qual => 'm', qual_canon => '-', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
Cm11	{ bass => '', ext => 11, ext_canon => 11, name => 'Cm11', qual => 'm', qual_canon => '-', root => 'C', root_canon => 'C', root_mod => 0, root_ord => 0, system => 'common' }
C#	{ bass => '', ext => '', ext_canon => '', name => 'C#', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#+	{ bass => '', ext => '', ext_canon => '', name => 'C#+', qual => '+', qual_canon => '+', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#4	{ bass => '', ext => 4, ext_canon => 4, name => 'C#4', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#7	{ bass => '', ext => 7, ext_canon => 7, name => 'C#7', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#7(b5)	{ bass => '', ext => '7b5', ext_canon => '7b5', name => 'C#7b5', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#sus	{ bass => '', ext => 'sus', ext_canon => 'sus4', name => 'C#sus', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#sus4	{ bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'C#sus4', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#maj	{ bass => '', ext => '', ext_canon => '', name => 'C#maj', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#maj7	{ bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'C#maj7', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#dim	{ bass => '', ext => '', ext_canon => '', name => 'C#dim', qual => 'dim', qual_canon => 0, root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#m	{ bass => '', ext => '', ext_canon => '', name => 'C#m', qual => 'm', qual_canon => '-', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#min	{ bass => '', ext => '', ext_canon => '', name => 'C#min', qual => 'min', qual_canon => '-', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#add9	{ bass => '', ext => 'add9', ext_canon => 'add9', name => 'C#add9', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#(add9)	{ bass => '', ext => 'add9', ext_canon => 'add9', name => 'C#add9', qual => '', qual_canon => '', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
C#m7	{ bass => '', ext => 7, ext_canon => 7, name => 'C#m7', qual => 'm', qual_canon => '-', root => 'C#', root_canon => 'C#', root_mod => 1, root_ord => 1, system => 'common' }
Db	{ bass => '', ext => '', ext_canon => '', name => 'Db', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Db+	{ bass => '', ext => '', ext_canon => '', name => 'Db+', qual => '+', qual_canon => '+', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Db7	{ bass => '', ext => 7, ext_canon => 7, name => 'Db7', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbsus	{ bass => '', ext => 'sus', ext_canon => 'sus4', name => 'Dbsus', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbsus4	{ bass => '', ext => 'sus4', ext_canon => 'sus4', name => 'Dbsus4', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbmaj	{ bass => '', ext => '', ext_canon => '', name => 'Dbmaj', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbmaj7	{ bass => '', ext => 'maj7', ext_canon => 'maj7', name => 'Dbmaj7', qual => '', qual_canon => '', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbdim	{ bass => '', ext => '', ext_canon => '', name => 'Dbdim', qual => 'dim', qual_canon => 0, root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbm	{ bass => '', ext => '', ext_canon => '', name => 'Dbm', qual => 'm', qual_canon => '-', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbmin	{ bass => '', ext => '', ext_canon => '', name => 'Dbmin', qual => 'min', qual_canon => '-', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
Dbm7	{ bass => '', ext => 7, ext_canon => 7, name => 'Dbm7', qual => 'm', qual_canon => '-', root => 'Db', root_canon => 'Db', root_mod => -1, root_ord => 1, system => 'common' }
D	{ bass => '', ext => '', ext_canon => '', name => 'D', qual => '', qual_canon => '', root => 'D', root_canon => 'D', root_mod => 0, root_ord => 2, system => 'common' }
D+	{ bass => '', ext => '', ext_canon => '', name => 'D+', qual => '+', qual_canon => '+', root => 'D', root_canon => 'D', root_mod => 0, root_ord => 2, system => 'common' }
D4	{ bass => '', ext => 4, ext_canon => 4, name => 'D4', qual => '', qual_canon => '', root => 'D', root_canon => 'D', root_mod => 0, root_ord => 2, system => 'common' }
D6	{ bass => '', ext => 6, ext_canon => 6, name => 'D6', qual => '', qual_canon => '', root => 'D', root_canon => 'D', root_mod => 0, root_ord => 2, system => 'common' }



( run in 1.888 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )