UNPKG

relu-core

Version:
106 lines (105 loc) 3.06 kB
var should = require("should"); var rp = require("../"); var checkRefs = require("./checkRefs"); describe("variable", function() { it("should be able to get and set primitive values", checkRefs(function() { var x = rp.variable("test"); x().should.be.eql("test"); x.set(123); x().should.be.eql(123); x.set(f); x().should.be.eql(f); x.isWritable().should.be.eql(true); function f() {} })); it("should be able to get object and arrays", checkRefs(function() { var O1 = {a: 1}, O2 = {b: 1}; var A1 = [1, 2, 3], A2 = []; var x = rp.variable("test"); x.set(O1); x().should.be.eql(O1); x.set(O2); x().should.be.eql(O2); x.set(A1); x().should.be.eql(A1); x.set(A2); x().should.be.eql(A2); x.set("test"); x().should.be.eql("test"); })); it("should fire correct events", checkRefs(function() { var x = rp.variable(1); var events = []; x.onChanged(function() { events.push("changed"); }); x.onUpdated(function(n, o) { events.push(["updated", n, o]); }); x.onAdded(function(idx, i) { events.push(["added", idx, i]); }); x.onRemoved(function(idx, i) { events.push(["removed", idx, i]); }); x.set(2); events.shift().should.be.eql(["updated", 2, 1]); events.shift().should.be.eql("changed"); rp.atomic(function() { x.set([3, 2, 1]); x.set([1, 2, 3]); }); events.shift().should.be.eql(["updated", [1,2,3], 2]); events.shift().should.be.eql("changed"); x.push(4); events.shift().should.be.eql(["added", 3, 4]); events.shift().should.be.eql("changed"); x.shift(); events.shift().should.be.eql(["removed", 0, 1]); events.shift().should.be.eql("changed"); })); it("should fire correct array events", checkRefs(function() { var x = rp.variable([1,2,3]); var events = []; x.onChanged(function() { events.push("changed"); }); x.onUpdated(function(n, o) { events.push(["updated", n.slice(), o.slice()]); }); x.onAdded(function(idx, i) { events.push(["added", idx, i]); }); x.onRemoved(function(idx, i) { events.push(["removed", idx, i]); }); x.push(4); events.shift().should.be.eql(["added", 3, 4]); events.shift().should.be.eql("changed"); x.pop(); events.shift().should.be.eql(["removed", 3, 4]); events.shift().should.be.eql("changed"); rp.atomic(function() { x.set([0, 1, 2]); x.shift(); x.push(4); }); events.shift().should.be.eql(["updated", [1, 2, 4], [1, 2, 3]]); events.shift().should.be.eql("changed"); rp.atomic(function() { x.unshift(0); x.unshift(-1); x.pop(); x.push(3); x.push(4); // value should not change inside a atomic block x().should.be.eql([1, 2, 4]); }); events.shift().should.be.eql(["removed", 2, 4]); events.shift().should.be.eql(["added", 0, -1]); events.shift().should.be.eql(["added", 1, 0]); events.shift().should.be.eql(["added", 4, 3]); events.shift().should.be.eql(["added", 5, 4]); events.shift().should.be.eql("changed"); })); });