114 lines
3.3 KiB
CoffeeScript
114 lines
3.3 KiB
CoffeeScript
createChunk = (number, content, options) ->
|
|
Em.Object.create(number: number, content: content, final: options?.final)
|
|
|
|
describe 'Travis.ChunkBuffer', ->
|
|
it 'waits for parts to be in order before revealing them', ->
|
|
buffer = Travis.ChunkBuffer.create(content: [])
|
|
|
|
buffer.pushObject createChunk(3, "baz")
|
|
buffer.pushObject createChunk(2, "bar")
|
|
|
|
expect(buffer.get('length')).toEqual(0)
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
|
|
expect(buffer.get('length')).toEqual(3)
|
|
|
|
expect(buffer.toArray()).toEqual(['foo', 'bar', 'baz'])
|
|
|
|
it 'ignores a part if it fails to be delivered within timeout', ->
|
|
buffer = Travis.ChunkBuffer.create(content: [], timeout: 20, checkTimeoutFrequency: 5)
|
|
|
|
buffer.pushObject createChunk(3, "baz")
|
|
|
|
expect(buffer.get('length')).toEqual(0)
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
|
|
expect(buffer.get('length')).toEqual(1)
|
|
|
|
waits 100
|
|
runs ->
|
|
expect(buffer.get('length')).toEqual(2)
|
|
expect(buffer.toArray()).toEqual(['foo', 'baz'])
|
|
|
|
buffer.destroy()
|
|
|
|
it 'works correctly when parts are passed as content', ->
|
|
content = [createChunk(2, 'bar')]
|
|
|
|
buffer = Travis.ChunkBuffer.create(content: content)
|
|
|
|
expect(buffer.get('length')).toEqual(0)
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
|
|
expect(buffer.get('length')).toEqual(2)
|
|
expect(buffer.toArray()).toEqual(['foo', 'bar'])
|
|
|
|
it 'works correctly when parts duplicated', ->
|
|
buffer = Travis.ChunkBuffer.create(content: [])
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
buffer.pushObject createChunk(2, "bar")
|
|
buffer.pushObject createChunk(3, "baz")
|
|
|
|
buffer.pushObject createChunk(2, "bar")
|
|
buffer.pushObject createChunk(3, "baz")
|
|
buffer.pushObject createChunk(4, "qux")
|
|
|
|
expect(buffer.get('length')).toEqual(4)
|
|
expect(buffer.toArray()).toEqual(['foo', 'bar', 'baz', 'qux'])
|
|
|
|
it 'fires array observers properly', ->
|
|
changes = []
|
|
buffer = Travis.ChunkBuffer.create(content: [])
|
|
|
|
observer = Em.Object.extend(
|
|
init: ->
|
|
@_super.apply this, arguments
|
|
|
|
@get('content').addArrayObserver this,
|
|
willChange: 'arrayWillChange',
|
|
didChange: 'arrayDidChange'
|
|
|
|
arrayWillChange: (->)
|
|
arrayDidChange: (array, index, removedCount, addedCount) ->
|
|
changes.pushObject([index, addedCount])
|
|
).create(content: buffer)
|
|
|
|
buffer.pushObject createChunk(2, "baz")
|
|
|
|
expect(buffer.get('length')).toEqual(0)
|
|
expect(changes.length).toEqual(0)
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
|
|
expect(buffer.get('length')).toEqual(2)
|
|
expect(changes.length).toEqual(1)
|
|
expect(changes[0]).toEqual([0, 2])
|
|
|
|
it 'sets next to start if start is given at init', ->
|
|
buffer = Travis.ChunkBuffer.create(content: [], start: 5)
|
|
expect(buffer.get('next')).toEqual(5)
|
|
|
|
it 'runs finalize after getting final element', ->
|
|
finalizeRuns = 0
|
|
buffer = Travis.ChunkBuffer.extend({
|
|
finalize: ->
|
|
@_super.apply this, arguments
|
|
finalizeRuns += 1
|
|
}).create(content: [])
|
|
|
|
buffer.pushObject createChunk(1, "foo")
|
|
buffer.pushObject createChunk(2, "bar")
|
|
buffer.pushObject createChunk(3, "baz")
|
|
|
|
expect(finalizeRuns).toEqual(0)
|
|
|
|
buffer.pushObject createChunk(4, "qux", final: true)
|
|
|
|
expect(buffer.get('length')).toEqual(4)
|
|
|
|
expect(finalizeRuns).toEqual(1)
|