queue-conductor
Version:
Queue manager with condition-based listening and task subscription
188 lines (172 loc) • 5.76 kB
JavaScript
var thisFile = 'queue_tests'
var chai = require('chai')
var { expect } = chai
import { Queue } from 'queue'
import { prefixId } from 'unique_id'
var now = v => new Date().getTime()
describe(prefixId('Queue Tests'), () => {
it(prefixId('add, result pipeline is strong, inital value works, finally works'), (done) => {
var init = 'initialized with this var'
new Queue()
.initVal(init)
.add((p) => {
expect(p.result).to.equal(init)
return 42
})
.add((p) => {
expect(p.result).to.equal(42)
})
.add(new Promise(function (resolve) {
setTimeout(() => { resolve(99) }, 30)
}))
.add((p) => { expect(p.result).to.equal(99) })
.add({
task: (p) => { p.done(180) }
})
.add((p) => {
expect(p.result).to.equal(180)
})
.finally(() => { done() })
.kickStart()
})
it(prefixId('inserts'), (done) => {
var index = 0, counter = []
var queue = new Queue()
.wait(100)
.add([
() => { counter.push(index++) },
() => { counter.push(index++) },
() => { counter.push(index++) }
])
.kickStart()
queue
.insert(() => { counter.push(10) })
.add(() => {
expect(counter).to.deep.equal([10, 0, 1, 2])
done()
})
})
it(prefixId('wait'), (done) => {
var start = new Date().getTime()
new Queue()
.wait(30)
.add(() => {
expect(new Date().getTime() - start >= 30).to.equal(true)
})
.add(() => { done() })
.kickStart()
})
it(prefixId('animate'), (done) => {
var src = { val: 1 }
new Queue()
.animate({
src,
dest: { val: 100 }
})
.add(() => {
expect(src.val).to.equal(100)
done()
})
.kickStart()
})
it(prefixId('all'), (done) => {
var one = false, two = false, start = now()
new Queue()
.all([
[Queue.wait(30), () => { one = true }],
[Queue.wait(100), () => { two = true }]
])
.add(() => {
expect(one && two, 'one and 2 not set').to.equal(true)
expect(now() - start >= 100, 'time not right').to.equal(true)
done()
})
.kickStart()
})
it(prefixId('race'), (done) => {
var one = false, two = false, start = now()
new Queue()
.race([
[Queue.wait(30), () => { one = true }],
[Queue.wait(100), () => { two = true }]
])
.add(() => {
expect(one && !two, 'one and 2 not set').to.equal(true)
expect(now() - start >= 30 && now() - start <= 100, 'time not right').to.equal(true)
done()
})
.kickStart()
})
it(prefixId('listen'), (done) => {
new Queue()
.listen(new Queue().wait(30))
.add(() => { done() })
.kickStart()
})
it(prefixId('subscribe'), (done) => {
var called = p => done()
new Queue()
.add(() => { })
.subscribe(called)
.kickStart()
})
it(prefixId('subscribeTask'), (done) => {
var called = p => {
expect((one && two) && !three).to.equal(true)
}
var one = false, two = false, three = false
var t = {
task: () => { two = true },
name: 'testName',
wait: false
}
var queue = new Queue()
.add(() => { one = true })
.add(t)
.wait(10)
.add(() => { three = true })
.add(() => done())
queue
.subscribeTask({ name: 'testName', cb: called })
.kickStart()
})
it(prefixId('splice inert queue'), () => {
var queue = new Queue()
.add({ name: 'one' })
.add({ name: 'two' })
.add({ name: 'three' })
.add({ name: 'four' })
.add({ name: 'five' })
.splice({
from: { name: 'two' },
to: { name: 'four' }
})
expect(queue.status().queueLine[1].name).to.equal('five')
})
it(prefixId('splice partially completed queue'), (done) => {
//just for testing. Queue populates the task property of a taskObject with placeholder functions that do nothing.
var queue = new Queue()
queue
.add({ name: 'one' })
.add({ name: 'two' })
.add({ name: 'three' })
.add({
task: p => p.control.splice(
{
from: { name: 'two' },
to: { name: 'four' }
}),
name: 'splice',
wait: false
}
)
.add({ name: 'four' })
.add({ name: 'five' })
.add(p => {
expect(queue.status().queueLine[2].name).to.equal('three')
expect(queue.status().queueLine[4].name).to.equal('five')
done()
})
.kickStart()
})
})