Mercurial > hg > dml-open-vis
diff src/DML/MainVisBundle/Resources/assets/jasmine/marionette/[t]ContextModule.10-ConfigGrid.js @ 0:493bcb69166c
added public content
author | Daniel Wolff |
---|---|
date | Tue, 09 Feb 2016 20:54:02 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DML/MainVisBundle/Resources/assets/jasmine/marionette/[t]ContextModule.10-ConfigGrid.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,447 @@ +"use strict"; + +describe("ContextModule.ConfigGrid", function() { + + var testEntityConfigs = null; + var testViewConfigs = null; + var testIrrelevantEntityConfigs = null; + var testIrrelevantViewConfigs = null; + + beforeEach(function() { + testEntityConfigs = [ + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + new App.ContextModule.Config({parameters: {x: 20}}), + ]; + + testViewConfigs = [ + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + new App.ContextModule.Config({parameters: {x: 20}}), + ]; + + testIrrelevantEntityConfigs = [ + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + ]; + testIrrelevantViewConfigs = [ + new App.ContextModule.Config({parameters: {x: 10, y: "test"}}), + ]; + }); + + it("is promptly created", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + expect(testedConfigGrid).not.toBe(null); + + expect(testedConfigGrid.entityConfigs).not.toBe(null); + expect(testedConfigGrid.entityConfigs.size()).toEqual(0); + + expect(testedConfigGrid.viewConfigs).not.toBe(null); + expect(testedConfigGrid.viewConfigs.size()).toEqual(0); + + expect(testedConfigGrid.getType()).toBe(undefined); + }); + + it("is promptly created with type", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid("abc"); + + expect(testedConfigGrid).not.toBe(null); + + expect(testedConfigGrid.getType()).toBe("abc"); + }); + + it("can add parameter bags", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + testedConfigGrid.entityConfigs.add(testEntityConfigs[0]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[1]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[2]); + + testedConfigGrid.viewConfigs.add(testViewConfigs[0]); + testedConfigGrid.viewConfigs.add(testViewConfigs[1]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + + expect(testedConfigGrid.viewConfigs.size()).toEqual(3); + expect(testedConfigGrid.entityConfigs.size()).toEqual(3); + + // Can't add what's already there + testedConfigGrid.entityConfigs.add(testEntityConfigs[2]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + + expect(testedConfigGrid.viewConfigs.size()).toEqual(3); + expect(testedConfigGrid.entityConfigs.size()).toEqual(3); + }); + + it("can add parameter bags at a particular place", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + testedConfigGrid.entityConfigs.add(testEntityConfigs[0]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[1]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[2], {at: 0}); + + testedConfigGrid.viewConfigs.add(testViewConfigs[0]); + testedConfigGrid.viewConfigs.add(testViewConfigs[1]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2], {at: 1}); + + expect(testedConfigGrid.viewConfigs.size()).toEqual(3); + expect(testedConfigGrid.entityConfigs.size()).toEqual(3); + + expect(testedConfigGrid.entityConfigs.at(0)).toEqual(testEntityConfigs[2]); + expect(testedConfigGrid.entityConfigs.at(1)).toEqual(testEntityConfigs[0]); + expect(testedConfigGrid.entityConfigs.at(2)).toEqual(testEntityConfigs[1]); + + expect(testedConfigGrid.viewConfigs.at(0)).toEqual(testViewConfigs[0]); + expect(testedConfigGrid.viewConfigs.at(1)).toEqual(testViewConfigs[2]); + expect(testedConfigGrid.viewConfigs.at(2)).toEqual(testViewConfigs[1]); + }); + + it("can reset", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + testedConfigGrid.entityConfigs.add(testEntityConfigs[0]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[1]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[2]); + + testedConfigGrid.viewConfigs.add(testViewConfigs[0]); + testedConfigGrid.viewConfigs.add(testViewConfigs[1]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + + expect(testedConfigGrid.entityConfigs.size()).toEqual(3); + expect(testedConfigGrid.viewConfigs.size()).toEqual(3); + + testedConfigGrid.entityConfigs.reset(); + testedConfigGrid.viewConfigs.reset(); + + expect(testedConfigGrid.entityConfigs.size()).toEqual(0); + expect(testedConfigGrid.viewConfigs.size()).toEqual(0); + + testedConfigGrid.entityConfigs.add(testEntityConfigs[0]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[1]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[2]); + + testedConfigGrid.viewConfigs.add(testViewConfigs[0]); + testedConfigGrid.viewConfigs.add(testViewConfigs[1]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + }); + + it("retreives neighbour entityConfigs and viewConfigs", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + testedConfigGrid.entityConfigs.add(testEntityConfigs[0]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[1]); + testedConfigGrid.entityConfigs.add(testEntityConfigs[2]); + + testedConfigGrid.viewConfigs.add(testViewConfigs[0]); + testedConfigGrid.viewConfigs.add(testViewConfigs[1]); + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + + expect(testedConfigGrid.getPrevEntityNeighbour(testEntityConfigs[0])).toBe(undefined); + expect(testedConfigGrid.getPrevEntityNeighbour(testEntityConfigs[1])).toEqual(testEntityConfigs[0]); + expect(testedConfigGrid.getPrevEntityNeighbour(testEntityConfigs[2])).toEqual(testEntityConfigs[1]); + expect(testedConfigGrid.getNextEntityNeighbour(testEntityConfigs[0])).toEqual(testEntityConfigs[1]); + expect(testedConfigGrid.getNextEntityNeighbour(testEntityConfigs[1])).toEqual(testEntityConfigs[2]); + expect(testedConfigGrid.getNextEntityNeighbour(testEntityConfigs[2])).toBe(undefined); + + expect(function(){testedConfigGrid.getPrevEntityNeighbour(testIrrelevantEntityConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getNextEntityNeighbour(testIrrelevantEntityConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getPrevEntityNeighbour(testViewConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getNextEntityNeighbour(testViewConfigs[0]);}).toThrow(); + + expect(testedConfigGrid.getPrevViewNeighbour(testViewConfigs[0])).toEqual(undefined); + expect(testedConfigGrid.getPrevViewNeighbour(testViewConfigs[1])).toEqual(testViewConfigs[0]); + expect(testedConfigGrid.getPrevViewNeighbour(testViewConfigs[2])).toEqual(testViewConfigs[1]); + expect(testedConfigGrid.getNextViewNeighbour(testViewConfigs[0])).toEqual(testViewConfigs[1]); + expect(testedConfigGrid.getNextViewNeighbour(testViewConfigs[1])).toEqual(testViewConfigs[2]); + expect(testedConfigGrid.getNextViewNeighbour(testViewConfigs[2])).toEqual(undefined); + + expect(function(){testedConfigGrid.getPrevViewNeighbour(testIrrelevantViewConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getNextViewNeighbour(testIrrelevantViewConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getPrevViewNeighbour(testEntityConfigs[0]);}).toThrow(); + expect(function(){testedConfigGrid.getNextViewNeighbour(testEntityConfigs[0]);}).toThrow(); + }); + + it("relocates entityConfigs and viewConfigs", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + _.each([ + { + configCollection: testedConfigGrid.entityConfigs, + relocateFunctionName: "relocateEntityConfig", + relevantConfigs: testEntityConfigs, + irrelevantConfigs: testIrrelevantEntityConfigs, + }, + { + configCollection: testedConfigGrid.viewConfigs, + relocateFunctionName: "relocateViewConfig", + relevantConfigs: testViewConfigs, + irrelevantConfigs: testIrrelevantViewConfigs + } + ], function(currentDimension) { + + currentDimension.configCollection.add(currentDimension.relevantConfigs[0]); + currentDimension.configCollection.add(currentDimension.relevantConfigs[1]); + currentDimension.configCollection.add(currentDimension.relevantConfigs[2]); + expect(currentDimension.configCollection.size()).toEqual(3); + + // index + testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[1], 0); + expect(currentDimension.configCollection.at(0)).toEqual(currentDimension.relevantConfigs[1]); + expect(currentDimension.configCollection.at(1)).toEqual(currentDimension.relevantConfigs[0]); + expect(currentDimension.configCollection.at(2)).toEqual(currentDimension.relevantConfigs[2]); + + // config + testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[1], currentDimension.relevantConfigs[2]); + expect(currentDimension.configCollection.at(0)).toEqual(currentDimension.relevantConfigs[0]); + expect(currentDimension.configCollection.at(1)).toEqual(currentDimension.relevantConfigs[1]); + expect(currentDimension.configCollection.at(2)).toEqual(currentDimension.relevantConfigs[2]); + + // config cid + testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[2], currentDimension.relevantConfigs[0].getClientId()); + expect(currentDimension.configCollection.at(0)).toEqual(currentDimension.relevantConfigs[2]); + expect(currentDimension.configCollection.at(1)).toEqual(currentDimension.relevantConfigs[0]); + expect(currentDimension.configCollection.at(2)).toEqual(currentDimension.relevantConfigs[1]); + + // exceptional cases + expect(function(){testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.irrelevantConfigs[1], 0);}).toThrow(); + expect(function(){testedConfigGrid[currentDimension.relocateFunctionName](relevantConfigs[1], currentDimension.irrelevantConfigs[1]);}).toThrow(); + expect(function(){testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[1], -1);}).toThrow(); + expect(function(){testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[1], 4);}).toThrow(); + + // index - last + testedConfigGrid[currentDimension.relocateFunctionName](currentDimension.relevantConfigs[1], 3); + expect(currentDimension.configCollection.at(0)).toEqual(currentDimension.relevantConfigs[2]); + expect(currentDimension.configCollection.at(1)).toEqual(currentDimension.relevantConfigs[0]); + expect(currentDimension.configCollection.at(2)).toEqual(currentDimension.relevantConfigs[1]); + + // clone of a config + var clone = new App.ContextModule.Config(currentDimension.relevantConfigs[1].serialize()); + expect(function(){testedConfigGrid[currentDimension.relocateFunctionName](clone, 0);}).toThrow(); + }); + }); + + xit("works with selectedEntityConfigClientId and selectedViewConfigClientId", function() { + }); + + xit("performs combined actions: addEntityAndSelectIt, addViewAndSelectIt", function() { + }); + + xit("performs combined actions: removeEntityAndSelectNeighbour, removeViewAndSelectNeighbour", function() { + }); + + it("serializes and unserializes itself", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + var originalSerializedObject = { + entityConfigs: [ + testEntityConfigs[1].serialize(), + testEntityConfigs[2].serialize(), + testEntityConfigs[0].serialize(), + ], + viewConfigs: [ + testViewConfigs[0].serialize(), + testViewConfigs[1].serialize() + ], + }; + testedConfigGrid.unserialize(originalSerializedObject); + + expect(testedConfigGrid.entityConfigs.size()).toEqual(3); + expect(testedConfigGrid.viewConfigs.size()).toEqual(2); + + expect(testedConfigGrid.entityConfigs.at(0).getClientId()).toEqual(testEntityConfigs[1].getClientId()); + expect(testedConfigGrid.entityConfigs.at(1).getClientId()).toEqual(testEntityConfigs[2].getClientId()); + expect(testedConfigGrid.entityConfigs.at(2).getClientId()).toEqual(testEntityConfigs[0].getClientId()); + + expect(testedConfigGrid.viewConfigs.at(0).getClientId()).toEqual(testViewConfigs[0].getClientId()); + expect(testedConfigGrid.viewConfigs.at(1).getClientId()).toEqual(testViewConfigs[1].getClientId()); + + expect(testedConfigGrid.serialize()).toEqual(originalSerializedObject); + + testedConfigGrid.relocateEntityConfig(testedConfigGrid.entityConfigs.at(2), 0); + testedConfigGrid.entityConfigs.remove(testedConfigGrid.entityConfigs.at(2)); + testedConfigGrid.entityConfigs.add(testIrrelevantEntityConfigs[0]); + + testedConfigGrid.viewConfigs.add(testViewConfigs[2]); + testedConfigGrid.relocateViewConfig(testedConfigGrid.viewConfigs.at(2), 0); + testedConfigGrid.relocateViewConfig(testedConfigGrid.viewConfigs.at(1), 3); + testedConfigGrid.viewConfigs.add(testIrrelevantViewConfigs[0]); + + var newSerializedObject = { + entityConfigs: [ + testEntityConfigs[0].serialize(), + testEntityConfigs[1].serialize(), + testIrrelevantEntityConfigs[0].serialize() + ], + viewConfigs: [ + testViewConfigs[2].serialize(), + testViewConfigs[1].serialize(), + testViewConfigs[0].serialize(), + testIrrelevantViewConfigs[0].serialize() + ], + }; + expect(testedConfigGrid.serialize()).toEqual(newSerializedObject); + }); + + it("unserializes itself from faulty serialized objects", function() { + var faultySerializedObjects = [ + null, + undefined, + 42, + "test", + {entityConfigs: 42}, + {viewConfigs: [testViewConfigs[1].serialize()], "foo": "bar"}, + ]; + + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + _.each(faultySerializedObjects, function(faultySerializedObject) { + expect(function() { + testedConfigGrid.unserialize(faultySerializedObject); + }).not.toThrow(); + }); + }); + + it("triggers events when real changes occur", function() { + var testedConfigGrid = new App.ContextModule.ConfigGrid(); + + _.each([ + { + configCollection: testedConfigGrid.entityConfigs, + relocateFunctionName: "relocateEntityConfig", + relevantConfigs: testEntityConfigs, + irrelevantConfigs: testIrrelevantEntityConfigs, + + changeLayoutEventName: "change_layout", + changeConfigEventPrefix: "change_entity:", + changeConfigNeighboursPrefix: "change_entity_neighbours:", + }, + { + configCollection: testedConfigGrid.viewConfigs, + relocateFunctionName: "relocateViewConfig", + relevantConfigs: testViewConfigs, + irrelevantConfigs: testIrrelevantViewConfigs, + + changeLayoutEventName: "change_layout", + changeConfigEventPrefix: "change_view:", + changeConfigNeighboursPrefix: "change_view_neighbours:", + } + ], function(currentDimension) { + + var spyNames = [ + "change", + "changeCollection", + "changeConfig0", + "changeConfig1", + "changeConfig2", + "changeConfigNeighbours0", + "changeConfigNeighbours1", + "changeConfigNeighbours2" + ]; + var spy = jasmine.createSpyObj("listener", spyNames); + + testedConfigGrid.on("change", spy.change, spy); + testedConfigGrid.on(currentDimension.changeLayoutEventName, spy.changeCollection, spy); + testedConfigGrid.on(currentDimension.changeConfigEventPrefix + currentDimension.relevantConfigs[0].getClientId(), spy.changeConfig0, spy); + testedConfigGrid.on(currentDimension.changeConfigEventPrefix + currentDimension.relevantConfigs[1].getClientId(), spy.changeConfig1, spy); + testedConfigGrid.on(currentDimension.changeConfigEventPrefix + currentDimension.relevantConfigs[2].getClientId(), spy.changeConfig2, spy); + + testedConfigGrid.on(currentDimension.changeConfigNeighboursPrefix + currentDimension.relevantConfigs[0].getClientId(), spy.changeConfigNeighbours0, spy); + testedConfigGrid.on(currentDimension.changeConfigNeighboursPrefix + currentDimension.relevantConfigs[1].getClientId(), spy.changeConfigNeighbours1, spy); + testedConfigGrid.on(currentDimension.changeConfigNeighboursPrefix + currentDimension.relevantConfigs[2].getClientId(), spy.changeConfigNeighbours2, spy); + + var expectSpyCallCount = function() { + _.each(arguments, function(arg, i) { + //console.log("___", i, "--->", spy[spyNames[i]].calls.count(), arg); + expect(spy[spyNames[i]].calls.count()).toEqual(arg); + }); + for (var i = arguments.length; i < spyNames.length; i++) { + expect(spy[spyNames[i]].calls.count()).toEqual(0); + } + }; + var resetSpyCallCount = function() { + _.each(spyNames, function(spyName) { + spy[spyName].calls.reset(); + }); + }; + expectSpyCallCount(0); + resetSpyCallCount(); + + testedConfigGrid.unserialize(null); + resetSpyCallCount(); + + // Unserialize the whole grid + var defaultSerializedState = { + entityConfigs: [ + testEntityConfigs[0].serialize(), + testEntityConfigs[1].serialize(), + testEntityConfigs[2].serialize(), + ], + viewConfigs: [ + testViewConfigs[0].serialize(), + testViewConfigs[1].serialize(), + testViewConfigs[2].serialize(), + ], + }; + testedConfigGrid.unserialize(defaultSerializedState); + expectSpyCallCount(1, 1); + + resetSpyCallCount(); + testedConfigGrid.unserialize(defaultSerializedState); + expectSpyCallCount(0, 0); + + // Modify parameters + resetSpyCallCount(); + expectSpyCallCount(0); + + currentDimension.configCollection.at(1).updateParameter("my", 1); + expectSpyCallCount(1, 0, + 0, 1, 0, + 1, 0, 1); + + resetSpyCallCount(); + currentDimension.configCollection.at(2).planParameterUpdate("my", 1); + expectSpyCallCount(1, 0, + 0, 0, 1, + 0, 1, 0); + + resetSpyCallCount(); + currentDimension.configCollection.remove(currentDimension.configCollection.at(2)); + expect(currentDimension.configCollection.size()).toEqual(2); + expectSpyCallCount(1, 1, + 0, 0, 0, + 0, 1, 0); + + resetSpyCallCount(); + testedConfigGrid.unserialize(defaultSerializedState); + expectSpyCallCount(1, 1, + 0, 1, 0, + 1, 1, 0); + + resetSpyCallCount(); + + expect(function() { + testedConfigGrid.relocateEntityConfig(testEntityConfigs[2], 0); + }).toThrow(); + expect(function() { + testedConfigGrid.relocateViewConfig(testViewConfigs[2], 0); + }).toThrow(); + + testedConfigGrid.relocateEntityConfig(testedConfigGrid.entityConfigs.at(1), 0); + testedConfigGrid.relocateViewConfig(testedConfigGrid.viewConfigs.at(1), 0); + expectSpyCallCount(2, 2, + 0, 0, 0, + 1, 1, 1); + + resetSpyCallCount(); + testedConfigGrid.unserialize(defaultSerializedState); + expectSpyCallCount(1, 1, + 0, 0, 0, + 1, 1, 1); + + resetSpyCallCount(); + currentDimension.configCollection.add(currentDimension.irrelevantConfigs[0], {at: 0}); + expectSpyCallCount(1, 1, + 0, 0, 0, + 1, 0, 0); + }); + }); +});