summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test.clear.js13
-rw-r--r--test/test.defer.js80
-rw-r--r--test/test.set.js36
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();
});
});