WWW-SVT-Play

 view release on metacpan or  search on metacpan

t/video.t  view on Meta::CPAN

#!/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 )