causalityjs
Version:
A library for reactive programming based on Javascript proxies.
69 lines (56 loc) • 1.71 kB
JavaScript
;
require = require("esm")(module);
const {create,repeatOnChange} = require("../causality.js");
const assert = require('assert');
describe("Observe", function(){
it("Test observe object", function(){
let events = [];
let x = create();
x.observe(function(event) {
events.push(event);
});
x.a = 10;
x.a = 20;
x.a = 20;
let y = x.a;
// console.log(events);
});
it("Test observe activated by repeater removed", function(){
let state = 0
function toggle() {
state = (state === 0) ? 1 : 0;
return state;
}
let controller = create({
haveObserver : false
});
let specimen = create({});
let observationCounter = 0;
// Install observer using a repeater
repeatOnChange(function() {
if (controller.haveObserver) {
specimen.observe(function() {
observationCounter++;
});
}
});
// Manipulate twice with no observer
assert.equal(typeof(specimen.__handler.observers), 'undefined'); // no observer!
specimen.manipulate = toggle();
specimen.manipulate = toggle();
assert.equal(observationCounter, 0);
// Activate observer using repeater
controller.haveObserver = true;
assert.equal(Object.keys(specimen.__handler.observers).length, 1); // one observer!
specimen.manipulate = toggle();
specimen.manipulate = toggle();
assert.equal(observationCounter, 2);
// Deactivate observer using repeater
controller.haveObserver = false;
specimen.manipulate = toggle();
specimen.manipulate = toggle();
assert.equal(observationCounter, 2); // still 2 !
// Assert no observation structure left!
assert.equal(Object.keys(specimen.__handler.observers).length, 0);
});
});