causalityjs
Version:
A library for reactive programming based on Javascript proxies.
70 lines (61 loc) • 1.74 kB
JavaScript
;
require = require("esm")(module);
const causality = require("../causality.js");
const assert = require('assert');
describe("Post pulse", function(){
const expected = [
[ { type: 'create', object: {}, objectId: 1 } ],
[ { type: 'create', object: {}, objectId: 2 } ],
[ { type: 'set',
property: 'y',
newValue: {},
oldValue: undefined,
object: { y: {} },
objectId: 1 } ],
[ { type: 'set',
property: 'foo',
newValue: 42,
oldValue: undefined,
object: { y: null, foo: 42, z: {} },
objectId: 1 },
{ type: 'set',
property: 'bar',
newValue: 2,
oldValue: undefined,
object: { bar: 2 },
objectId: 2 },
{ type: 'create', object: {}, objectId: 3 },
{ type: 'set',
property: 'z',
newValue: {},
oldValue: undefined,
object: { y: null, foo: 42, z: {} },
objectId: 1 } ],
];
it("Test events", function(){
let i = 0;
causality.resetObjectIds();
//console.log('setup');
causality.setRecordEvents(true);
causality.addPostPulseAction(function(events) {
//console.log( events );
assert.deepEqual( events, expected[i++] );
});
//console.log('start');
let x = causality.create({});
x.y = causality.create({});
// Set up for comparison
expected[3][0].object.y = x.y;
expected[3][3].object.y = x.y;
//console.log('transaction');
causality.transaction(function() {
x.foo = 42;
x.y.bar = 2;
x.z = causality.create({});
});
//console.log('cleanup');
causality.removeAllPostPulseActions();
causality.setRecordEvents(false);
//console.log('end');
});
});