Alex 'AdUser' Z
6 years ago
2 changed files with 65 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||||||
|
package Subtitle::TimePoint; |
||||||
|
|
||||||
|
use strict; |
||||||
|
use warnings; |
||||||
|
|
||||||
|
use Subtitle::Utils ':timing'; |
||||||
|
|
||||||
|
sub new { |
||||||
|
my ($class, %args) = @_; |
||||||
|
my $self = { |
||||||
|
shift => $args{shift} || 0.0, |
||||||
|
time => $args{time} || 0.0, |
||||||
|
}; |
||||||
|
return bless($self, $class); |
||||||
|
} |
||||||
|
|
||||||
|
sub parse { |
||||||
|
my ($self, $timespec) = @_; |
||||||
|
|
||||||
|
return 'empty timespec, nothing to do' |
||||||
|
unless $timespec; |
||||||
|
return 'wrong timespec, expected <time>/[+-]<time>, abort' |
||||||
|
unless $timespec =~ m<^([0-9:.]+)/([+-]?[0-9:.]+)$>o; |
||||||
|
my ($t1, $t2) = ($1, $2); |
||||||
|
$self->{time} = parse_timeshift($t1); |
||||||
|
$self->{shift} = parse_timeshift($t2); |
||||||
|
return "can't parse time: $t1" |
||||||
|
unless defined $self->{time}; |
||||||
|
return "can't parse time: $t2" |
||||||
|
unless defined $self->{shift}; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
sub shift { return CORE::shift->{'shift'}; } |
||||||
|
sub time { return CORE::shift->{'time'}; } |
||||||
|
|
||||||
|
1; |
@ -0,0 +1,28 @@ |
|||||||
|
use strict; |
||||||
|
use warnings; |
||||||
|
|
||||||
|
use Test::More tests => 19; |
||||||
|
|
||||||
|
use Subtitle::TimePoint; |
||||||
|
|
||||||
|
my $p = Subtitle::TimePoint->new; |
||||||
|
is(ref $p, 'Subtitle::TimePoint'); |
||||||
|
can_ok($p, qw(new parse time shift)); |
||||||
|
|
||||||
|
# valid timespec |
||||||
|
is($p->parse('0/0'), undef); |
||||||
|
is($p->time, 0.0), is($p->shift, 0.0); |
||||||
|
is($p->parse('0.3/0'), undef); |
||||||
|
is($p->time, 0.3), is($p->shift, 0.0); |
||||||
|
is($p->parse('1:17/-4.1'), undef); |
||||||
|
is($p->time, 77), is($p->shift, -4.1); |
||||||
|
is($p->parse('2:15:03.515/+3:02.7'), undef); |
||||||
|
is($p->time, 8103.515), is($p->shift, 182.7); |
||||||
|
# invalid timespec |
||||||
|
is($p->parse('0.3/-'), "wrong timespec, expected <time>/[+-]<time>, abort"); |
||||||
|
is($p->parse('1:17/-4.'), "can't parse time: -4."); |
||||||
|
is($p->parse(':47/-5.4'), "can't parse time: :47"); |
||||||
|
is($p->parse('1:1.2/-5'), "can't parse time: 1:1.2"); |
||||||
|
is($p->parse('5:31./7'), "can't parse time: 5:31."); |
||||||
|
|
||||||
|
1; |
Loading…
Reference in new issue