mutant
Version:
Create observables and map them to DOM elements. Massively inspired by hyperscript and observ-*. No virtual dom, just direct observable bindings. Unnecessary garbage collection is avoided by using mutable objects instead of blasting immutable junk all ove
61 lines (54 loc) • 1.63 kB
JavaScript
require('setimmediate')
require('source-map-support').install()
var test = require('tape')
var MutantValue = require('../value')
var watchThrottle = require('../watch-throttle')
test('watchThrottle: nextTick option', function(t) {
var value = MutantValue()
var checker = function (value) {}
watchThrottle(value, 100, (value) => {
checker(value)
}, {
nextTick: true
})
var nextTick = false
var callCount = 0
setImmediate(() => {nextTick = true})
checker = (value) => {
callCount += 1
t.equal(callCount, 1, 'only called once')
t.equal(value, 'new value3')
t.equal(nextTick, true, 'called after nextTick')
t.end()
}
value.set('new value')
value.set('new value2')
value.set('new value3')
})
test('watchThrottle: correctly handle throttling when nextTick option enabled', function(t) {
var value = MutantValue()
var checker = function (value) {}
watchThrottle(value, 100, (value) => {
checker(value)
}, {
nextTick: true
})
var nextTick = false
setImmediate(() => {nextTick = true})
checker = (value) => {
t.equal(value, 'new value2', 'use latest value on nextTick')
t.equal(nextTick, true, 'called after nextTick')
let callCount = 0
checker = (value) => {
callCount += 1
t.equal(callCount, 1, 'only called once after nextTick')
t.equal(value, 'new value5', 'use latest value on throttle')
t.end()
}
}
value.set('new value')
value.set('new value2')
setTimeout(() =>value.set('new value3'), 10)
setTimeout(() =>value.set('new value4'), 20)
setTimeout(() =>value.set('new value5'), 30)
})