Flapjax observable array
HTML
<script src="http://flapjax-lang.org/download/flapjax-2.1.js"></script>
<div id="updates"></div>
JavaScript
function test(arr, p, arrLogB) {
var err = false;
p.push('a');
p.push('b');
p.push('c');
if (!(arr[0] == 'init' && arr[1] == 'a' && arr[2] == 'b' && arr[3] == 'c')) {
console.error("value proxying failed");
err = true;
}
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c") {
console.error("push reaction after proxy failed");
err = true;
}
arr.push('d');
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c") {
console.error("push delayed reaction failed to delay");
err = true;
}
p.push('e');
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c,d,e") {
console.error("push delayed reaction failed to resume");
err = true;
}
p[6] = 'f';
if (arr[arr.length - 1] != 'f') {
console.error("set proxy failed");
err = true;
}
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c,d,e,f") {
console.error("set reaction failed");
err = true;
}
arr[7] = 'g';
arr[8] = 'h';
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c,d,e,f") {
console.error("set delayed reaction failed to delay");
err = true;
}
p[9] = 'i';
if (arr[arr.length - 2] != 'h' && arr[arr.length - 1] != 'i') {
console.error("set delayed proxy failed to resume");
err = true;
}
if (arrLogB.last[arrLogB.last.length - 1] != "update: init,a,b,c,d,e,f,g,h,i") {
console.error("set delayed reaction failed to resume");
err = true;
}
if (p.last != arr) {
console.error("does not have behavioral properties");
err = true;
}
var lenB = liftB(function(a) {
return a.length;
}, p);
var preL = lenB.last;
p.push('j');
if (lenB.last != preL + 1) {
console.error("pure lift failed to react");
err = true;
}
var lenB = p.liftB(function(a) {
...