text: "use strict";
  
  jest.autoMockOff();
  
  describe('AppDispatcher', function() {
    var AppDispatcher;
  
    beforeEach(function() {
      AppDispatcher = require('../AppDispatcher.js');
    });
  
    it('sends actions to subscribers', function() {
      var listener = jest.genMockFunction();
      AppDispatcher.register(listener);
  
      var payload = {};
      AppDispatcher.dispatch(payload);
      expect(listener.mock.calls.length).toBe(1);
      expect(listener.mock.calls[0][0]).toBe(payload);
    });
  
    it('waits with chained dependencies properly', function() {
      var payload = {};
  
      var listener1Done = false;
      var listener1 = function(pl) {
        AppDispatcher.waitFor([index2, index4]);
        // Second, third, and fourth listeners should have now been called
        expect(listener2Done).toBe(true);
        expect(listener3Done).toBe(true);
        expect(listener4Done).toBe(true);
        listener1Done = true;
      };
      var index1 = AppDispatcher.register(listener1);
  
      var listener2Done = false;
      var listener2 = function(pl) {
        AppDispatcher.waitFor([index3]);
        expect(listener3Done).toBe(true);
        listener2Done = true;
      };
      var index2 = AppDispatcher.register(listener2);
  
      var listener3Done = false;
      var listener3 = function(pl) {
        listener3Done = true;
      };
      var index3 = AppDispatcher.register(listener3);
  
      var listener4Done = false;
      var listener4 = function(pl) {
        AppDispatcher.waitFor([index3]);
        expect(listener3Done).toBe(true);
        listener4Done = true;
      };
      var index4 = AppDispatcher.register(listener4);
  
      runs(function() {
        AppDispatcher.dispatch(payload);
      });
  
      waitsFor(function() {
        return listener1Done;
      }, "Not all subscribers were properly called", 500);
  
      runs(function() {
        expect(listener1Done).toBe(true);
        expect(listener2Done).toBe(true);
        expect(listener3Done).toBe(true);
      });
    });
  });