Beispiel #1
0
QUnit.test('onError with target and action', function(assert) {
  assert.expect(3);

  let target = {};

  let bb = new Backburner(['errors'], {
    onErrorTarget: target,
    onErrorMethod: 'onerror'
  });

  bb.run(() => assert.ok(true));

  target['onerror'] = function(error) {
    assert.equal('QUnit.test error', error.message);
  };

  bb.run(() => { throw new Error('QUnit.test error'); });

  target['onerror'] = function() { };

  bb.run(() => { throw new Error('QUnit.test error'); });

  target['onerror'] = function(error) {
    assert.equal('QUnit.test error', error.message);
  };

  bb.run(() => { throw new Error('QUnit.test error'); });
});
Beispiel #2
0
QUnit.test('onError set after start', function(assert) {
  assert.expect(2);

  let bb = new Backburner(['errors']);

  bb.run(() => assert.ok(true));

  bb.options.onError = function(error) {
    assert.equal('QUnit.test error', error.message);
  };

  bb.run(() => { throw new Error('QUnit.test error'); });
});
Beispiel #3
0
QUnit.test('when passed same function twice with different target and different arguments', function(assert) {
  assert.expect(7);

  let bb = new Backburner(['one']);
  let i = 0;

  function deferMethod(a, b) {
    i++;
    if (i === 1) {
      assert.equal(a, 1, 'First argument set during first call');
    } else {
      assert.equal(a, 3, 'First argument set during second call');
    }
    assert.equal(b, 2, 'Second argument remains same');
    assert.equal(this['first'], 1, 'the target property was set');
  }

  let argObj = {first: 1};

  bb.run(() => {
    bb.scheduleOnce('one', {first: 1}, deferMethod, 1, 2);
    bb.scheduleOnce('one', {first: 1}, deferMethod, 3, 2);
  });

  assert.equal(i, 2, 'function was called twice');
});
Beispiel #4
0
QUnit.test('end event should fire before onEnd', function(assert) {
  assert.expect(3);
  let callNumber = 0;

  let bb = new Backburner(['one', 'two'], {
    onEnd() {
      assert.equal(callNumber, 1);
    }
  });

  bb.on('end', () => callNumber++);

  function funcOne() {
    assert.equal(callNumber, 0);
  }

  function funcTwo() {
    assert.equal(callNumber, 0);
  }

  bb.run(() => {
    bb.schedule('one', null, funcOne);
    bb.schedule('two', null, funcTwo);
  });
});
Beispiel #5
0
  bb.run(() => {
    assert.equal(step++, 0);

    bb.run(() => {
      assert.equal(step++, 1);
    });
  });
Beispiel #6
0
QUnit.test('cancel always returns boolean', function(assert) {
  let bb = new Backburner(['one']);

  bb.run(function() {
    let timer1 = bb.schedule('one', null, function() {});
    assert.equal(bb.cancel(timer1), true);
    assert.equal(bb.cancel(timer1), false);
    assert.equal(bb.cancel(timer1), false);

    let timer2 = bb.later(function() {}, 10);
    assert.equal(bb.cancel(timer2), true);
    assert.equal(bb.cancel(timer2), false);
    assert.equal(bb.cancel(timer2), false);

    let timer3 = bb.debounce(function() {}, 10);
    assert.equal(bb.cancel(timer3), true);
    assert.equal(bb.cancel(timer3), false);
    assert.equal(bb.cancel(timer3), false);

    assert.equal(bb.cancel(undefined), false);
    assert.equal(bb.cancel(null), false);
    assert.equal(bb.cancel({}), false);
    assert.equal(bb.cancel([]), false);
    assert.equal(bb.cancel(42), false);
    assert.equal(bb.cancel('42'), false);
  });
});
Beispiel #7
0
QUnit.test('with target', function(assert) {
  assert.expect(3);

  let obj = {
    ___FOO___: 1
  };

  let bb = new Backburner(['action']);

  let wasCalled = 0;

  function fn() {
    wasCalled++;
  }

  bb.run(() => {
    let timer = bb.scheduleOnce('action', obj, fn);

    assert.equal(wasCalled, 0);

    bb.cancel(timer);
    bb.scheduleOnce('action', obj, fn);

    assert.equal(wasCalled, 0);
  });

  assert.equal(wasCalled, 1);
});
Beispiel #8
0
QUnit.test('when passed same function with same target after already triggering in current loop', function(assert) {
  assert.expect(5);

  let argObj = {first: 1};
  let bb = new Backburner(['one', 'two'], { });

  let i = 0;

  function deferMethod(a) {
    i++;
    assert.equal(a, i, 'Correct argument is set');
    assert.equal(this['first'], 1, 'the target property was set');
  }

  function scheduleMethod() {
    bb.scheduleOnce('one', argObj, deferMethod, 2);
  }

  bb.run(() => {
    bb.scheduleOnce('one', argObj, deferMethod, 1);
    bb.scheduleOnce('two', argObj, scheduleMethod);
  });

  assert.equal(i, 2, 'function was called twice');
});
Beispiel #9
0
QUnit.test('onBegin and onEnd are called and passed the correct parameters', function(assert) {
  assert.expect(2);

  let befores: Array<any | null | undefined> = [];
  let afters: Array<any | null | undefined> = [];
  let expectedBefores: Array<any | null | undefined> = [];
  let expectedAfters: Array<any | null | undefined> = [];
  let outer: any;
  let inner: any;

  let bb = new Backburner(['one'], {
    onBegin: function(current, previous) {
      befores.push(current);
      befores.push(previous);
    },
    onEnd: function(current, next) {
      afters.push(current);
      afters.push(next);
    }
  });

  bb.run(function() {
    outer = bb.currentInstance;
    bb.run(function() {
      inner = bb.currentInstance;
    });
  });

  expectedBefores = [outer, null, inner, outer];
  expectedAfters = [inner, outer, outer, null];

  assert.deepEqual(befores, expectedBefores, 'before callbacks successful');
  assert.deepEqual(afters, expectedAfters, 'after callback successful');
});
Beispiel #10
0
QUnit.test('Queue#flush should be recursive if new items are added', function(assert) {
  assert.expect(2);

  let bb = new Backburner(['one']);
  let count = 0;

  bb.run(function() {
    function increment() {
      if (++count < 3) {
        bb.schedule('one', increment);
      }

      if (count === 3) {

        bb.schedule('one', increment);
      }
    }

    increment();
    assert.equal(count, 1, 'should not have run yet');

    let currentInstance = bb.currentInstance;
    if (currentInstance) {
      currentInstance.queues.one.flush();
    }
    assert.equal(count, 4, 'should have run all scheduled methods, even ones added during flush');
  });

});