| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- 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' ])
- })
- })
- })
- 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)
- })
- })
- })
|