var assert = require('chai').assert; var ko = require('knockout'); var clientUtil = require('../clientUtil'); var ObservableSet = require('app/client/lib/ObservableSet'); describe('ObservableSet', function() { clientUtil.setTmpMochaGlobals(); it("should keep track of items", function() { var set = ObservableSet.create(); assert.equal(set.count(), 0); assert.deepEqual(set.all(), []); var obs1 = ko.observable(true), val1 = { foo: 5 }, obs2 = ko.observable(false), val2 = { foo: 17 }; var sub1 = set.add(obs1, val1), sub2 = set.add(obs2, val2); assert.equal(set.count(), 1); assert.deepEqual(set.all(), [val1]); obs1(false); assert.equal(set.count(), 0); assert.deepEqual(set.all(), []); obs2(true); assert.equal(set.count(), 1); assert.deepEqual(set.all(), [val2]); obs1(true); assert.equal(set.count(), 2); assert.deepEqual(set.all(), [val1, val2]); sub1.dispose(); assert.equal(set.count(), 1); assert.deepEqual(set.all(), [val2]); assert.equal(obs1.getSubscriptionsCount(), 0); assert.equal(obs2.getSubscriptionsCount(), 1); sub2.dispose(); assert.equal(set.count(), 0); assert.deepEqual(set.all(), []); assert.equal(obs1.getSubscriptionsCount(), 0); assert.equal(obs2.getSubscriptionsCount(), 0); }); });