<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />

    <title>reveal.js - Test Async Dependencies</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>
      var externalScriptSequence = "";
      var scriptCount = 0;

      QUnit.config.testTimeout = 30000;
      QUnit.config.autostart = false;
      QUnit.module("Async Dependencies");

      QUnit.test("Async scripts are loaded", function (assert) {
        assert.expect(5);
        var done = assert.async(5);

        function callback(event) {
          if (externalScriptSequence.length === 1) {
            assert.ok(
              externalScriptSequence === "A",
              "first callback was sync script"
            );
            done();
          } else {
            assert.ok(true, "async script loaded");
            done();
          }

          if (externalScriptSequence.length === 4) {
            assert.ok(
              externalScriptSequence.indexOf("A") !== -1 &&
                externalScriptSequence.indexOf("B") !== -1 &&
                externalScriptSequence.indexOf("C") !== -1 &&
                externalScriptSequence.indexOf("D") !== -1,
              "four unique scripts were loaded"
            );
            done();
          }

          scriptCount++;
        }

        Reveal.initialize({
          dependencies: [
            {
              src: "assets/external-script-a.js",
              async: false,
              callback: callback,
            },
            {
              src: "assets/external-script-b.js",
              async: true,
              callback: callback,
            },
            {
              src: "assets/external-script-c.js",
              async: true,
              callback: callback,
            },
            {
              src: "assets/external-script-d.js",
              async: true,
              callback: callback,
            },
          ],
        });
      });

      QUnit.start();
    </script>
  </body>
</html>