The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use warnings;
use strict;
use File::Temp qw(tempfile);
use File::Spec;
use Digest::MD5 qw(md5_hex);
use Test::More tests => 5 + 2 * 1; # general tests + number of samples * test per sample

BEGIN
{
   use_ok('FLV::ToMP3');
}

my @samples = (
   {
      flvfile => File::Spec->catfile('t', 'samples', 'flash6.flv'),
      outsize => 119118,
   },
   {
      flvfile => File::Spec->catfile('t', 'samples', 'flash8.flv'),
      outsize => 119118,
   },
);

my @cleanup;

{
   my $converter = FLV::ToMP3->new();
   eval { $converter->parse_flv('nosuchfile.flv'); };
   like($@, qr/Failed to read FLV file/, 'ToMP3 parse non-existent file');

   eval { $converter->save(File::Spec->catfile('nosuchdir/file.mp3')); };
   like($@, qr/No audio data/, 'ToMP3 empty FLV');

   $converter->{flv}->set_meta(audiocodecid => 0); # hack
   eval { $converter->save(File::Spec->catfile('nosuchdir/file.mp3')); };
   like($@, qr/Audio format uncompressed not supported/, 'ToMP3 wrong audio format');

   $converter->{flv}->set_meta(audiocodecid => 2); # hack
   eval { $converter->save(File::Spec->catfile('nosuchdir/file.mp3')); };
   like($@, qr/Failed to write MP3 file/, 'ToMP3 impossible output filename');
}

for my $sample (@samples)
{
   my $converter = FLV::ToMP3->new();
   $converter->parse_flv($sample->{flvfile});
   # Write the MP3 back out as a temp file
   my ($fh, $tempmp3) = tempfile();
   die if (! -f $tempmp3);
   push @cleanup, $tempmp3;
   close $fh;
   $converter->save($tempmp3);

   is(-s $tempmp3, $sample->{outsize}, 'save mp3 file');
}


END
{
   # Delete temp files
   unlink $_ for @cleanup;
}