UNPKG

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

87 lines (70 loc) 1.87 kB
require('setimmediate') require('source-map-support').install() var test = require('tape') var computed = require('../computed') var resolve = require('../resolve') var Value = require('../value') test('computed get accessor', function(t) { var value = Value(1) var obs = computed(value, x => x * 100) t.equal(resolve(obs), 100) value.set(2) t.equal(resolve(obs), 200) t.end() }) test('computed lazy watch', function(t) { var value = Value(1) var obs = computed(value, x => x * 100) t.equal(resolve(obs), 100) var observedValues = [] obs(x => observedValues.push(x)) value.set(2) t.deepEqual(observedValues, [200]) t.end() }) test('computed lazy watch with `get` race condition', function(t) { var value = Value(1) var final = Value() var obs = computed(value, x => x * 100) t.equal(resolve(obs), 100) value(x => { resolve(obs) // resolve obs inside of observer }) obs(final.set) value.set(2) t.deepEqual(resolve(final), 200) t.end() }) test('computed inner update in non-live mode', function (t) { var innerValue = Value(1) var value = Value(innerValue) var obs = computed(value, x => x) t.deepEqual(obs(), 1) setImmediate(() => { innerValue.set(2) t.deepEqual(obs(), 2) t.end() }) }) test('computed nextTick, observe', function (t) { var events = [] var value = Value(1) var obs = computed(value, x => x * 100, {nextTick: true}) obs(value => events.push(value)) value.set(2) t.deepEqual(events, []) value.set(3) t.deepEqual(events, []) setImmediate(() => { t.deepEqual(events, [300]) t.end() }) }) test('computed nextTick, same tick `get` (short-circuit delay)', function (t) { var value = Value(1) var obs = computed(value, x => x * 100, {nextTick: true}) t.equal(resolve(obs), 100) value.set(2) t.equal(resolve(obs), 200) t.end() })