Support for 'oneTime' attribute + tests [#990]

This commit is contained in:
Christopher De Cairos 2012-05-03 16:53:14 -04:00
Родитель 031f4836f5
Коммит 7c74407cea
2 изменённых файлов: 48 добавлений и 0 удалений

Просмотреть файл

@ -1365,6 +1365,12 @@
natives.start = natives.start || natives[ "in" ];
natives.end = natives.end || natives[ "out" ];
if ( options.oneTime ) {
natives.end = combineFn( natives.end, function() {
this.removeTrackEvent( options._id );
});
}
// extend teardown to always call end if running
natives._teardown = combineFn(function() {

Просмотреть файл

@ -4173,6 +4173,48 @@ test( "end undefined or false should never be fired", function() {
$pop.currentTime( $pop.duration() );
});
test( "Plugins with a oneTime attribute should be removed after 'end' is fired.", function() {
var $pop = Popcorn( "#video" ),
startFired = 0;
endFired = 0;
stop();
expect( 3 );
Popcorn.plugin( "onetimeplugin", {
start: function() {
if ( !startFired ) {
ok( true, "start called once" );
startFired++;
} else {
ok( false, "Start should oly execute once!" )
startFired++;
}
},
end: function() {
if ( !endFired ) {
ok( true, "end called once" );
this.currentTime( 0 );
endFired++;
} else {
ok( false, "End should only execute once!" );
endFired++;
}
}
});
$pop.onetimeplugin({ start: 2, end: 3, oneTime: true });
$pop.cue( 4, function() {
ok( startFired === 1 && endFired === 1, "start and end called one each" );
$pop.removePlugin( "onetimeplugin" );
$pop.destroy();
start();
});
$pop.play( 0 );
});
module( "Popcorn XHR" );
test( "Basic", function() {