mithril-vndb/stream/tests/test-stream.js
2016-10-29 00:38:28 -05:00

90 lines
1.8 KiB
JavaScript

'use strict'
var o = require('../../ospec/ospec')
o.spec('stream', function () {
var prop
o.beforeEach(function () {
prop = require('../../stream')
})
o.spec('scan', function () {
var scan
o.beforeEach(function () {
scan = require('../scan')
})
o('defaults to seed', function () {
var parent = prop()
var child = scan(function (out, p) {
return out - p
}, 123, parent)
o(child()).equals(123)
})
o('accumulates values as expected', function () {
var parent = prop()
var child = scan(function (arr, p) {
return arr.concat(p)
}, [], parent)
parent(7)
parent('11')
parent(undefined)
parent({ a: 1 })
var result = child()
// deepEquals fails on arrays?
o(result[0]).equals(7)
o(result[1]).equals('11')
o(result[2]).equals(undefined)
o(result[3]).deepEquals({ a: 1 })
})
})
o.spec('scanMerge', function () {
var scanMerge
o.beforeEach(function () {
scanMerge = require('../scan-merge')
})
o('defaults to seed', function () {
var parent1 = prop()
var parent2 = prop()
var child = scanMerge([
[parent1, function (out, p1) {
return out + p1
}],
[parent2, function (out, p2) {
return out + p2
}]
], -10)
o(child()).equals(-10)
})
o('accumulates as expected', function () {
var parent1 = prop()
var parent2 = prop()
var child = scanMerge([
[parent1, function (out, p1) {
return out + p1
}],
[parent2, function (out, p2) {
return out + p2 + p2
}]
], 'a')
parent1('b')
parent2('c')
parent1('b')
o(child()).equals('abccb')
})
})
})