<!doctype html>
<html lang="en">

	<head>
		<meta charset="utf-8">

		<title>reveal.js - Test Plugins</title>

		<link rel="stylesheet" href="../dist/reveal.css">
		<link rel="stylesheet" href="../node_modules/qunit/qunit/qunit.css">
		<script src="../node_modules/qunit/qunit/qunit.js"></script>
	</head>

	<body style="overflow: auto;">

		<div id="qunit"></div>
		<div id="qunit-fixture"></div>

		<div class="reveal" style="display: none;">

			<div class="slides">

				<section>Slide content</section>

			</div>

		</div>

		<script src="../dist/reveal.js"></script>
		<script>

			QUnit.module( 'Plugins' );

			var initCounter = { PluginB: 0, PluginC: 0, PluginD: 0 };

			// Plugin with no init method
			var PluginA = { id: 'PluginA' };

			// Plugin with init method
			var PluginB = { id: 'PluginB', init: function() {
				initCounter['PluginB'] += 1;
			} };

			// Async plugin with init method
			var PluginC = { id: 'PluginC', init: function() {
				return new Promise(function( resolve ) {
					setTimeout( () => {
						initCounter['PluginC'] += 1;
						resolve();
					}, 1000 );
				});
			} };

			// Plugin initialized after reveal.js is ready
			var PluginD = { id: 'PluginD', init: function() {
				initCounter['PluginD'] += 1;
			} };

			var PluginE = { id: 'PluginE' };

			var reveal = new Reveal( document.querySelector( '.reveal' ), {
				plugins: [ PluginA ]
			} );

			reveal.registerPlugin( PluginB );
			reveal.registerPlugin( PluginC );

			reveal.initialize();

			QUnit.test( 'Can initialize synchronously', function( assert ) {
				assert.strictEqual( initCounter['PluginB'], 1 );

				reveal.registerPlugin( PluginB );

				assert.strictEqual( initCounter['PluginB'], 1, 'prevents duplicate registration' );
			});

			QUnit.test( 'Can initialize asynchronously', function( assert ) {
				assert.expect( 3 );
				var done = assert.async( 2 );

				assert.strictEqual( initCounter['PluginC'], 0, 'async plugin not immediately initialized' );

				reveal.on( 'ready', function() {
					assert.strictEqual( initCounter['PluginC'], 1, 'finsihed initializing when reveal.js dispatches "ready"' );
					done();

					reveal.registerPlugin( PluginD );
					assert.strictEqual( initCounter['PluginD'], 1, 'plugin registered after reveal.js is ready still initiailizes' );
					done();
				});
			} );

			QUnit.test( 'Can check if plugin is registered', function( assert ) {
				assert.strictEqual( reveal.hasPlugin( 'PluginA' ), true );
				assert.strictEqual( reveal.hasPlugin( 'PluginE' ), false );
				reveal.registerPlugin( PluginE );
				assert.strictEqual( reveal.hasPlugin( 'PluginE' ), true );
			} );

			QUnit.test( 'Can retrieve plugin instance', function( assert ) {
				assert.strictEqual( reveal.getPlugin( 'PluginB' ), PluginB );
			} );
		</script>

	</body>
</html>
