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 Test::More tests => 1 + 2 * 5; # general tests + number of samples * test per sample

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

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

my @cleanup;

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

for my $sample (@samples)
{
   # Read an FLV file and check selected metadata against expectations
   my $flv = FLV::File->new();
   $flv->parse($sample->{file});
   $flv->populate_meta();

   # Write the FLV back out as a temp file
   my ($fh, $tempfilename) = tempfile();
   die if (! -f $tempfilename);
   push @cleanup, $tempfilename;
   ok($flv->serialize($fh), 'serialize');
   close $fh;
   
   # Read the temp file back and compare it to the original -- should
   # be identical except for hash key ordering
   my $newflv = FLV::File->new();
   $newflv->parse($tempfilename, { record_positions => 1 });

   my @keyframes = $newflv->get_body->get_video_keyframes;
   is($newflv->get_meta('filesize'), -s $tempfilename, 'meta filesize');
   is_deeply($newflv->get_meta('keyframes')->{filepositions},
             [map {$_->_pos()} @keyframes], 'meta keyframe positions');
   is_deeply([map {sprintf '%.03f', $_} @{$newflv->get_meta('keyframes')->{times}}],
             [map {sprintf '%.03f', 0.001*$_->{start}} @keyframes], 'meta keyframe times');
             
   my $reader = FLV::Info->new();
   $reader->parse($tempfilename);
   like($reader->report(), qr/>>>/, 'keyframe metadata is in report');
}