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
95 lines (80 loc) • 2.21 kB
JavaScript
require('setimmediate')
require('source-map-support').install()
var test = require('tape')
var MutantArray = require('../array')
var MutantValue = require('../value')
test('Observable returns contents when called ', function(t) {
var array = MutantArray(['cat'])
var actual = array()
t.deepEqual(actual, ['cat'])
t.end()
})
test('Observable calls subscribe with latest when updated with set', function(t) {
var expected = ['dog']
var array = MutantArray(['cat'])
array(actual => {
t.deepEqual(actual, expected)
t.end()
})
array.set(expected)
})
test('Observable calls multiple subscribers with latest when updated with set', function(t) {
t.plan(2)
var expected = ['dog']
var array = MutantArray(['cat'])
array(actual => {
t.deepEqual(actual, expected)
})
array(actual => {
t.deepEqual(actual, expected)
})
array.set(expected)
})
test('Array will call subscriber when an observable in the array is updated', function(t) {
var obs = MutantValue(1)
var array = MutantArray([obs])
array(arr => {
actual = arr[0]
t.equal(actual, 2)
t.end()
})
obs.set(2)
})
test('#push inserts a new element and calls subscriber', function(t) {
var expected = ['cat','dog']
var array = MutantArray(['cat'])
array(actual => {
t.deepEqual(actual, expected)
t.end()
})
array.push('dog')
})
test('#insert inserts element at index and calls subscriber', function(t) {
var expected = ['dog', 'cat']
var array = MutantArray(['cat'])
array(actual => {
t.deepEqual(actual, expected)
t.end()
})
array.insert('dog', 0)
})
test('#delete removes basic element and calls subscriber', function(t) {
var expected = ['dog']
var array = MutantArray(['cat', 'dog'])
array(actual => {
t.deepEqual(actual, expected)
t.end()
})
array.delete('cat')
})
test('#delete when deleting an observable in an array, remaining observables still call their subscribers', function(t) {
t.plan(3)
var cat = MutantValue('cat')
cat(t.ok)
var dog = MutantValue('dog')
dog(t.fail)
var array = MutantArray([cat, dog])
array(t.ok)
array.delete(dog) //array will emit
cat.set('Kool kat') //array and cat will emit.
})