test.js (22211B)
1 // These tests expect the DOM to contain a presentation 2 // with the following slide structure: 3 // 4 // 1 5 // 2 - Three sub-slides 6 // 3 - Three fragment elements 7 // 3 - Two fragments with same data-fragment-index 8 // 4 9 10 Reveal.addEventListener( 'ready', function() { 11 12 // --------------------------------------------------------------- 13 // DOM TESTS 14 15 QUnit.module( 'DOM' ); 16 17 QUnit.test( 'Initial slides classes', function( assert ) { 18 var horizontalSlides = document.querySelectorAll( '.reveal .slides>section' ) 19 20 assert.strictEqual( document.querySelectorAll( '.reveal .slides section.past' ).length, 0, 'no .past slides' ); 21 assert.strictEqual( document.querySelectorAll( '.reveal .slides section.present' ).length, 1, 'one .present slide' ); 22 assert.strictEqual( document.querySelectorAll( '.reveal .slides>section.future' ).length, horizontalSlides.length - 1, 'remaining horizontal slides are .future' ); 23 24 assert.strictEqual( document.querySelectorAll( '.reveal .slides section.stack' ).length, 2, 'two .stacks' ); 25 26 assert.ok( document.querySelectorAll( '.reveal .slides section.stack' )[0].querySelectorAll( '.future' ).length > 0, 'vertical slides are given .future' ); 27 }); 28 29 // --------------------------------------------------------------- 30 // API TESTS 31 32 QUnit.module( 'API' ); 33 34 QUnit.test( 'Reveal.isReady', function( assert ) { 35 assert.strictEqual( Reveal.isReady(), true, 'returns true' ); 36 }); 37 38 QUnit.test( 'Reveal.isOverview', function( assert ) { 39 assert.strictEqual( Reveal.isOverview(), false, 'false by default' ); 40 41 Reveal.toggleOverview(); 42 assert.strictEqual( Reveal.isOverview(), true, 'true after toggling on' ); 43 44 Reveal.toggleOverview(); 45 assert.strictEqual( Reveal.isOverview(), false, 'false after toggling off' ); 46 }); 47 48 QUnit.test( 'Reveal.isPaused', function( assert ) { 49 assert.strictEqual( Reveal.isPaused(), false, 'false by default' ); 50 51 Reveal.togglePause(); 52 assert.strictEqual( Reveal.isPaused(), true, 'true after pausing' ); 53 54 Reveal.togglePause(); 55 assert.strictEqual( Reveal.isPaused(), false, 'false after resuming' ); 56 }); 57 58 QUnit.test( 'Reveal.isFirstSlide', function( assert ) { 59 Reveal.slide( 0, 0 ); 60 assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' ); 61 62 Reveal.slide( 1, 0 ); 63 assert.strictEqual( Reveal.isFirstSlide(), false, 'false after Reveal.slide( 1, 0 )' ); 64 65 Reveal.slide( 0, 0 ); 66 assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' ); 67 }); 68 69 QUnit.test( 'Reveal.isFirstSlide after vertical slide', function( assert ) { 70 Reveal.slide( 1, 1 ); 71 Reveal.slide( 0, 0 ); 72 assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( 0, 0 )' ); 73 }); 74 75 QUnit.test( 'Reveal.isLastSlide', function( assert ) { 76 Reveal.slide( 0, 0 ); 77 assert.strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' ); 78 79 var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1; 80 81 Reveal.slide( lastSlideIndex, 0 ); 82 assert.strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( '+ lastSlideIndex +', 0 )' ); 83 84 Reveal.slide( 0, 0 ); 85 assert.strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' ); 86 }); 87 88 QUnit.test( 'Reveal.isLastSlide after vertical slide', function( assert ) { 89 var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1; 90 91 Reveal.slide( 1, 1 ); 92 Reveal.slide( lastSlideIndex ); 93 assert.strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( '+ lastSlideIndex +', 0 )' ); 94 }); 95 96 QUnit.test( 'Reveal.getTotalSlides', function( assert ) { 97 assert.strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' ); 98 }); 99 100 QUnit.test( 'Reveal.getIndices', function( assert ) { 101 var indices = Reveal.getIndices(); 102 103 assert.ok( indices.hasOwnProperty( 'h' ), 'h exists' ); 104 assert.ok( indices.hasOwnProperty( 'v' ), 'v exists' ); 105 assert.ok( indices.hasOwnProperty( 'f' ), 'f exists' ); 106 107 Reveal.slide( 1, 0 ); 108 assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' ); 109 assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' ); 110 111 Reveal.slide( 1, 2 ); 112 assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' ); 113 assert.strictEqual( Reveal.getIndices().v, 2, 'v 2' ); 114 115 Reveal.slide( 0, 0 ); 116 assert.strictEqual( Reveal.getIndices().h, 0, 'h 0' ); 117 assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' ); 118 }); 119 120 QUnit.test( 'Reveal.getSlide', function( assert ) { 121 assert.equal( Reveal.getSlide( 0 ), document.querySelector( '.reveal .slides>section:first-child' ), 'gets correct first slide' ); 122 assert.equal( Reveal.getSlide( 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)' ), 'no v index returns stack' ); 123 assert.equal( Reveal.getSlide( 1, 0 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(1)' ), 'v index 0 returns first vertical child' ); 124 assert.equal( Reveal.getSlide( 1, 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(2)' ), 'v index 1 returns second vertical child' ); 125 126 assert.strictEqual( Reveal.getSlide( 100 ), undefined, 'undefined when out of horizontal bounds' ); 127 assert.strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' ); 128 }); 129 130 QUnit.test( 'Reveal.getSlideBackground', function( assert ) { 131 assert.equal( Reveal.getSlideBackground( 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ), 'gets correct first background' ); 132 assert.equal( Reveal.getSlideBackground( 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2)' ), 'no v index returns stack' ); 133 assert.equal( Reveal.getSlideBackground( 1, 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(2)' ), 'v index 0 returns first vertical child' ); 134 assert.equal( Reveal.getSlideBackground( 1, 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(3)' ), 'v index 1 returns second vertical child' ); 135 136 assert.strictEqual( Reveal.getSlideBackground( 100 ), undefined, 'undefined when out of horizontal bounds' ); 137 assert.strictEqual( Reveal.getSlideBackground( 1, 100 ), undefined, 'undefined when out of vertical bounds' ); 138 }); 139 140 QUnit.test( 'Reveal.getSlideNotes', function( assert ) { 141 Reveal.slide( 0, 0 ); 142 assert.ok( Reveal.getSlideNotes() === 'speaker notes 1', 'works with <aside class="notes">' ); 143 144 Reveal.slide( 1, 0 ); 145 assert.ok( Reveal.getSlideNotes() === 'speaker notes 2', 'works with <section data-notes="">' ); 146 }); 147 148 QUnit.test( 'Reveal.getPreviousSlide/getCurrentSlide', function( assert ) { 149 Reveal.slide( 0, 0 ); 150 Reveal.slide( 1, 0 ); 151 152 var firstSlide = document.querySelector( '.reveal .slides>section:first-child' ); 153 var secondSlide = document.querySelector( '.reveal .slides>section:nth-child(2)>section' ); 154 155 assert.equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' ); 156 assert.equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' ); 157 }); 158 159 QUnit.test( 'Reveal.getProgress', function( assert ) { 160 Reveal.slide( 0, 0 ); 161 assert.strictEqual( Reveal.getProgress(), 0, 'progress is 0 on first slide' ); 162 163 var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1; 164 165 Reveal.slide( lastSlideIndex, 0 ); 166 assert.strictEqual( Reveal.getProgress(), 1, 'progress is 1 on last slide' ); 167 }); 168 169 QUnit.test( 'Reveal.getScale', function( assert ) { 170 assert.ok( typeof Reveal.getScale() === 'number', 'has scale' ); 171 }); 172 173 QUnit.test( 'Reveal.getConfig', function( assert ) { 174 assert.ok( typeof Reveal.getConfig() === 'object', 'has config' ); 175 }); 176 177 QUnit.test( 'Reveal.configure', function( assert ) { 178 assert.strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' ); 179 180 Reveal.configure({ loop: true }); 181 assert.strictEqual( Reveal.getConfig().loop, true, '"loop" has changed to true' ); 182 183 Reveal.configure({ loop: false, customTestValue: 1 }); 184 assert.strictEqual( Reveal.getConfig().customTestValue, 1, 'supports custom values' ); 185 }); 186 187 QUnit.test( 'Reveal.availableRoutes', function( assert ) { 188 Reveal.slide( 0, 0 ); 189 assert.deepEqual( Reveal.availableRoutes(), { left: false, up: false, down: false, right: true }, 'correct for first slide' ); 190 191 Reveal.slide( 1, 0 ); 192 assert.deepEqual( Reveal.availableRoutes(), { left: true, up: false, down: true, right: true }, 'correct for vertical slide' ); 193 }); 194 195 QUnit.test( 'Reveal.next', function( assert ) { 196 Reveal.slide( 0, 0 ); 197 198 // Step through vertical child slides 199 Reveal.next(); 200 assert.deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } ); 201 202 Reveal.next(); 203 assert.deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } ); 204 205 Reveal.next(); 206 assert.deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } ); 207 208 // Step through fragments 209 Reveal.next(); 210 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } ); 211 212 Reveal.next(); 213 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } ); 214 215 Reveal.next(); 216 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } ); 217 218 Reveal.next(); 219 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 } ); 220 }); 221 222 QUnit.test( 'Reveal.next at end', function( assert ) { 223 Reveal.slide( 3 ); 224 225 // We're at the end, this should have no effect 226 Reveal.next(); 227 assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } ); 228 229 Reveal.next(); 230 assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } ); 231 }); 232 233 234 // --------------------------------------------------------------- 235 // FRAGMENT TESTS 236 237 QUnit.module( 'Fragments' ); 238 239 QUnit.test( 'Sliding to fragments', function( assert ) { 240 Reveal.slide( 2, 0, -1 ); 241 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 }, 'Reveal.slide( 2, 0, -1 )' ); 242 243 Reveal.slide( 2, 0, 0 ); 244 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'Reveal.slide( 2, 0, 0 )' ); 245 246 Reveal.slide( 2, 0, 2 ); 247 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'Reveal.slide( 2, 0, 2 )' ); 248 249 Reveal.slide( 2, 0, 1 ); 250 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'Reveal.slide( 2, 0, 1 )' ); 251 }); 252 253 QUnit.test( 'Hiding all fragments', function( assert ) { 254 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' ); 255 256 Reveal.slide( 2, 0, 0 ); 257 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 1, 'one fragment visible when index is 0' ); 258 259 Reveal.slide( 2, 0, -1 ); 260 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when index is -1' ); 261 }); 262 263 QUnit.test( 'Current fragment', function( assert ) { 264 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' ); 265 var lastFragmentIndex = [].slice.call( fragmentSlide.querySelectorAll( '.fragment' ) ).pop().getAttribute( 'data-fragment-index' ); 266 267 Reveal.slide( 2, 0 ); 268 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment at index -1' ); 269 270 Reveal.slide( 2, 0, 0 ); 271 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 1, 'one current fragment at index 0' ); 272 273 Reveal.slide( 1, 0, 0 ); 274 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to previous slide' ); 275 276 Reveal.slide( 3, 0, 0 ); 277 assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to next slide' ); 278 279 Reveal.slide( 2, 1, -1 ); 280 Reveal.prev(); 281 assert.strictEqual( fragmentSlide.querySelector( '.fragment.current-fragment' ).getAttribute( 'data-fragment-index' ), lastFragmentIndex, 'last fragment is current fragment when returning from future slide' ); 282 }); 283 284 QUnit.test( 'Stepping through fragments', function( assert ) { 285 Reveal.slide( 2, 0, -1 ); 286 287 // forwards: 288 289 Reveal.next(); 290 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'next() goes to next fragment' ); 291 292 Reveal.right(); 293 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'right() goes to next fragment' ); 294 295 Reveal.down(); 296 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'down() goes to next fragment' ); 297 298 Reveal.down(); // moves to f #3 299 300 // backwards: 301 302 Reveal.prev(); 303 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'prev() goes to prev fragment' ); 304 305 Reveal.left(); 306 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'left() goes to prev fragment' ); 307 308 Reveal.up(); 309 assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'up() goes to prev fragment' ); 310 }); 311 312 QUnit.test( 'Stepping past fragments', function( assert ) { 313 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' ); 314 315 Reveal.slide( 0, 0, 0 ); 316 assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when on previous slide' ); 317 318 Reveal.slide( 3, 0, 0 ); 319 assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 3, 'all fragments visible when on future slide' ); 320 }); 321 322 QUnit.test( 'Fragment indices', function( assert ) { 323 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(2)' ); 324 325 Reveal.slide( 3, 0, 0 ); 326 assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 2, 'both fragments of same index are shown' ); 327 328 // This slide has three fragments, first one is index 0, second and third have index 1 329 Reveal.slide( 2, 2, 0 ); 330 assert.equal( Reveal.getIndices().f, 0, 'returns correct index for first fragment' ); 331 332 Reveal.slide( 2, 2, 1 ); 333 assert.equal( Reveal.getIndices().f, 1, 'returns correct index for two fragments with same index' ); 334 }); 335 336 QUnit.test( 'Index generation', function( assert ) { 337 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' ); 338 339 // These have no indices defined to start with 340 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' ); 341 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' ); 342 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '2' ); 343 }); 344 345 QUnit.test( 'Index normalization', function( assert ) { 346 var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(3)' ); 347 348 // These start out as 1-4-4 and should normalize to 0-1-1 349 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' ); 350 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' ); 351 assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' ); 352 }); 353 354 QUnit.test( 'fragmentshown event', function( assert ) { 355 assert.expect( 2 ); 356 var done = assert.async( 2 ); 357 358 var _onEvent = function( event ) { 359 assert.ok( true, 'event fired' ); 360 done(); 361 } 362 363 Reveal.addEventListener( 'fragmentshown', _onEvent ); 364 365 Reveal.slide( 2, 0 ); 366 Reveal.slide( 2, 0 ); // should do nothing 367 Reveal.slide( 2, 0, 0 ); // should do nothing 368 Reveal.next(); 369 Reveal.next(); 370 Reveal.prev(); // shouldn't fire fragmentshown 371 372 Reveal.removeEventListener( 'fragmentshown', _onEvent ); 373 }); 374 375 QUnit.test( 'fragmenthidden event', function( assert ) { 376 assert.expect( 2 ); 377 var done = assert.async( 2 ); 378 379 var _onEvent = function( event ) { 380 assert.ok( true, 'event fired' ); 381 done(); 382 } 383 384 Reveal.addEventListener( 'fragmenthidden', _onEvent ); 385 386 Reveal.slide( 2, 0, 2 ); 387 Reveal.slide( 2, 0, 2 ); // should do nothing 388 Reveal.prev(); 389 Reveal.prev(); 390 Reveal.next(); // shouldn't fire fragmenthidden 391 392 Reveal.removeEventListener( 'fragmenthidden', _onEvent ); 393 }); 394 395 396 // --------------------------------------------------------------- 397 // AUTO-SLIDE TESTS 398 399 QUnit.module( 'Auto Sliding' ); 400 401 QUnit.test( 'Reveal.isAutoSliding', function( assert ) { 402 assert.strictEqual( Reveal.isAutoSliding(), false, 'false by default' ); 403 404 Reveal.configure({ autoSlide: 10000 }); 405 assert.strictEqual( Reveal.isAutoSliding(), true, 'true after starting' ); 406 407 Reveal.configure({ autoSlide: 0 }); 408 assert.strictEqual( Reveal.isAutoSliding(), false, 'false after setting to 0' ); 409 }); 410 411 QUnit.test( 'Reveal.toggleAutoSlide', function( assert ) { 412 Reveal.configure({ autoSlide: 10000 }); 413 414 Reveal.toggleAutoSlide(); 415 assert.strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' ); 416 Reveal.toggleAutoSlide(); 417 assert.strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' ); 418 419 Reveal.configure({ autoSlide: 0 }); 420 }); 421 422 QUnit.test( 'autoslidepaused', function( assert ) { 423 assert.expect( 1 ); 424 var done = assert.async(); 425 426 var _onEvent = function( event ) { 427 assert.ok( true, 'event fired' ); 428 done(); 429 } 430 431 Reveal.addEventListener( 'autoslidepaused', _onEvent ); 432 Reveal.configure({ autoSlide: 10000 }); 433 Reveal.toggleAutoSlide(); 434 435 // cleanup 436 Reveal.configure({ autoSlide: 0 }); 437 Reveal.removeEventListener( 'autoslidepaused', _onEvent ); 438 }); 439 440 QUnit.test( 'autoslideresumed', function( assert ) { 441 assert.expect( 1 ); 442 var done = assert.async(); 443 444 var _onEvent = function( event ) { 445 assert.ok( true, 'event fired' ); 446 done(); 447 } 448 449 Reveal.addEventListener( 'autoslideresumed', _onEvent ); 450 Reveal.configure({ autoSlide: 10000 }); 451 Reveal.toggleAutoSlide(); 452 Reveal.toggleAutoSlide(); 453 454 // cleanup 455 Reveal.configure({ autoSlide: 0 }); 456 Reveal.removeEventListener( 'autoslideresumed', _onEvent ); 457 }); 458 459 460 // --------------------------------------------------------------- 461 // CONFIGURATION VALUES 462 463 QUnit.module( 'Configuration' ); 464 465 QUnit.test( 'Controls', function( assert ) { 466 var controlsElement = document.querySelector( '.reveal>.controls' ); 467 468 Reveal.configure({ controls: false }); 469 assert.equal( controlsElement.style.display, 'none', 'controls are hidden' ); 470 471 Reveal.configure({ controls: true }); 472 assert.equal( controlsElement.style.display, 'block', 'controls are visible' ); 473 }); 474 475 QUnit.test( 'Progress', function( assert ) { 476 var progressElement = document.querySelector( '.reveal>.progress' ); 477 478 Reveal.configure({ progress: false }); 479 assert.equal( progressElement.style.display, 'none', 'progress are hidden' ); 480 481 Reveal.configure({ progress: true }); 482 assert.equal( progressElement.style.display, 'block', 'progress are visible' ); 483 }); 484 485 QUnit.test( 'Loop', function( assert ) { 486 Reveal.configure({ loop: true }); 487 488 Reveal.slide( 0, 0 ); 489 490 Reveal.left(); 491 assert.notEqual( Reveal.getIndices().h, 0, 'looped from start to end' ); 492 493 Reveal.right(); 494 assert.equal( Reveal.getIndices().h, 0, 'looped from end to start' ); 495 496 Reveal.configure({ loop: false }); 497 }); 498 499 500 // --------------------------------------------------------------- 501 // LAZY-LOADING TESTS 502 503 QUnit.module( 'Lazy-Loading' ); 504 505 QUnit.test( 'img with data-src', function( assert ) { 506 assert.strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' ); 507 }); 508 509 QUnit.test( 'video with data-src', function( assert ) { 510 assert.strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' ); 511 }); 512 513 QUnit.test( 'audio with data-src', function( assert ) { 514 assert.strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' ); 515 }); 516 517 QUnit.test( 'iframe with data-src', function( assert ) { 518 Reveal.slide( 0, 0 ); 519 assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' ); 520 Reveal.slide( 2, 1 ); 521 assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 1, 'Iframe source is set' ); 522 Reveal.slide( 2, 2 ); 523 assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' ); 524 }); 525 526 QUnit.test( 'background images', function( assert ) { 527 var imageSource1 = Reveal.getSlide( 0 ).getAttribute( 'data-background-image' ); 528 var imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' ); 529 530 // check that the images are applied to the background elements 531 assert.ok( Reveal.getSlideBackground( 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' ); 532 assert.ok( Reveal.getSlideBackground( 1, 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' ); 533 }); 534 535 536 // --------------------------------------------------------------- 537 // EVENT TESTS 538 539 QUnit.module( 'Events' ); 540 541 QUnit.test( 'slidechanged', function( assert ) { 542 assert.expect( 3 ); 543 var done = assert.async( 3 ); 544 545 var _onEvent = function( event ) { 546 assert.ok( true, 'event fired' ); 547 done(); 548 } 549 550 Reveal.addEventListener( 'slidechanged', _onEvent ); 551 552 Reveal.slide( 1, 0 ); // should trigger 553 Reveal.slide( 1, 0 ); // should do nothing 554 Reveal.next(); // should trigger 555 Reveal.slide( 3, 0 ); // should trigger 556 Reveal.next(); // should do nothing 557 558 Reveal.removeEventListener( 'slidechanged', _onEvent ); 559 560 }); 561 562 QUnit.test( 'paused', function( assert ) { 563 assert.expect( 1 ); 564 var done = assert.async(); 565 566 var _onEvent = function( event ) { 567 assert.ok( true, 'event fired' ); 568 done(); 569 } 570 571 Reveal.addEventListener( 'paused', _onEvent ); 572 573 Reveal.togglePause(); 574 Reveal.togglePause(); 575 576 Reveal.removeEventListener( 'paused', _onEvent ); 577 }); 578 579 QUnit.test( 'resumed', function( assert ) { 580 assert.expect( 1 ); 581 var done = assert.async(); 582 583 var _onEvent = function( event ) { 584 assert.ok( true, 'event fired' ); 585 done(); 586 } 587 588 Reveal.addEventListener( 'resumed', _onEvent ); 589 590 Reveal.togglePause(); 591 Reveal.togglePause(); 592 593 Reveal.removeEventListener( 'resumed', _onEvent ); 594 }); 595 596 } ); 597 598 Reveal.initialize();