| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- describe('RenderQueue', function() {
- var RenderQueue = $.fullCalendar.RenderQueue;
- it('executes atomic events in sequence', function() {
- var ops = [];
- var q = new RenderQueue();
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.queue(function() {
- ops.push('fooremove');
- }, 'foo', 'add');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'remove');
- q.queue(function() {
- ops.push('foodestroy');
- }, 'foo', 'destroy');
- expect(ops).toEqual([ 'fooinit', 'fooremove', 'fooadd', 'foodestroy' ]);
- });
- describe('when accumulating', function() {
- describe('using clear action', function() {
- it('destroys add/remove operations in same namespace', function() {
- var ops = [];
- var q = new RenderQueue();
- q.pause();
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- q.queue(function() {
- ops.push('fooremove');
- }, 'foo', 'remove');
- q.queue(function() {
- ops.push('foodestroy');
- }, 'foo', 'destroy');
- expect(ops).toEqual([]);
- q.resume();
- expect(ops).toEqual([ 'foodestroy' ]);
- });
- it('is cancelled out by an init in same namespace', function() {
- var ops = [];
- var q = new RenderQueue();
- q.pause();
- q.queue(function() {
- ops.push('barinit');
- }, 'bar', 'init');
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'remove');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'destroy');
- expect(ops).toEqual([]);
- q.resume();
- expect(ops).toEqual([ 'barinit' ]);
- });
- });
- });
- describe('when namespace has a wait value', function() {
- it('unpauses when done', function(done) {
- var ops = [];
- var q = new RenderQueue({
- foo: 100
- });
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- expect(ops).toEqual([]);
- setTimeout(function() {
- expect(ops).toEqual([ 'fooinit', 'fooadd' ]);
- done();
- }, 200);
- });
- it('restarts timer when new operation happens', function(done) {
- var ops = [];
- var q = new RenderQueue({
- foo: 100
- });
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- setTimeout(function() {
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- }, 50);
- setTimeout(function() {
- expect(ops).toEqual([]);
- }, 125);
- setTimeout(function() {
- expect(ops).toEqual([ 'fooinit', 'fooadd' ]);
- done();
- }, 175);
- });
- it('synchronously executes queue when sync non-namespace operation happens', function() {
- var ops = [];
- var q = new RenderQueue({
- foo: 100
- });
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- expect(ops).toEqual([]);
- q.queue(function() {
- ops.push('barinit');
- }, 'bar', 'init');
- expect(ops).toEqual([ 'fooinit', 'fooadd', 'barinit' ]);
- });
- it('synchronously executes queue when async non-namespace operation happens', function(done) {
- var ops = [];
- var q = new RenderQueue({
- foo: 100,
- bar: 100
- });
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.queue(function() {
- ops.push('fooadd');
- }, 'foo', 'add');
- expect(ops).toEqual([]);
- q.queue(function() {
- ops.push('barinit');
- }, 'bar', 'init');
- expect(ops).toEqual([ 'fooinit', 'fooadd' ]);
- setTimeout(function() {
- expect(ops).toEqual([ 'fooinit', 'fooadd', 'barinit' ]);
- done();
- }, 200);
- });
- it('resumes non-waiting tasks when unpaused', function(done) {
- var ops = [];
- var q = new RenderQueue({
- foo: 100
- });
- q.pause();
- q.queue(function() {
- ops.push('barinit');
- }, 'bar', 'init');
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- q.resume();
- expect(ops).toEqual([ 'barinit' ]);
- setTimeout(function() {
- expect(ops).toEqual([ 'barinit', 'fooinit' ]);
- done();
- }, 200);
- });
- it('paused+queued tasks from a previous namespace wait resume immediately', function(done) {
- var ops = [];
- var q = new RenderQueue({
- foo: 100
- });
- q.pause();
- q.queue(function() {
- ops.push('foodestroy');
- }, 'foo', 'destroy');
- q.queue(function() {
- ops.push('bardestroy');
- }, 'bar', 'destroy');
- expect(ops).toEqual([]);
- q.queue(function() {
- ops.push('barinit');
- }, 'bar', 'init');
- q.queue(function() {
- ops.push('fooinit');
- }, 'foo', 'init');
- expect(ops).toEqual([]);
- q.resume();
- expect(ops).toEqual([ 'foodestroy', 'bardestroy', 'barinit' ]);
- setTimeout(function() {
- expect(ops).toEqual([ 'foodestroy', 'bardestroy', 'barinit', 'fooinit' ]);
- done();
- }, 200);
- });
- });
- });
|