The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN { $| = 1; print "1..20\n"; $ENV{MP3TAG_SKIP_LOCAL} = 1}
END {print "MP3::Tag not loaded :(\n" unless $loaded;}
use MP3::Tag;
$loaded = 1;
$count = 0;
ok(1,"MP3::Tag initialized");

######################### End of black magic.

# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):

{local *F; open F, '>test12.mp3' or warn; print F 'empty'}

$mp3 = MP3::Tag->new("test12.mp3");

ok($res = $mp3->parse('%t - %l', 'abc - def - xyz'), "Parsed greedily");
ok($res->{title} eq 'abc - def', "Parsed before correct");
ok($res->{album} eq 'xyz', "Parsed after correct");

ok($mp3->config(parse_minmatch => 1), 'Set parse_minmatch');

ok($res = $mp3->parse('%t - %l', 'abc - def - xyz'), "Parsed nongreedily");
ok($res->{title} eq 'abc', "Parsed before correct");
ok($res->{album} eq 'def - xyz', "Parsed after correct");


ok($res = $mp3->parse('%{COMM(rus,EN,#1,)[foo]}', 'abc - def - xyz'), "Parsed COMM(rus,EN,#1,)[foo]");
ok($res->{'COMM(rus,EN,#1,)[foo]'} eq 'abc - def - xyz', "Parsed after correct");

{local *F; open F, '>t12.mp3' or warn; print F 'empty'}

$mp3 = MP3::Tag->new("t12.mp3");
ok($mp3, "Got tag");
ok(scalar ($mp3->config('parse_data',['bOD', "foo\n", '%B%B/%B%B.xxx']), 1),
   "config parsedata");

ok(!-e 't12t12', 'temporary directory not there');
ok(!-e 't12t12/t12t12.xxx', 'temporary output file not there');

unlink 't12t12/t12t12.xxx';
rmdir 't12t12';

ok(scalar ($mp3->title, 1), "Run the parser");
ok(-d 't12t12', 'Output directory created');
ok(-e 't12t12/t12t12.xxx', 'Output file created');
ok(4 == -s 't12t12/t12t12.xxx', 'Output file of correct size');

ok(unlink('t12t12/t12t12.xxx'), 'Remove output file');
ok(rmdir('t12t12'), 'Remove output directory');

my @failed;
#@failed ? die "Tests @failed failed.\n" : print "All tests successful.\n";

sub ok_test {
  my ($result, $test) = @_;
  printf ("Test %2d %s %s", ++$count, $test, '.' x (45-length($test)));
  (push @failed, $count), print " not" unless $result;
  print " ok\n";
}
sub ok {
  my ($result, $test) = @_;
  (push @failed, $count), print "not " unless $result;
  printf "ok %d # %s\n", ++$count, $test;
}