github.com/mweagle/Sparta@v1.15.0/docs_source/static/presentations/reveal.js-3.9.2/test/test.js (about)

     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( 'data-fragment is set on slide <section>', function( assert ) {
   254  		Reveal.slide( 2, 0, -1 );
   255  		assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '-1' );
   256  
   257  		Reveal.slide( 2, 0, 2 );
   258  		assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '2' );
   259  
   260  		Reveal.slide( 2, 0, 0 );
   261  		assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '0' );
   262  
   263  		var fragmentSlide = Reveal.getCurrentSlide();
   264  
   265  		Reveal.slide( 3, 0 );
   266  		assert.deepEqual( fragmentSlide.getAttribute( 'data-fragment' ), '0', 'data-fragment persists when jumping to another slide' );
   267  	});
   268  
   269  	QUnit.test( 'Hiding all fragments', function( assert ) {
   270  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
   271  
   272  		Reveal.slide( 2, 0, 0 );
   273  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 1, 'one fragment visible when index is 0' );
   274  
   275  		Reveal.slide( 2, 0, -1 );
   276  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when index is -1' );
   277  	});
   278  
   279  	QUnit.test( 'Current fragment', function( assert ) {
   280  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
   281  		var lastFragmentIndex = [].slice.call( fragmentSlide.querySelectorAll( '.fragment' ) ).pop().getAttribute( 'data-fragment-index' );
   282  
   283  		Reveal.slide( 2, 0 );
   284  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment at index -1' );
   285  
   286  		Reveal.slide( 2, 0, 0 );
   287  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 1, 'one current fragment at index 0' );
   288  
   289  		Reveal.slide( 1, 0, 0 );
   290  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to previous slide' );
   291  
   292  		Reveal.slide( 3, 0, 0 );
   293  		assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to next slide' );
   294  
   295  		Reveal.slide( 2, 1, -1 );
   296  		Reveal.prev();
   297  		assert.strictEqual( fragmentSlide.querySelector( '.fragment.current-fragment' ).getAttribute( 'data-fragment-index' ), lastFragmentIndex, 'last fragment is current fragment when returning from future slide' );
   298  	});
   299  
   300  	QUnit.test( 'Stepping through fragments', function( assert ) {
   301  		Reveal.slide( 2, 0, -1 );
   302  
   303  		// forwards:
   304  
   305  		Reveal.next();
   306  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'next() goes to next fragment' );
   307  
   308  		Reveal.right();
   309  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'right() goes to next fragment' );
   310  
   311  		Reveal.down();
   312  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'down() goes to next fragment' );
   313  
   314  		Reveal.down(); // moves to f #3
   315  
   316  		// backwards:
   317  
   318  		Reveal.prev();
   319  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'prev() goes to prev fragment' );
   320  
   321  		Reveal.left();
   322  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'left() goes to prev fragment' );
   323  
   324  		Reveal.up();
   325  		assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'up() goes to prev fragment' );
   326  	});
   327  
   328  	QUnit.test( 'Stepping past fragments', function( assert ) {
   329  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
   330  
   331  		Reveal.slide( 0, 0, 0 );
   332  		assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when on previous slide' );
   333  
   334  		Reveal.slide( 3, 0, 0 );
   335  		assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 3, 'all fragments visible when on future slide' );
   336  	});
   337  
   338  	QUnit.test( 'Fragment indices', function( assert ) {
   339  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(2)' );
   340  
   341  		Reveal.slide( 3, 0, 0 );
   342  		assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 2, 'both fragments of same index are shown' );
   343  
   344  		// This slide has three fragments, first one is index 0, second and third have index 1
   345  		Reveal.slide( 2, 2, 0 );
   346  		assert.equal( Reveal.getIndices().f, 0, 'returns correct index for first fragment' );
   347  
   348  		Reveal.slide( 2, 2, 1 );
   349  		assert.equal( Reveal.getIndices().f, 1, 'returns correct index for two fragments with same index' );
   350  	});
   351  
   352  	QUnit.test( 'Index generation', function( assert ) {
   353  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
   354  
   355  		// These have no indices defined to start with
   356  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
   357  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
   358  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '2' );
   359  	});
   360  
   361  	QUnit.test( 'Index normalization', function( assert ) {
   362  		var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(3)' );
   363  
   364  		// These start out as 1-4-4 and should normalize to 0-1-1
   365  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
   366  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
   367  		assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' );
   368  	});
   369  
   370  	QUnit.test( 'fragmentshown event', function( assert ) {
   371  		assert.expect( 2 );
   372  		var done = assert.async( 2 );
   373  
   374  		var _onEvent = function( event ) {
   375  			assert.ok( true, 'event fired' );
   376  			done();
   377  		}
   378  
   379  		Reveal.addEventListener( 'fragmentshown', _onEvent );
   380  
   381  		Reveal.slide( 2, 0 );
   382  		Reveal.slide( 2, 0 ); // should do nothing
   383  		Reveal.slide( 2, 0, 0 ); // should do nothing
   384  		Reveal.next();
   385  		Reveal.next();
   386  		Reveal.prev(); // shouldn't fire fragmentshown
   387  
   388  		Reveal.removeEventListener( 'fragmentshown', _onEvent );
   389  	});
   390  
   391  	QUnit.test( 'fragmenthidden event', function( assert ) {
   392  		assert.expect( 2 );
   393  		var done = assert.async( 2 );
   394  
   395  		var _onEvent = function( event ) {
   396  			assert.ok( true, 'event fired' );
   397  			done();
   398  		}
   399  
   400  		Reveal.addEventListener( 'fragmenthidden', _onEvent );
   401  
   402  		Reveal.slide( 2, 0, 2 );
   403  		Reveal.slide( 2, 0, 2 ); // should do nothing
   404  		Reveal.prev();
   405  		Reveal.prev();
   406  		Reveal.next(); // shouldn't fire fragmenthidden
   407  
   408  		Reveal.removeEventListener( 'fragmenthidden', _onEvent );
   409  	});
   410  
   411  
   412  	// ---------------------------------------------------------------
   413  	// AUTO-SLIDE TESTS
   414  
   415  	QUnit.module( 'Auto Sliding' );
   416  
   417  	QUnit.test( 'Reveal.isAutoSliding', function( assert ) {
   418  		assert.strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
   419  
   420  		Reveal.configure({ autoSlide: 10000 });
   421  		assert.strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
   422  
   423  		Reveal.configure({ autoSlide: 0 });
   424  		assert.strictEqual( Reveal.isAutoSliding(), false, 'false after setting to 0' );
   425  	});
   426  
   427  	QUnit.test( 'Reveal.toggleAutoSlide', function( assert ) {
   428  		Reveal.configure({ autoSlide: 10000 });
   429  
   430  		Reveal.toggleAutoSlide();
   431  		assert.strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
   432  		Reveal.toggleAutoSlide();
   433  		assert.strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
   434  
   435  		Reveal.configure({ autoSlide: 0 });
   436  	});
   437  
   438  	QUnit.test( 'autoslidepaused', function( assert ) {
   439  		assert.expect( 1 );
   440  		var done = assert.async();
   441  
   442  		var _onEvent = function( event ) {
   443  			assert.ok( true, 'event fired' );
   444  			done();
   445  		}
   446  
   447  		Reveal.addEventListener( 'autoslidepaused', _onEvent );
   448  		Reveal.configure({ autoSlide: 10000 });
   449  		Reveal.toggleAutoSlide();
   450  
   451  		// cleanup
   452  		Reveal.configure({ autoSlide: 0 });
   453  		Reveal.removeEventListener( 'autoslidepaused', _onEvent );
   454  	});
   455  
   456  	QUnit.test( 'autoslideresumed', function( assert ) {
   457  		assert.expect( 1 );
   458  		var done = assert.async();
   459  
   460  		var _onEvent = function( event ) {
   461  			assert.ok( true, 'event fired' );
   462  			done();
   463  		}
   464  
   465  		Reveal.addEventListener( 'autoslideresumed', _onEvent );
   466  		Reveal.configure({ autoSlide: 10000 });
   467  		Reveal.toggleAutoSlide();
   468  		Reveal.toggleAutoSlide();
   469  
   470  		// cleanup
   471  		Reveal.configure({ autoSlide: 0 });
   472  		Reveal.removeEventListener( 'autoslideresumed', _onEvent );
   473  	});
   474  
   475  
   476  	// ---------------------------------------------------------------
   477  	// CONFIGURATION VALUES
   478  
   479  	QUnit.module( 'Configuration' );
   480  
   481  	QUnit.test( 'Controls', function( assert ) {
   482  		var controlsElement = document.querySelector( '.reveal>.controls' );
   483  
   484  		Reveal.configure({ controls: false });
   485  		assert.equal( controlsElement.style.display, 'none', 'controls are hidden' );
   486  
   487  		Reveal.configure({ controls: true });
   488  		assert.equal( controlsElement.style.display, 'block', 'controls are visible' );
   489  	});
   490  
   491  	QUnit.test( 'Progress', function( assert ) {
   492  		var progressElement = document.querySelector( '.reveal>.progress' );
   493  
   494  		Reveal.configure({ progress: false });
   495  		assert.equal( progressElement.style.display, 'none', 'progress are hidden' );
   496  
   497  		Reveal.configure({ progress: true });
   498  		assert.equal( progressElement.style.display, 'block', 'progress are visible' );
   499  	});
   500  
   501  	QUnit.test( 'Loop', function( assert ) {
   502  		Reveal.configure({ loop: true });
   503  
   504  		Reveal.slide( 0, 0 );
   505  
   506  		Reveal.left();
   507  		assert.notEqual( Reveal.getIndices().h, 0, 'looped from start to end' );
   508  
   509  		Reveal.right();
   510  		assert.equal( Reveal.getIndices().h, 0, 'looped from end to start' );
   511  
   512  		Reveal.configure({ loop: false });
   513  	});
   514  
   515  
   516  	// ---------------------------------------------------------------
   517  	// LAZY-LOADING TESTS
   518  
   519  	QUnit.module( 'Lazy-Loading' );
   520  
   521  	QUnit.test( 'img with data-src', function( assert ) {
   522  		assert.strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
   523  	});
   524  
   525  	QUnit.test( 'video with data-src', function( assert ) {
   526  		assert.strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
   527  	});
   528  
   529  	QUnit.test( 'audio with data-src', function( assert ) {
   530  		assert.strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' );
   531  	});
   532  
   533  	QUnit.test( 'iframe with data-src', function( assert ) {
   534  		Reveal.slide( 0, 0 );
   535  		assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
   536  		Reveal.slide( 2, 1 );
   537  		assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 1, 'Iframe source is set' );
   538  		Reveal.slide( 2, 2 );
   539  		assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
   540  	});
   541  
   542  	QUnit.test( 'background images', function( assert ) {
   543  		var imageSource1 = Reveal.getSlide( 0 ).getAttribute( 'data-background-image' );
   544  		var imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' );
   545  
   546  		// check that the images are applied to the background elements
   547  		assert.ok( Reveal.getSlideBackground( 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' );
   548  		assert.ok( Reveal.getSlideBackground( 1, 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' );
   549  	});
   550  
   551  
   552  	// ---------------------------------------------------------------
   553  	// EVENT TESTS
   554  
   555  	QUnit.module( 'Events' );
   556  
   557  	QUnit.test( 'slidechanged', function( assert ) {
   558  		assert.expect( 3 );
   559  		var done = assert.async( 3 );
   560  
   561  		var _onEvent = function( event ) {
   562  			assert.ok( true, 'event fired' );
   563  			done();
   564  		}
   565  
   566  		Reveal.addEventListener( 'slidechanged', _onEvent );
   567  
   568  		Reveal.slide( 1, 0 ); // should trigger
   569  		Reveal.slide( 1, 0 ); // should do nothing
   570  		Reveal.next(); // should trigger
   571  		Reveal.slide( 3, 0 ); // should trigger
   572  		Reveal.next(); // should do nothing
   573  
   574  		Reveal.removeEventListener( 'slidechanged', _onEvent );
   575  
   576  	});
   577  
   578  	QUnit.test( 'paused', function( assert ) {
   579  		assert.expect( 1 );
   580  		var done = assert.async();
   581  
   582  		var _onEvent = function( event ) {
   583  			assert.ok( true, 'event fired' );
   584  			done();
   585  		}
   586  
   587  		Reveal.addEventListener( 'paused', _onEvent );
   588  
   589  		Reveal.togglePause();
   590  		Reveal.togglePause();
   591  
   592  		Reveal.removeEventListener( 'paused', _onEvent );
   593  	});
   594  
   595  	QUnit.test( 'resumed', function( assert ) {
   596  		assert.expect( 1 );
   597  		var done = assert.async();
   598  
   599  		var _onEvent = function( event ) {
   600  			assert.ok( true, 'event fired' );
   601  			done();
   602  		}
   603  
   604  		Reveal.addEventListener( 'resumed', _onEvent );
   605  
   606  		Reveal.togglePause();
   607  		Reveal.togglePause();
   608  
   609  		Reveal.removeEventListener( 'resumed', _onEvent );
   610  	});
   611  
   612  } );
   613  
   614  Reveal.initialize();