@ -5,7 +5,7 @@ describe("vCarousel", function()
{
let vCarouselTest : vCarousel ;
const videosWebDir = "https://forge.chapril.org/Fab_Blab/vCarousel/src/branch/master/public/videos" ;
const fixture = "<div id='fixture'><figure id='noVideo'></figure><figure id='vFunanbule '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-clownfunanbule.m4v' type='video/mp4'></source><p>Votre navigateur ne prend pas en charge les vidéos HTML5.</p></video><figcaption>Un clown funanbule !</figcaption></figure><figure id='vForgeron '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-forgeron.m4v' type='video/mp4'></source><p>Votre navigateur ne prend pas en charge les vidéos HTML5.</p></video><figcaption>Il faut forger pour devenir forgeron !</figcaption></figure><figure id='vCircuit '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-drole-de-circuit.m4v' type='video/mp4'></source><p>Votre navigateur ne prend pas en charge les vidéos HTML5.</p>< /video><figcaption>Drôle de circuit !</figcaption></figure ></div>" ;
const fixture = "<div id='fixture'><figure id='noVideo'></figure><figure id='video1 '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-clownfunanbule.m4v' type='video/mp4'></source></video></figure><figure id='video2 '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-forgeron.m4v' type='video/mp4'></source></video></figure><figure id='video3 '><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-drole-de-circuit.m4v' type='video/mp4'></source></video></div>" ;
beforeEach ( function ( )
{
@ -18,174 +18,166 @@ describe("vCarousel", function()
document . body . removeChild ( document . getElementById ( 'fixture' ) ) ;
} ) ;
it ( "s hould be an instance of vCarousel" , function ( )
it ( "S hould be an instance of vCarousel" , function ( )
{
expect ( vCarouselTest ) . toBeInstanceOf ( vCarousel ) ;
} ) ;
describe ( "s etting vCarousel" , function ( )
describe ( "S etting vCarousel" , function ( )
{
it ( "Doit générer une erreur si tous les ids passés ne correspondent pas à des éléments HTML existants." , function ( )
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "dontExistId" , "vFunanbule" , "vForgeron " ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule " , "dontExistId" , "vForgeron " ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron " , "dontExistId" ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "dontExistId" , "video1" , "video2 " ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1 " , "dontExistId" , "video2 " ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2 " , "dontExistId" ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
} ) ;
it ( "Doit générer une erreur si tous les ids passés ne correspondent pas à des éléments HTML contenant une vidéo." , function ( )
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "noVideo" , "vFunanbule" , "vForgeron " ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule " , "noVideo" , "vForgeron " ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron " , "noVideo" ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "noVideo" , "video1" , "video2 " ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1 " , "noVideo" , "video2 " ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2 " , "noVideo" ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
} ) ;
it ( "Doit générer une erreur s'il n'y a pas au moins deux éléments HTML valides fourni s." , function ( )
it ( "Doit générer une erreur s'il n'y a pas au moins 2 ids valides passés pour les éléments HTML contenant les vidéo s." , function ( )
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule " ] ; } ) . toThrowError ( errors . need2Videos ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1 " ] ; } ) . toThrowError ( errors . need2Videos ) ;
} ) ;
it ( "Ne doit pas générer d'erreur s'il y a au moins 2 ids passés correspondant à des éléments HTML valides et contenant chacun une vidéo." , function ( )
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron " ] ; } ) . not . toThrowError ( ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2 " ] ; } ) . not . toThrowError ( ) ;
} ) ;
it ( "Ne doit pas prendre en compte l'id fourni pour la première vidéo à afficher s'il n'est pas correcte ." , function ( )
it ( "Ne doit pas prendre en compte l'id fourni pour la première vidéo à afficher, s'il ne correspond pas à une des vidéos fournis ." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron " ] ;
vCarouselTest . firstVideoId = "vCircuit " ;
vCarouselTest . vContainers = [ "video1" , "video2 " ] ;
vCarouselTest . firstVideoId = "video3 " ;
expect ( vCarouselTest . firstVideoId ) . toBeUndefined ( ) ;
} ) ;
it ( "Doit accepter un firstVideoId vide pour n'afficher aucune vidéo au lancement." , function ( )
it ( "Doit accepter un firstVideoId vide permettant de cacher toutes les vidéos au lancement." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron " ] ;
vCarouselTest . vContainers = [ "video1" , "video2 " ] ;
vCarouselTest . firstVideoId = "" ;
expect ( vCarouselTest . firstVideoId ) . toBe ( "" ) ;
} ) ;
} ) ;
describe ( "running vCarousel" , function ( )
{
{
it ( "Doit générer une erreur si on lance le carrousel sans avoir fourni les éléments HTML contenant les vidéos." , function ( )
{
expect ( function ( ) { return vCarouselTest . run ( ) ; } ) . toThrowError ( errors . needVideosProvided ) ;
} ) ;
it ( "Doit cacher toutes les vidéos si cela est demandé en option, aucune vidéo n'étant enregistrée comme en cours." , function ( )
it ( "Doit cacher toutes les vidéos si cela est demandé en option, aucune vidéo n'étant alors enregistrée comme en cours." , function ( )
{
const videosId = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
const videosId = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . vContainers = videosId ;
vCarouselTest . firstVideoId = "" ;
vCarouselTest . run ( ) ;
for ( let containerId of videosId )
{
expect ( document . getElementById ( containerId ) . style . display ) . toBe ( "none" ) ;
}
expect ( vCarouselTest . currentVideo ) . toBeUndefined ( ) ;
} ) ;
it ( "Doit cacher toutes les vidéos, sauf celle passée en option, qui doit être enregistrée comme celle en cours." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . firstVideoId = "vCircuit " ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . firstVideoId = "video3 " ;
vCarouselTest . run ( ) ;
expect ( document . getElementById ( "vFunanbule" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vForgeron" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vCircuit" ) . style . display ) . toBe ( "block" ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vCircuit video" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "block" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( < HTMLMediaElement > document . querySelector ( "#video3 video" ) ) ;
} ) ;
it ( "Doit cacher toutes les vidéos sauf la première, si aucune indication n'est passée en option, qui doit être enregistrée comme celle en cours." , function ( )
it ( "Si aucune indication n'est passée en option, doit cacher toutes les vidéos sauf la première qui doit être enregistrée comme celle en cours." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . run ( ) ;
expect ( document . getElementById ( "vFunanbule" ) . style . display ) . toBe ( "block" ) ;
expect ( document . getElementById ( "vForgeron" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vCircuit" ) . style . display ) . toBe ( "none" ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "block" ) ;
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "none" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( < HTMLMediaElement > document . querySelector ( "#video1 video" ) ) ;
} ) ;
it ( "Doit demander le lancement de la première vidéo affichée, si demandé en option." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . firstVideoId = "vCircuit " ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . firstVideoId = "video2 " ;
vCarouselTest . playFirstVideo = true ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vCircuit video" ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
spyOn ( currentVideo , "play" ) ;
vCarouselTest . run ( ) ;
expect ( currentVideo . play ) . toHaveBeenCalled ( ) ;
} ) ;
it ( "Ne doit demander le lancement de la première vidéo affichée, si cela n'est pas demandé en option." , function ( )
it ( "Ne doit pas demander le lancement de la première vidéo affichée, si cela n'est pas demandé en option." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . firstVideoId = "vCircuit " ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vCircuit video" ) ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . firstVideoId = "video3 " ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
spyOn ( currentVideo , "play" ) ;
vCarouselTest . run ( ) ;
expect ( currentVideo . play ) . not . toHaveBeenCalled ( ) ;
} ) ;
it ( "Doit passer d'une vidéo à l'autre jusqu'à ce qu'elles aient été toutes affichées." , function ( )
it ( "Doit passer d'une vidéo à l'autre et arrêter lorsqu'elles ont toutes été affichées." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . run ( ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( document . getElementById ( "vFunanbule " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vForgeron " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#vForgeron video" ) ;
expect ( document . getElementById ( "video1 " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video2 " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( window . location . hash ) . toEqual ( "#vForgeron" ) ;
expect ( window . location . hash ) . toEqual ( "#video2" ) ;
// Fin de la deuxième, on passe à la dernière :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( document . getElementById ( "vForgeron " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vCircuit " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#vCircuit video" ) ;
expect ( document . getElementById ( "video2 " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3 " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( window . location . hash ) . toEqual ( "#vCircuit" ) ;
expect ( window . location . hash ) . toEqual ( "#video3" ) ;
// Fin de la dernière, rien ne bouge :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( document . getElementById ( "vCircuit " ) . style . display ) . toBe ( "block" ) ;
expect ( document . getElementById ( "video3 " ) . style . display ) . toBe ( "block" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( window . location . hash ) . toEqual ( "#vCircuit " ) ;
expect ( window . location . hash ) . toEqual ( "#video3 " ) ;
} ) ;
it ( "Si demandé, le carrousel doit continuer après avoir parcouru toutes les vidéos." , function ( )
it ( "Si cela est demandé, le carrousel doit reprendre au début après avoir parcouru toutes les vidéos." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . noStop = true ;
vCarouselTest . run ( ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#vForgeron video" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
// Fin de la deuxième, on passe à la dernière :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#vCircuit video" ) ;
// Fin de la dernière, on retourne à la première :
currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
// Fin de la dernière, on doit retourner à la première :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( document . getElementById ( "vCircuit " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "vFunanbule " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
expect ( document . getElementById ( "video3 " ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video1 " ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
expect ( window . location . hash ) . toEqual ( "#vFunanbule " ) ;
expect ( window . location . hash ) . toEqual ( "#video1 " ) ;
} ) ;
it ( "Doit demander le lancement des nouvelles vidéos affichées, si cela est demandé en option." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit " ] ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3 " ] ;
vCarouselTest . playNextVideos = true ;
vCarouselTest . run ( ) ;
let firstVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#vForgeron video" ) ;
let firstVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
spyOn ( nextVideo , "play" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante qui doit se lancer automatiquement :
firstVideo . dispatchEvent ( new Event ( "ended" ) ) ;
@ -194,10 +186,11 @@ describe("vCarousel", function()
it ( "Ne doit pas demander le lancement des nouvelles vidéos affichées, si cela n'est pas demandé en option." , function ( )
{
vCarouselTest . vContainers = [ "vFunanbule" , "vForgeron" , "vCircuit" ] ;
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
vCarouselTest . firstVideoId = "video2" ;
vCarouselTest . run ( ) ;
let firstVideo = < HTMLMediaElement > document . querySelector ( "#vFunanbule video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#vForgeron video" ) ;
let firstVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
spyOn ( nextVideo , "play" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante qui ne doit pas se lancer automatiquement :
firstVideo . dispatchEvent ( new Event ( "ended" ) ) ;