Mercurial > hg > dml-open-vis
diff src/DML/MainVisBundle/Resources/assets/jasmine/marionette/[t]ContextModule.40-AppContext.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.40-AppContext.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,176 @@ +"use strict"; + +describe("ContextModule.AppContext", function() { + + var serializedAppContexts = { + "empty": { + "stateHistory": { + "currentSerializedState": { + "musicCollectionGrid": { + "entityConfigs": [], + "viewConfigs": [], + }, + "musicRecordingGrid": { + "entityConfigs": [], + "viewConfigs": [], + } + }, + "undoStack": [], + "redoStack": [] + }, + "stateBookmarks": [] + }, + + "empty_faulty1": { + }, + "empty_faulty2": 42, + "empty_faulty3": null, + + "empty_incomplete1": { + "stateHistory": { + "currentSerializedState": { + "musicCollectionGrid": { + "entityConfigs": [], + "viewConfigs": [], + }, + }, + "redoStack": [] + }, + "stateBookmarks": [] + }, + "empty_incomplete2": { + "stateHistory": { + "currentSerializedState": null, + "undoStack": [], + "redoStack": [] + }, + "stateBookmarks": [] + }, + }; + + it("is promptly created", function() { + var testedAppContext = new App.ContextModule.AppContext(); + + expect(testedAppContext).not.toBe(null); + + expect(testedAppContext.get("state")).not.toBe(null); + expect(testedAppContext.get("state") instanceof App.ContextModule.State).toBe(true); + + expect(testedAppContext.get("stateHistory")).not.toBe(null); + expect(testedAppContext.get("stateHistory") instanceof App.ContextModule.StateHistory).toBe(true); + + expect(testedAppContext.get("stateBookmarks")).not.toBe(null); + expect(testedAppContext.get("stateBookmarks") instanceof App.ContextModule.StateBookmarkCollection).toBe(true); + + }); + + it("serializes and unserializes itself", function() { + var testedAppContext = new App.ContextModule.AppContext(); + + testedAppContext.unserialize(serializedAppContexts["empty"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + + testedAppContext.unserialize(serializedAppContexts["empty_faulty1"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + + testedAppContext.unserialize(serializedAppContexts["empty_faulty2"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + + testedAppContext.unserialize(serializedAppContexts["empty_faulty3"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + + testedAppContext.unserialize(serializedAppContexts["empty_incomplete1"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + + testedAppContext.unserialize(serializedAppContexts["empty_incomplete2"]); + expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); + }); + + it("triggers change events when something changes", function() { + var testedAppContext = new App.ContextModule.AppContext(); + + var spyNames = [ + "change", + "changeState", + "changeStateHistory", + "changeStateBookmarks", + ]; + var spy = jasmine.createSpyObj("listener", spyNames); + 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++) { + //console.log("___", i, "--->", spy[spyNames[i]].calls.count(), 0); + expect(spy[spyNames[i]].calls.count()).toEqual(0); + } + }; + var resetSpyCallCount = function() { + _.each(spyNames, function(spyName) { + spy[spyName].calls.reset(); + }); + }; + var expectSpyCallCountAndReset = function() { + expectSpyCallCount.apply(null, arguments); + resetSpyCallCount(); + }; + + testedAppContext.on("change", spy["change"]); + testedAppContext.get("state").on("change", spy["changeState"]); + testedAppContext.get("stateHistory").on("change", spy["changeStateHistory"]); + testedAppContext.get("stateBookmarks").on("change", spy["changeStateBookmarks"]); + + expectSpyCallCountAndReset(0); + + testedAppContext.unserialize(serializedAppContexts["empty"]); + expectSpyCallCountAndReset(0); + + testedAppContext.unserialize(serializedAppContexts["empty_faulty1"]); + expectSpyCallCountAndReset(0); + expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); + expect(testedAppContext.get("stateHistory").canRedo()).toEqual(false); + + testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.add(new App.ContextModule.Config({ + "parameters": { + "x": 2, + "y": 3, + } + })); + expectSpyCallCountAndReset(1, 1, 1); + testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).planParameterUpdate("x", 10); + expectSpyCallCountAndReset(1, 1, 1); + testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).applyPlannedParameterUpdates(); + expectSpyCallCountAndReset(1, 1, 1); + testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).planParameterUpdate("x", 10); + expectSpyCallCountAndReset(0, 0, 0); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getParameterValue("x")).toEqual(10); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getPlannedParameterValue("x")).toEqual(10); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).isPlannedToUpdate("x")).toEqual(false); + + testedAppContext.get("stateHistory").undo(); + expectSpyCallCountAndReset(1, 1, 1); + expect(testedAppContext.get("stateHistory").canUndo()).toEqual(true); + expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getParameterValue("x")).toEqual(2); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getPlannedParameterValue("x")).toEqual(10); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).isPlannedToUpdate("x")).toEqual(true); + + testedAppContext.get("stateHistory").undo(); + testedAppContext.get("stateHistory").undo(); + expectSpyCallCountAndReset(2, 2, 2); + expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); + expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); + expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.size()).toEqual(0); + + testedAppContext.get("stateHistory").redo(); + expectSpyCallCountAndReset(1, 1, 1); + expect(testedAppContext.get("stateHistory").canUndo()).toEqual(true); + expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); + + testedAppContext.unserialize(serializedAppContexts["empty"]); + expectSpyCallCountAndReset(1, 1, 1); + expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); + expect(testedAppContext.get("stateHistory").canRedo()).toEqual(false); + }); +});