summaryrefslogtreecommitdiffstats
path: root/test/test.set.js
diff options
context:
space:
mode:
authorWilson Page <wilsonpage@me.com>2013-10-15 21:50:07 +0100
committerWilson Page <wilsonpage@me.com>2013-10-15 21:50:07 +0100
commitd29395cdf2d66dbc3d976f82f369bb61d5f976a6 (patch)
treecb21acc3e8aaf9c0ff7f75a35417a2e2f4668415 /test/test.set.js
parent02a04b619b08ec54b6e4933d2c036816b6234fb0 (diff)
downloadfastdom-d29395cdf2d66dbc3d976f82f369bb61d5f976a6.zip
fastdom-d29395cdf2d66dbc3d976f82f369bb61d5f976a6.tar.gz
fastdom-d29395cdf2d66dbc3d976f82f369bb61d5f976a6.tar.bz2
Fix bug whereby unnecessary frame being scheduled when read inside write, inside read
Diffstat (limited to 'test/test.set.js')
-rw-r--r--test/test.set.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/test.set.js b/test/test.set.js
index 2df30f7..e61b713 100644
--- a/test/test.set.js
+++ b/test/test.set.js
@@ -112,6 +112,82 @@ suite('set', function() {
});
});
+ test('Should not request a new frame when a write is requested inside a nested read', function(done) {
+ var fastdom = new FastDom();
+ var callback = sinon.spy();
+
+ fastdom.write(function() {
+ fastdom.read(function() {
+
+ // Schedule a callback for *next* frame
+ raf(callback);
+
+ // Schedule a read callback
+ // that should be run in the
+ // current frame checking that
+ // the RAF callback has not
+ // yet been fired.
+ fastdom.write(function() {
+ assert(!callback.called);
+ done();
+ });
+
+ // Should not have scheduled a new frame
+ assert(fastdom.frames.length === 0);
+ });
+ });
+ });
+
+ test('Should schedule a new frame when a read is requested in a nested write', function(done) {
+ var fastdom = new FastDom();
+
+ fastdom.read(function() {
+ fastdom.write(function() {
+ fastdom.read(function(){});
+
+ // Should have scheduled a new frame
+ assert(fastdom.frames.length === 1);
+ done();
+ });
+ });
+ });
+
+ test('Should run nested reads in the same frame', function(done) {
+ var fastdom = new FastDom();
+ var callback = sinon.spy();
+
+ fastdom.read(function() {
+ fastdom.read(function() {
+ fastdom.read(function() {
+ fastdom.read(function() {
+
+ // Should not have scheduled a new frame
+ assert(fastdom.frames.length === 0);
+ done();
+ });
+ });
+ });
+ });
+ });
+
+ test('Should run nested writes in the same frame', function(done) {
+ var fastdom = new FastDom();
+ var callback = sinon.spy();
+
+ fastdom.write(function() {
+ fastdom.write(function() {
+ fastdom.write(function() {
+ fastdom.write(function() {
+
+ // Should not have scheduled a new frame
+ assert(fastdom.frames.length === 0);
+ done();
+ });
+ });
+ });
+ });
+ });
+
test('Should call a "read" callback with the given context', function(done) {
var fastdom = new FastDom();
var cb = sinon.spy();