diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test.clear.js | 13 | ||||
-rw-r--r-- | test/test.defer.js | 80 | ||||
-rw-r--r-- | test/test.set.js | 36 |
3 files changed, 105 insertions, 24 deletions
diff --git a/test/test.clear.js b/test/test.clear.js index 5194830..bea8031 100644 --- a/test/test.clear.js +++ b/test/test.clear.js @@ -59,8 +59,8 @@ suite('clear', function(){ test('Should not run "defer" job if cleared', function(done) { var fastdom = new FastDom(); - var write = sinon.spy(); - var id = fastdom.defer(3, write); + var callback = sinon.spy(); + var id = fastdom.defer(3, callback); fastdom.clear(id); @@ -68,7 +68,7 @@ suite('clear', function(){ raf(function() { raf(function() { raf(function() { - assert(!write.called); + assert(!callback.called); done(); }); }); @@ -79,7 +79,7 @@ suite('clear', function(){ test('Should remove reference to the job if cleared', function(done) { var fastdom = new FastDom(); var write = sinon.spy(); - var id = fastdom.defer(2, write); + var id = fastdom.write(2, write); fastdom.clear(id); @@ -87,11 +87,10 @@ suite('clear', function(){ raf(function() { raf(function() { assert(!write.called); - assert(!fastdom.jobs[id]); + assert(!fastdom.queue.hash[id]); done(); }); }); }); }); - -}); +});
\ No newline at end of file diff --git a/test/test.defer.js b/test/test.defer.js index 3e56a94..114287f 100644 --- a/test/test.defer.js +++ b/test/test.defer.js @@ -5,18 +5,15 @@ suite('defer', function(){ var fastdom = new FastDom(); var job = sinon.spy(); - fastdom.defer(4, job); + fastdom.defer(3, job); raf(function() { assert(!job.called); raf(function() { assert(!job.called); raf(function() { - assert(!job.called); - raf(function() { - assert(job.called); - done(); - }); + assert(job.called); + done(); }); }); }); @@ -33,18 +30,81 @@ suite('defer', function(){ }, ctx); }); - test('Should remove the reference to the job once run', function(done) { + test('Should run work at next frame if frames argument not supplied.', function(done) { var fastdom = new FastDom(); - var callback = sinon.spy(); - var id = fastdom.defer(2, callback); + var callback1 = sinon.spy(); + var callback2 = sinon.spy(); + + fastdom.defer(callback1); raf(function() { + assert(callback1.called); + done(); + }); + }); + + test('Should run each job on a different frame.', function(done) { + var fastdom = new FastDom(); + var callback1 = sinon.spy(); + var callback2 = sinon.spy(); + var callback3 = sinon.spy(); + + fastdom.defer(callback1); + fastdom.defer(callback2); + fastdom.defer(callback3); + + raf(function() { + assert(callback1.called); + assert(!callback2.called); + assert(!callback3.called); raf(function() { + assert(callback2.called); + assert(!callback3.called); raf(function() { - assert(!fastdom.jobs[id]); + assert(callback3.called); done(); }); }); }); }); + + test('Should run fill empty frames before later work is run.', function(done) { + var fastdom = new FastDom(); + var callback1 = sinon.spy(); + var callback2 = sinon.spy(); + var callback3 = sinon.spy(); + var callback4 = sinon.spy(); + + // Frame 3 + fastdom.defer(3, callback3); + + // Frame 1 + fastdom.defer(callback1); + + // Frame 2 + fastdom.defer(callback2); + + // Frame 4 + fastdom.defer(callback4); + + raf(function() { + assert(callback1.called); + assert(!callback2.called); + assert(!callback3.called); + assert(!callback4.called); + raf(function() { + assert(callback2.called); + assert(!callback3.called); + assert(!callback4.called); + raf(function() { + assert(callback3.called); + assert(!callback4.called); + raf(function() { + assert(callback4.called); + done(); + }); + }); + }); + }); + }); }); diff --git a/test/test.set.js b/test/test.set.js index 440848d..f5b2ae3 100644 --- a/test/test.set.js +++ b/test/test.set.js @@ -59,11 +59,17 @@ suite('set', function() { assert(!cb.called); done(); }); + + // Should not have scheduled a new frame + assert(fastdom.frames.length === 0); }); }); test('Should call a write in the same frame if scheduled inside a read callback', function(done) { var fastdom = new FastDom(); + + fastdom.catchErrors = false; + var cb = sinon.spy(); fastdom.read(function() { @@ -80,6 +86,9 @@ suite('set', function() { assert(!cb.called); done(); }); + + // Should not have scheduled a new frame + assert(fastdom.frames.length === 0); }); }); @@ -100,6 +109,9 @@ suite('set', function() { assert(cb.called); done(); }); + + // Should not have scheduled a new frame + assert(fastdom.frames.length === 1); }); }); @@ -134,10 +146,10 @@ suite('set', function() { fastdom.write(function(){}); // Check there are four jobs stored - assert.equal(objectLength(fastdom.jobs), 4); + assert.equal(objectLength(fastdom.queue.hash), 4); raf(function() { - assert.equal(objectLength(fastdom.jobs), 0); + assert.equal(objectLength(fastdom.queue.hash), 0); done(); }); }); @@ -162,12 +174,12 @@ suite('set', function() { }); }); - test('Should call a registered onError handler when an error is thrown inside a job', function(done) { + test('Should no error if the `quiet` flag is set', function(done) { var fastdom = new FastDom(); var err1 = { some: 'error1' }; var err2 = { some: 'error2' }; - fastdom.onError = sinon.spy(); + fastdom.quiet = true; fastdom.read(function() { throw err1; @@ -178,9 +190,19 @@ suite('set', function() { }); raf(function() { - assert(fastdom.onError.calledTwice); - assert(fastdom.onError.getCall(0).calledWith(err1)); - assert(fastdom.onError.getCall(1).calledWith(err2)); + done(); + }); + }); + + test('Should stop rAF loop once frame queue is empty', function(done) { + var fastdom = new FastDom(); + var callback = sinon.spy(); + + fastdom.read(callback); + + raf(function() { + assert(callback.called); + assert(fastdom.looping === false); done(); }); }); |