Mercurial > hg > dml-open-vis
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:493bcb69166c |
---|---|
1 "use strict"; | |
2 | |
3 describe("ContextModule.AppContext", function() { | |
4 | |
5 var serializedAppContexts = { | |
6 "empty": { | |
7 "stateHistory": { | |
8 "currentSerializedState": { | |
9 "musicCollectionGrid": { | |
10 "entityConfigs": [], | |
11 "viewConfigs": [], | |
12 }, | |
13 "musicRecordingGrid": { | |
14 "entityConfigs": [], | |
15 "viewConfigs": [], | |
16 } | |
17 }, | |
18 "undoStack": [], | |
19 "redoStack": [] | |
20 }, | |
21 "stateBookmarks": [] | |
22 }, | |
23 | |
24 "empty_faulty1": { | |
25 }, | |
26 "empty_faulty2": 42, | |
27 "empty_faulty3": null, | |
28 | |
29 "empty_incomplete1": { | |
30 "stateHistory": { | |
31 "currentSerializedState": { | |
32 "musicCollectionGrid": { | |
33 "entityConfigs": [], | |
34 "viewConfigs": [], | |
35 }, | |
36 }, | |
37 "redoStack": [] | |
38 }, | |
39 "stateBookmarks": [] | |
40 }, | |
41 "empty_incomplete2": { | |
42 "stateHistory": { | |
43 "currentSerializedState": null, | |
44 "undoStack": [], | |
45 "redoStack": [] | |
46 }, | |
47 "stateBookmarks": [] | |
48 }, | |
49 }; | |
50 | |
51 it("is promptly created", function() { | |
52 var testedAppContext = new App.ContextModule.AppContext(); | |
53 | |
54 expect(testedAppContext).not.toBe(null); | |
55 | |
56 expect(testedAppContext.get("state")).not.toBe(null); | |
57 expect(testedAppContext.get("state") instanceof App.ContextModule.State).toBe(true); | |
58 | |
59 expect(testedAppContext.get("stateHistory")).not.toBe(null); | |
60 expect(testedAppContext.get("stateHistory") instanceof App.ContextModule.StateHistory).toBe(true); | |
61 | |
62 expect(testedAppContext.get("stateBookmarks")).not.toBe(null); | |
63 expect(testedAppContext.get("stateBookmarks") instanceof App.ContextModule.StateBookmarkCollection).toBe(true); | |
64 | |
65 }); | |
66 | |
67 it("serializes and unserializes itself", function() { | |
68 var testedAppContext = new App.ContextModule.AppContext(); | |
69 | |
70 testedAppContext.unserialize(serializedAppContexts["empty"]); | |
71 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
72 | |
73 testedAppContext.unserialize(serializedAppContexts["empty_faulty1"]); | |
74 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
75 | |
76 testedAppContext.unserialize(serializedAppContexts["empty_faulty2"]); | |
77 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
78 | |
79 testedAppContext.unserialize(serializedAppContexts["empty_faulty3"]); | |
80 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
81 | |
82 testedAppContext.unserialize(serializedAppContexts["empty_incomplete1"]); | |
83 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
84 | |
85 testedAppContext.unserialize(serializedAppContexts["empty_incomplete2"]); | |
86 expect(testedAppContext.serialize()).toEqual(serializedAppContexts["empty"]); | |
87 }); | |
88 | |
89 it("triggers change events when something changes", function() { | |
90 var testedAppContext = new App.ContextModule.AppContext(); | |
91 | |
92 var spyNames = [ | |
93 "change", | |
94 "changeState", | |
95 "changeStateHistory", | |
96 "changeStateBookmarks", | |
97 ]; | |
98 var spy = jasmine.createSpyObj("listener", spyNames); | |
99 var expectSpyCallCount = function() { | |
100 _.each(arguments, function(arg, i) { | |
101 //console.log("___", i, "--->", spy[spyNames[i]].calls.count(), arg); | |
102 expect(spy[spyNames[i]].calls.count()).toEqual(arg); | |
103 }); | |
104 for (var i = arguments.length; i < spyNames.length; i++) { | |
105 //console.log("___", i, "--->", spy[spyNames[i]].calls.count(), 0); | |
106 expect(spy[spyNames[i]].calls.count()).toEqual(0); | |
107 } | |
108 }; | |
109 var resetSpyCallCount = function() { | |
110 _.each(spyNames, function(spyName) { | |
111 spy[spyName].calls.reset(); | |
112 }); | |
113 }; | |
114 var expectSpyCallCountAndReset = function() { | |
115 expectSpyCallCount.apply(null, arguments); | |
116 resetSpyCallCount(); | |
117 }; | |
118 | |
119 testedAppContext.on("change", spy["change"]); | |
120 testedAppContext.get("state").on("change", spy["changeState"]); | |
121 testedAppContext.get("stateHistory").on("change", spy["changeStateHistory"]); | |
122 testedAppContext.get("stateBookmarks").on("change", spy["changeStateBookmarks"]); | |
123 | |
124 expectSpyCallCountAndReset(0); | |
125 | |
126 testedAppContext.unserialize(serializedAppContexts["empty"]); | |
127 expectSpyCallCountAndReset(0); | |
128 | |
129 testedAppContext.unserialize(serializedAppContexts["empty_faulty1"]); | |
130 expectSpyCallCountAndReset(0); | |
131 expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); | |
132 expect(testedAppContext.get("stateHistory").canRedo()).toEqual(false); | |
133 | |
134 testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.add(new App.ContextModule.Config({ | |
135 "parameters": { | |
136 "x": 2, | |
137 "y": 3, | |
138 } | |
139 })); | |
140 expectSpyCallCountAndReset(1, 1, 1); | |
141 testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).planParameterUpdate("x", 10); | |
142 expectSpyCallCountAndReset(1, 1, 1); | |
143 testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).applyPlannedParameterUpdates(); | |
144 expectSpyCallCountAndReset(1, 1, 1); | |
145 testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).planParameterUpdate("x", 10); | |
146 expectSpyCallCountAndReset(0, 0, 0); | |
147 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getParameterValue("x")).toEqual(10); | |
148 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getPlannedParameterValue("x")).toEqual(10); | |
149 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).isPlannedToUpdate("x")).toEqual(false); | |
150 | |
151 testedAppContext.get("stateHistory").undo(); | |
152 expectSpyCallCountAndReset(1, 1, 1); | |
153 expect(testedAppContext.get("stateHistory").canUndo()).toEqual(true); | |
154 expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); | |
155 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getParameterValue("x")).toEqual(2); | |
156 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).getPlannedParameterValue("x")).toEqual(10); | |
157 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.at(0).isPlannedToUpdate("x")).toEqual(true); | |
158 | |
159 testedAppContext.get("stateHistory").undo(); | |
160 testedAppContext.get("stateHistory").undo(); | |
161 expectSpyCallCountAndReset(2, 2, 2); | |
162 expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); | |
163 expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); | |
164 expect(testedAppContext.get("state").get("musicCollectionGrid").entityConfigs.size()).toEqual(0); | |
165 | |
166 testedAppContext.get("stateHistory").redo(); | |
167 expectSpyCallCountAndReset(1, 1, 1); | |
168 expect(testedAppContext.get("stateHistory").canUndo()).toEqual(true); | |
169 expect(testedAppContext.get("stateHistory").canRedo()).toEqual(true); | |
170 | |
171 testedAppContext.unserialize(serializedAppContexts["empty"]); | |
172 expectSpyCallCountAndReset(1, 1, 1); | |
173 expect(testedAppContext.get("stateHistory").canUndo()).toEqual(false); | |
174 expect(testedAppContext.get("stateHistory").canRedo()).toEqual(false); | |
175 }); | |
176 }); |