WWW-SVT-Play
view release on metacpan or search on metacpan
#!/usr/bin/perl
use warnings;
use strict;
use Test::More;
use Test::Trap;
use List::Util qw/max/;
use File::Slurp;
use JSON;
use Encode;
use Data::Dumper;
use lib 't/lib';
$Data::Dumper::Indent = 1;
my @REF_FILES;
BEGIN { @REF_FILES = glob('t/data/ref/*.json') }
my %ALIASES;
BEGIN {
open my $fh, '<', 't/data/aliases.json' or
die "Could not open t/data/aliases.json: $!";
my $blob = do { local $/=''; <$fh> };
close $fh;
%ALIASES = %{decode_json($blob)};
}
BEGIN {
my $video_tests_n = 27; # n tests performed in video_tests() (recursive)
plan tests => (1 + (@REF_FILES + keys %ALIASES) * $video_tests_n);
use_ok('WWW::SVT::Play::Video')
}
sub get_number {
my $f = shift;
my ($n) = $f =~ m|([^/]+)\.json$|;
return $n;
}
sub load_testdata {
my %ref;
my $json = JSON->new->utf8;
for my $file (@REF_FILES) {
my $n = get_number($file);
my $data = read_file($file);
$ref{$n} = $json->decode(encode('utf8', $data));
}
return %ref;
}
sub video_tests {
my $url = shift;
my($n, $ref) = @_;
note("Tests for $url ($n)");
my $svtp = new_ok('WWW::SVT::Play::Video', [$ref->{url}]);
is($svtp->url, $ref->{url}, '->url()');
is($svtp->title, $ref->{title}, '->title()');
is($svtp->duration, $ref->{duration}, '->duration()');
SKIP: {
skip 'RTMP specific tests', 10 unless $ref->{has}->{rtmp};
ok $svtp->has_rtmp, "has rtmp streams";
my %ref_streams = map {
$_->{bitrate} => $_->{url}
} grep {
$_->{type} eq 'rtmp'
} @{$ref->{streams}};
is_deeply(
[sort {$a <=> $b } $svtp->rtmp_bitrates],
[sort {$a <=> $b } keys %ref_streams],
'->bitrates() in list context'
);
my $max = max $svtp->rtmp_bitrates;
is(
scalar $svtp->rtmp_bitrates,
$max,
( run in 0.974 second using v1.01-cache-2.11-cpan-54e63673c56 )