it("should handle named chunks", function (done) {
  var sync = false;
  require.ensure(
    [],
    function (require) {
      require("./empty?a");
      require("./empty?b");
      testLoad();
      sync = true;
      process.nextTick(function () {
        sync = false;
      });
    },
    "named-chunk"
  );
  function testLoad() {
    require.ensure(
      [],
      function (require) {
        require("./empty?c");
        require("./empty?d");
        expect(sync).toBeTruthy();
        done();
      },
      "named-chunk"
    );
  }
});

it("should handle empty named chunks", function (done) {
  var sync = false;
  require.ensure(
    [],
    function (require) {
      expect(sync).toBeTruthy();
    },
    "empty-named-chunk"
  );
  require.ensure(
    [],
    function (require) {
      expect(sync).toBeTruthy();
      done();
    },
    "empty-named-chunk"
  );
  sync = true;
  setImmediate(function () {
    sync = false;
  });
});

it("should handle named chunks when there is an error callback", function (done) {
  var sync = false;
  require.ensure(
    [],
    function (require) {
      require("./empty?e");
      require("./empty?f");
      testLoad();
      sync = true;
      process.nextTick(function () {
        sync = false;
      });
    },
    function (error) {},
    "named-chunk-for-error-callback"
  );
  function testLoad() {
    require.ensure(
      [],
      function (require) {
        require("./empty?g");
        require("./empty?h");
        expect(sync).toBeTruthy();
        done();
      },
      function (error) {},
      "named-chunk-for-error-callback"
    );
  }
});

it("should handle empty named chunks when there is an error callback", function (done) {
  var sync = false;
  require.ensure(
    [],
    function (require) {
      expect(sync).toBeTruthy();
    },
    function (error) {},
    "empty-named-chunk-for-error-callback"
  );
  require.ensure(
    [],
    function (require) {
      expect(sync).toBeTruthy();
      done();
    },
    function (error) {},
    "empty-named-chunk-for-error-callback"
  );
  sync = true;
  setImmediate(function () {
    sync = false;
  });
});

it("should be able to use named chunks in import()", function (done) {
  var sync = false;
  import(
    "./empty?import1-in-chunk1" /* webpackChunkName: "import-named-chunk-1" */
  ).then(function (result) {
    var i = 0;
    import(
      "./empty?import2-in-chunk1" /* webpackChunkName: "import-named-chunk-1" */
    )
      .then(function (result) {
        expect(sync).toBeTruthy();
        if (i++ > 0) done();
      })
      .catch(function (err) {
        done(err);
      });
    import(
      "./empty?import3-in-chunk2" /* webpackChunkName: "import-named-chunk-2" */
    )
      .then(function (result) {
        expect(sync).toBeFalsy();
        if (i++ > 0) done();
      })
      .catch(function (err) {
        done(err);
      });
    sync = true;
    Promise.resolve()
      .then(function () {})
      .then(function () {})
      .then(function () {
        sync = false;
      });
  });
});

it("should be able to use named chunk in context import()", function (done) {
  // cspell:ignore mpty
  var mpty = "mpty";
  var sync = false;
  import("./e" + mpty + "2" /* webpackChunkName: "context-named-chunk" */).then(
    function (result) {
      var i = 0;
      import("./e" + mpty + "3" /* webpackChunkName: "context-named-chunk" */)
        .then(function (result) {
          expect(sync).toBeTruthy();
          if (i++ > 0) done();
        })
        .catch(function (err) {
          done(err);
        });
      import("./e" + mpty + "4" /* webpackChunkName: "context-named-chunk-2" */)
        .then(function (result) {
          expect(sync).toBeFalsy();
          if (i++ > 0) done();
        })
        .catch(function (err) {
          done(err);
        });
      sync = true;
      Promise.resolve()
        .then(function () {})
        .then(function () {})
        .then(function () {
          sync = false;
        });
    }
  );
});
