describe('Interdimensional', function() {
  it('should be', function() {
    expect(Interdimensional).toBeDefined();
  });

  describe('#charge', function() {
    describe('when some necessary features are unsupported by a browser', function() {
      var isFailed = false;

      beforeEach(function(done) {
        document.addEventListener('interdimensional:fail', function handleFail() {
          isFailed = true;
          document.removeEventListener('interdimensional:fail', handleFail, false);

          done();
        }, false);

        Interdimensional.charge();
      });

      afterEach(function() {
        Interdimensional.discharge();
      });

      it('should be failed', function() {
        expect(isFailed).toBe(true);
      });
    });

    describe('when all necessary features are supported by a browser', function() {
      var isCharged = false;

      beforeEach(function(done) {
        Emulator.emulate();

        document.addEventListener('interdimensional:charge', function handleCharge() {
          isCharged = true;
          document.removeEventListener('interdimensional:charge', handleCharge, false);

          done();
        }, false);

        Interdimensional.charge();
      });

      afterEach(function() {
        Emulator.restore();
        Interdimensional.discharge();
      });

      it('should be charged', function() {
        expect(isCharged).toBe(true);
        expect(document.querySelector('.interdimensional-control')).not.toBeNull();
      });
    });
  });

  describe('#discharge', function() {
    var isDischarged = false;

    beforeEach(function(done) {
      Emulator.emulate();
      Interdimensional.charge();

      document.addEventListener('interdimensional:charge', function handleCharge() {
        Interdimensional.discharge();
        document.removeEventListener('interdimensional:charge', handleCharge, false);
      }, false);

      document.addEventListener('interdimensional:discharge', function handleDischarge() {
        isDischarged = true;
        document.removeEventListener('interdimensional:discharge', handleDischarge, false);

        done();
      }, false);
    });

    afterEach(function() {
      Emulator.restore();
    });

    it('should be discharged', function() {
      expect(isDischarged).toBe(true);
      expect(document.querySelector('.interdimensional-control')).toBeNull();
    });
  });
});

@@ -1510,32 +1510,956 @@
 %0A    %7D);%0A  %7D);%0A%0A
+  describe('#jump', function() %7B%0A    beforeEach(function(done) %7B%0A      Emulator.emulate();%0A%0A      document.addEventListener('interdimensional:charge', function handleCharge() %7B%0A        document.removeEventListener('interdimensional:charge', handleCharge, false);%0A%0A        done();%0A      %7D, false);%0A%0A      Interdimensional.charge();%0A    %7D);%0A%0A    afterEach(function() %7B%0A      Emulator.restore();%0A      Interdimensional.discharge();%0A    %7D);%0A%0A    it('should jump', function(done) %7B%0A      document.addEventListener('interdimensional:jump', function handleJump() %7B%0A        document.removeEventListener('interdimensional:jump', handleJump, false);%0A%0A        expect(%0A          document%0A            .querySelector('.interdimensional-control')%0A              .classList%0A                .contains('interdimensional-control-is-active')%0A        ).toBe(true);%0A%0A        done();%0A      %7D, false);%0A%0A      Interdimensional.jump();%0A    %7D);%0A  %7D);%0A%0A
   describe('#dis

Add tests for the #jump