workq
Version:
A super tiny work queue
195 lines (148 loc) • 3.03 kB
JavaScript
const t = require('tap')
const test = t.test
const Queue = require('../index')
test('Should create a child q / 1', t => {
t.plan(4)
const order = [1, 2, 3, 4]
const q = Queue()
const q1 = q.child()
const q2 = q.child()
q.add((q, done) => {
t.strictEqual(order.shift(), 1)
done()
})
q1.add((q, done) => {
t.strictEqual(order.shift(), 3)
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 4)
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
})
test('Should create a child q / 2', t => {
t.plan(4)
const order = [1, 2, 3, 4]
const q = Queue()
q.add((q, done) => {
t.strictEqual(order.shift(), 1)
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
const q1 = q.child()
const q2 = q.child()
q1.add((q, done) => {
t.strictEqual(order.shift(), 3)
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 4)
done()
})
})
test('Should create a child q / 3', t => {
t.plan(4)
const order = [1, 2, 3, 4]
const q = Queue()
q.add((q, done) => {
t.strictEqual(order.shift(), 1)
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
setImmediate(() => {
const q1 = q.child()
const q2 = q.child()
q1.add((q, done) => {
t.strictEqual(order.shift(), 3)
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 4)
done()
})
})
})
test('Should create a child q / 4', t => {
t.plan(5)
const order = [1, 2, 3, 4, 5]
const q = Queue()
q.add((q, done) => {
const q1 = q.child()
const q2 = q.child()
t.strictEqual(order.shift(), 1)
q1.add((q, done) => {
t.strictEqual(order.shift(), 3)
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 4)
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 5)
done()
})
})
test('Should create a child q / 5', t => {
t.plan(5)
const order = [1, 2, 3, 4, 5]
const q = Queue()
const q1 = q.child()
const q2 = q.child()
q.add((q, done) => {
t.strictEqual(order.shift(), 1)
done()
})
q1.add((q, done) => {
t.strictEqual(order.shift(), 3)
q.add((q, done) => {
t.strictEqual(order.shift(), 4)
done()
})
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 5)
done()
})
q.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
})
test('No running jobs', t => {
t.plan(3)
const order = [1, 2, 3]
const q = Queue()
const q1 = q.child()
const q2 = q.child()
q1.add((q, done) => {
t.strictEqual(order.shift(), 1)
q1.add((q, done) => {
t.strictEqual(order.shift(), 2)
done()
})
done()
})
q2.add((q, done) => {
t.strictEqual(order.shift(), 3)
done()
})
})