Files
mobx-utils/test/queue-processor.js
2017-09-29 13:32:24 +10:00

68 lines
1.4 KiB
JavaScript

"use strict"
const utils = require("../")
const mobx = require("mobx")
const test = require("tape")
mobx.useStrict(true)
test("sync processor should work", t => {
const q = mobx.observable([1, 2])
const res = []
const stop = utils.queueProcessor(q, v => res.push(v * 2))
t.deepEqual(res, [2, 4])
t.equal(q.length, 0)
mobx.runInAction(() => q.push(3))
t.deepEqual(res, [2, 4, 6])
mobx.runInAction(() => q.push(4, 5))
t.equal(q.length, 0)
t.deepEqual(res, [2, 4, 6, 8, 10])
mobx.runInAction(() => {
q.unshift(6, 7)
t.equal(q.length, 2)
t.deepEqual(res, [2, 4, 6, 8, 10])
})
t.equal(q.length, 0)
t.deepEqual(res, [2, 4, 6, 8, 10, 12, 14])
stop()
mobx.runInAction(() => q.push(42))
t.equal(q.length, 1)
t.deepEqual(res, [2, 4, 6, 8, 10, 12, 14])
t.end()
})
test("async processor should work", t => {
const q = mobx.observable([1, 2])
const res = []
const stop = utils.queueProcessor(q, v => res.push(v * 2), 10)
t.equal(res.length, 0)
t.equal(q.length, 2)
setTimeout(() => {
t.deepEqual(res, [2, 4])
t.equal(q.length, 0)
mobx.runInAction(() => q.push(3))
t.equal(q.length, 1)
t.deepEqual(res, [2, 4])
setTimeout(() => {
t.equal(q.length, 0)
t.deepEqual(res, [2, 4, 6])
stop()
t.end()
}, 50)
}, 50)
})