text: (function (window) {
    var Muuri = window.Muuri;
  
    QUnit.module('Grid events');
  
    QUnit.test(
      'layoutEnd: should be triggered after grid.layout() (after the items have positioned)',
      function (assert) {
        assert.expect(3);
  
        var done = assert.async();
        var container = utils.createGridElements();
        var grid = new Muuri(container);
        var isAnyItemPositioning = false;
        var expectedItems = [];
        var teardown = function () {
          grid.destroy();
          container.parentNode.removeChild(container);
          done();
        };
  
        grid.on('layoutEnd', function (items) {
          items.forEach(function (item) {
            if (item.isPositioning()) {
              isAnyItemPositioning = true;
            }
          });
          assert.strictEqual(arguments.length, 1, 'callback: should have a single argument');
          assert.deepEqual(
            utils.sortedIdList(items),
            utils.sortedIdList(expectedItems),
            'callback: first argument should be an array of items that were active when the layout was triggered'
          );
          assert.strictEqual(
            isAnyItemPositioning,
            false,
            'callback: none of the items in the first argument should be in positioning state'
          );
          teardown();
        });
        grid.hide(grid.getItems(0), { instant: true, layout: false, syncWithLayout: false });
        expectedItems = utils.getActiveItems(grid);
        grid.move(1, -1);
      }
    );
  })(this);
  