@vived/host 4.0.3 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/StateMachine/Adapters/hostStateAdapter.js +24 -0
- package/dist/cjs/StateMachine/Adapters/hostStateAdapter.js.map +1 -0
- package/dist/cjs/StateMachine/Adapters/hostStateAdapter.test.js +49 -0
- package/dist/cjs/StateMachine/Adapters/hostStateAdapter.test.js.map +1 -0
- package/dist/cjs/StateMachine/Adapters/index.js +1 -0
- package/dist/cjs/StateMachine/Adapters/index.js.map +1 -1
- package/dist/cjs/StateMachine/Controllers/editStateName.js +13 -0
- package/dist/cjs/StateMachine/Controllers/editStateName.js.map +1 -0
- package/dist/cjs/StateMachine/Controllers/editStateName.test.js +49 -0
- package/dist/cjs/StateMachine/Controllers/editStateName.test.js.map +1 -0
- package/dist/cjs/StateMachine/Controllers/index.js +1 -0
- package/dist/cjs/StateMachine/Controllers/index.js.map +1 -1
- package/dist/cjs/StateMachine/Entities/HostStateMachine.js +67 -24
- package/dist/cjs/StateMachine/Entities/HostStateMachine.js.map +1 -1
- package/dist/cjs/StateMachine/Entities/HostStateMachine.test.js +174 -0
- package/dist/cjs/StateMachine/Entities/HostStateMachine.test.js.map +1 -1
- package/dist/cjs/StateMachine/Mocks/MockEditStateNameUC.js +12 -0
- package/dist/cjs/StateMachine/Mocks/MockEditStateNameUC.js.map +1 -0
- package/dist/cjs/StateMachine/Mocks/MockHostStatePM.js +23 -0
- package/dist/cjs/StateMachine/Mocks/MockHostStatePM.js.map +1 -0
- package/dist/cjs/StateMachine/PMs/HostStateMachinePM.js +21 -15
- package/dist/cjs/StateMachine/PMs/HostStateMachinePM.js.map +1 -1
- package/dist/cjs/StateMachine/PMs/HostStateMachinePM.test.js +65 -56
- package/dist/cjs/StateMachine/PMs/HostStateMachinePM.test.js.map +1 -1
- package/dist/cjs/StateMachine/PMs/HostStatePM.js +136 -0
- package/dist/cjs/StateMachine/PMs/HostStatePM.js.map +1 -0
- package/dist/cjs/StateMachine/PMs/HostStatePM.test.js +405 -0
- package/dist/cjs/StateMachine/PMs/HostStatePM.test.js.map +1 -0
- package/dist/cjs/StateMachine/PMs/index.js +1 -0
- package/dist/cjs/StateMachine/PMs/index.js.map +1 -1
- package/dist/cjs/StateMachine/UCs/EditStateNameUC.js +35 -0
- package/dist/cjs/StateMachine/UCs/EditStateNameUC.js.map +1 -0
- package/dist/cjs/StateMachine/UCs/EditStateNameUC.test.js +58 -0
- package/dist/cjs/StateMachine/UCs/EditStateNameUC.test.js.map +1 -0
- package/dist/cjs/StateMachine/UCs/index.js +1 -0
- package/dist/cjs/StateMachine/UCs/index.js.map +1 -1
- package/dist/esm/StateMachine/Adapters/hostStateAdapter.js +21 -0
- package/dist/esm/StateMachine/Adapters/hostStateAdapter.js.map +1 -0
- package/dist/esm/StateMachine/Adapters/hostStateAdapter.test.js +47 -0
- package/dist/esm/StateMachine/Adapters/hostStateAdapter.test.js.map +1 -0
- package/dist/esm/StateMachine/Adapters/index.js +1 -0
- package/dist/esm/StateMachine/Adapters/index.js.map +1 -1
- package/dist/esm/StateMachine/Controllers/editStateName.js +10 -0
- package/dist/esm/StateMachine/Controllers/editStateName.js.map +1 -0
- package/dist/esm/StateMachine/Controllers/editStateName.test.js +47 -0
- package/dist/esm/StateMachine/Controllers/editStateName.test.js.map +1 -0
- package/dist/esm/StateMachine/Controllers/index.js +1 -0
- package/dist/esm/StateMachine/Controllers/index.js.map +1 -1
- package/dist/esm/StateMachine/Entities/HostStateMachine.js +67 -24
- package/dist/esm/StateMachine/Entities/HostStateMachine.js.map +1 -1
- package/dist/esm/StateMachine/Entities/HostStateMachine.test.js +174 -0
- package/dist/esm/StateMachine/Entities/HostStateMachine.test.js.map +1 -1
- package/dist/esm/StateMachine/Mocks/MockEditStateNameUC.js +8 -0
- package/dist/esm/StateMachine/Mocks/MockEditStateNameUC.js.map +1 -0
- package/dist/esm/StateMachine/Mocks/MockHostStatePM.js +18 -0
- package/dist/esm/StateMachine/Mocks/MockHostStatePM.js.map +1 -0
- package/dist/esm/StateMachine/PMs/HostStateMachinePM.js +21 -15
- package/dist/esm/StateMachine/PMs/HostStateMachinePM.js.map +1 -1
- package/dist/esm/StateMachine/PMs/HostStateMachinePM.test.js +65 -56
- package/dist/esm/StateMachine/PMs/HostStateMachinePM.test.js.map +1 -1
- package/dist/esm/StateMachine/PMs/HostStatePM.js +131 -0
- package/dist/esm/StateMachine/PMs/HostStatePM.js.map +1 -0
- package/dist/esm/StateMachine/PMs/HostStatePM.test.js +403 -0
- package/dist/esm/StateMachine/PMs/HostStatePM.test.js.map +1 -0
- package/dist/esm/StateMachine/PMs/index.js +1 -0
- package/dist/esm/StateMachine/PMs/index.js.map +1 -1
- package/dist/esm/StateMachine/UCs/EditStateNameUC.js +30 -0
- package/dist/esm/StateMachine/UCs/EditStateNameUC.js.map +1 -0
- package/dist/esm/StateMachine/UCs/EditStateNameUC.test.js +56 -0
- package/dist/esm/StateMachine/UCs/EditStateNameUC.test.js.map +1 -0
- package/dist/esm/StateMachine/UCs/index.js +1 -0
- package/dist/esm/StateMachine/UCs/index.js.map +1 -1
- package/dist/types/StateMachine/Adapters/hostStateAdapter.d.ts +4 -0
- package/dist/types/StateMachine/Adapters/hostStateAdapter.d.ts.map +1 -0
- package/dist/types/StateMachine/Adapters/hostStateAdapter.test.d.ts +2 -0
- package/dist/types/StateMachine/Adapters/hostStateAdapter.test.d.ts.map +1 -0
- package/dist/types/StateMachine/Adapters/index.d.ts +1 -0
- package/dist/types/StateMachine/Adapters/index.d.ts.map +1 -1
- package/dist/types/StateMachine/Controllers/editStateName.d.ts +3 -0
- package/dist/types/StateMachine/Controllers/editStateName.d.ts.map +1 -0
- package/dist/types/StateMachine/Controllers/editStateName.test.d.ts +2 -0
- package/dist/types/StateMachine/Controllers/editStateName.test.d.ts.map +1 -0
- package/dist/types/StateMachine/Controllers/index.d.ts +1 -0
- package/dist/types/StateMachine/Controllers/index.d.ts.map +1 -1
- package/dist/types/StateMachine/Entities/HostStateMachine.d.ts +6 -0
- package/dist/types/StateMachine/Entities/HostStateMachine.d.ts.map +1 -1
- package/dist/types/StateMachine/Mocks/MockEditStateNameUC.d.ts +7 -0
- package/dist/types/StateMachine/Mocks/MockEditStateNameUC.d.ts.map +1 -0
- package/dist/types/StateMachine/Mocks/MockHostStatePM.d.ts +9 -0
- package/dist/types/StateMachine/Mocks/MockHostStatePM.d.ts.map +1 -0
- package/dist/types/StateMachine/PMs/HostStateMachinePM.d.ts +3 -4
- package/dist/types/StateMachine/PMs/HostStateMachinePM.d.ts.map +1 -1
- package/dist/types/StateMachine/PMs/HostStatePM.d.ts +18 -0
- package/dist/types/StateMachine/PMs/HostStatePM.d.ts.map +1 -0
- package/dist/types/StateMachine/PMs/HostStatePM.test.d.ts +2 -0
- package/dist/types/StateMachine/PMs/HostStatePM.test.d.ts.map +1 -0
- package/dist/types/StateMachine/PMs/index.d.ts +1 -0
- package/dist/types/StateMachine/PMs/index.d.ts.map +1 -1
- package/dist/types/StateMachine/UCs/EditStateNameUC.d.ts +9 -0
- package/dist/types/StateMachine/UCs/EditStateNameUC.d.ts.map +1 -0
- package/dist/types/StateMachine/UCs/EditStateNameUC.test.d.ts +2 -0
- package/dist/types/StateMachine/UCs/EditStateNameUC.test.d.ts.map +1 -0
- package/dist/types/StateMachine/UCs/index.d.ts +1 -0
- package/dist/types/StateMachine/UCs/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -128,5 +128,179 @@ describe("State Machine", () => {
|
|
|
128
128
|
expect(stateMachine.hasState("state1")).toEqual(true);
|
|
129
129
|
expect(stateMachine.hasState("somethingElse")).toEqual(false);
|
|
130
130
|
});
|
|
131
|
+
it("Reports correct state count", () => {
|
|
132
|
+
const { stateMachine } = makeTestRig();
|
|
133
|
+
// Initial state has 2 states
|
|
134
|
+
expect(stateMachine.stateCount).toEqual(2);
|
|
135
|
+
// After adding a state
|
|
136
|
+
stateMachine.createNewState();
|
|
137
|
+
expect(stateMachine.stateCount).toEqual(3);
|
|
138
|
+
// After deleting a state
|
|
139
|
+
stateMachine.deleteState("state1");
|
|
140
|
+
expect(stateMachine.stateCount).toEqual(2);
|
|
141
|
+
});
|
|
142
|
+
it("Sets active state by index", () => {
|
|
143
|
+
const { stateMachine, observer } = makeTestRig();
|
|
144
|
+
observer.mockClear();
|
|
145
|
+
stateMachine.setActiveStateByIndex(1);
|
|
146
|
+
expect(stateMachine.activeState).toEqual("state2");
|
|
147
|
+
expect(observer).toBeCalled();
|
|
148
|
+
});
|
|
149
|
+
it("Does nothing if index is out of bounds", () => {
|
|
150
|
+
const { stateMachine, observer } = makeTestRig();
|
|
151
|
+
observer.mockClear();
|
|
152
|
+
// With negative index
|
|
153
|
+
stateMachine.setActiveStateByIndex(-1);
|
|
154
|
+
expect(stateMachine.activeState).toBeUndefined();
|
|
155
|
+
expect(observer).not.toBeCalled();
|
|
156
|
+
// With too large index
|
|
157
|
+
stateMachine.setActiveStateByIndex(5);
|
|
158
|
+
expect(stateMachine.activeState).toBeUndefined();
|
|
159
|
+
expect(observer).not.toBeCalled();
|
|
160
|
+
});
|
|
161
|
+
it("Sets previous and next state correctly when using setActiveStateByIndex", () => {
|
|
162
|
+
const { stateMachine } = makeTestRig();
|
|
163
|
+
stateMachine.createNewState(); // Now 3 states
|
|
164
|
+
stateMachine.setActiveStateByIndex(1);
|
|
165
|
+
expect(stateMachine.activeState).toEqual("state2");
|
|
166
|
+
expect(stateMachine.previousState).toEqual("state1");
|
|
167
|
+
expect(stateMachine.nextState).not.toBeUndefined();
|
|
168
|
+
});
|
|
169
|
+
it("Deletes all states", () => {
|
|
170
|
+
const { stateMachine, observer } = makeTestRig();
|
|
171
|
+
observer.mockClear();
|
|
172
|
+
stateMachine.deleteAllStates();
|
|
173
|
+
expect(stateMachine.states).toHaveLength(0);
|
|
174
|
+
expect(stateMachine.stateCount).toEqual(0);
|
|
175
|
+
expect(observer).toBeCalled();
|
|
176
|
+
});
|
|
177
|
+
it("Does not notify if there are no states to delete", () => {
|
|
178
|
+
const { stateMachine, observer } = makeTestRig();
|
|
179
|
+
stateMachine.deleteAllStates(); // Clear all states first
|
|
180
|
+
observer.mockClear();
|
|
181
|
+
stateMachine.deleteAllStates(); // Try again with empty states
|
|
182
|
+
expect(observer).not.toBeCalled();
|
|
183
|
+
});
|
|
184
|
+
it("Disposes all state app objects when deleting all states", () => {
|
|
185
|
+
const { stateMachine } = makeTestRig();
|
|
186
|
+
// Create mock dispose functions for each state
|
|
187
|
+
const state1 = stateMachine.getStateByID("state1");
|
|
188
|
+
const state2 = stateMachine.getStateByID("state2");
|
|
189
|
+
expect(state1).not.toBeUndefined();
|
|
190
|
+
expect(state2).not.toBeUndefined();
|
|
191
|
+
state1.appObject.dispose = jest.fn();
|
|
192
|
+
state2.appObject.dispose = jest.fn();
|
|
193
|
+
stateMachine.deleteAllStates();
|
|
194
|
+
expect(state1.appObject.dispose).toBeCalled();
|
|
195
|
+
expect(state2.appObject.dispose).toBeCalled();
|
|
196
|
+
});
|
|
197
|
+
it("Clears active state when deleting all states", () => {
|
|
198
|
+
const { stateMachine } = makeTestRig();
|
|
199
|
+
stateMachine.setActiveStateByID("state1");
|
|
200
|
+
expect(stateMachine.activeState).toEqual("state1");
|
|
201
|
+
stateMachine.deleteAllStates();
|
|
202
|
+
expect(stateMachine.activeState).toBeUndefined();
|
|
203
|
+
expect(stateMachine.previousState).toBeUndefined();
|
|
204
|
+
expect(stateMachine.nextState).toBeUndefined();
|
|
205
|
+
});
|
|
206
|
+
it("Sets previous state active", () => {
|
|
207
|
+
const { stateMachine, observer } = makeTestRig();
|
|
208
|
+
// Set state2 as active so state1 becomes the previous state
|
|
209
|
+
stateMachine.setActiveStateByID("state2");
|
|
210
|
+
observer.mockClear();
|
|
211
|
+
// Now call setPreviousStateActive
|
|
212
|
+
stateMachine.setPreviousStateActive();
|
|
213
|
+
expect(stateMachine.activeState).toEqual("state1");
|
|
214
|
+
expect(observer).toBeCalled();
|
|
215
|
+
});
|
|
216
|
+
it("Does nothing when setting previous state active if there is no previous state", () => {
|
|
217
|
+
const { stateMachine, observer } = makeTestRig();
|
|
218
|
+
// Set state1 as active (which has no previous state)
|
|
219
|
+
stateMachine.setActiveStateByID("state1");
|
|
220
|
+
observer.mockClear();
|
|
221
|
+
// Now call setPreviousStateActive
|
|
222
|
+
stateMachine.setPreviousStateActive();
|
|
223
|
+
// Should remain on state1
|
|
224
|
+
expect(stateMachine.activeState).toEqual("state1");
|
|
225
|
+
expect(observer).not.toHaveBeenCalled();
|
|
226
|
+
});
|
|
227
|
+
it("Sets next state active", () => {
|
|
228
|
+
const { stateMachine, observer } = makeTestRig();
|
|
229
|
+
// Set state1 as active so state2 becomes the next state
|
|
230
|
+
stateMachine.setActiveStateByID("state1");
|
|
231
|
+
observer.mockClear();
|
|
232
|
+
// Now call setNextStateActive
|
|
233
|
+
stateMachine.setNextStateActive();
|
|
234
|
+
expect(stateMachine.activeState).toEqual("state2");
|
|
235
|
+
expect(observer).toHaveBeenCalled();
|
|
236
|
+
});
|
|
237
|
+
it("Does nothing when setting next state active if there is no next state", () => {
|
|
238
|
+
const { stateMachine, observer } = makeTestRig();
|
|
239
|
+
// Set state2 as active (which has no next state)
|
|
240
|
+
stateMachine.setActiveStateByID("state2");
|
|
241
|
+
observer.mockClear();
|
|
242
|
+
// Now call setNextStateActive
|
|
243
|
+
stateMachine.setNextStateActive();
|
|
244
|
+
// Should remain on state2
|
|
245
|
+
expect(stateMachine.activeState).toEqual("state2");
|
|
246
|
+
expect(observer).not.toHaveBeenCalled();
|
|
247
|
+
});
|
|
248
|
+
it("Sets state index", () => {
|
|
249
|
+
const { stateMachine, observer } = makeTestRig();
|
|
250
|
+
observer.mockClear();
|
|
251
|
+
// Save the initial states order
|
|
252
|
+
const initialStates = [...stateMachine.states];
|
|
253
|
+
// Move state2 to index 0 (before state1)
|
|
254
|
+
stateMachine.setStateIndex("state2", 0);
|
|
255
|
+
// Check that the order changed correctly
|
|
256
|
+
expect(stateMachine.states[0]).toEqual("state2");
|
|
257
|
+
expect(stateMachine.states[1]).toEqual("state1");
|
|
258
|
+
expect(observer).toHaveBeenCalled();
|
|
259
|
+
});
|
|
260
|
+
it("Does nothing if state ID doesn't exist when setting state index", () => {
|
|
261
|
+
const { stateMachine, observer } = makeTestRig();
|
|
262
|
+
observer.mockClear();
|
|
263
|
+
// Save the initial states order
|
|
264
|
+
const initialStates = [...stateMachine.states];
|
|
265
|
+
// Try to move a non-existent state
|
|
266
|
+
stateMachine.setStateIndex("nonExistentState", 0);
|
|
267
|
+
// Check that states remain unchanged
|
|
268
|
+
expect(stateMachine.states).toEqual(initialStates);
|
|
269
|
+
expect(observer).not.toHaveBeenCalled();
|
|
270
|
+
});
|
|
271
|
+
it("Does nothing if index is out of bounds when setting state index", () => {
|
|
272
|
+
const { stateMachine, observer } = makeTestRig();
|
|
273
|
+
observer.mockClear();
|
|
274
|
+
// Save the initial states order
|
|
275
|
+
const initialStates = [...stateMachine.states];
|
|
276
|
+
// Try to move to an invalid index (negative)
|
|
277
|
+
stateMachine.setStateIndex("state1", -1);
|
|
278
|
+
expect(stateMachine.states).toEqual(initialStates);
|
|
279
|
+
expect(observer).not.toHaveBeenCalled();
|
|
280
|
+
// Try to move to an invalid index (too large)
|
|
281
|
+
stateMachine.setStateIndex("state1", 10);
|
|
282
|
+
expect(stateMachine.states).toEqual(initialStates);
|
|
283
|
+
expect(observer).not.toHaveBeenCalled();
|
|
284
|
+
});
|
|
285
|
+
it("Does nothing if moving state to its current index", () => {
|
|
286
|
+
const { stateMachine, observer } = makeTestRig();
|
|
287
|
+
observer.mockClear();
|
|
288
|
+
// Try to move state1 to index 0 (its current position)
|
|
289
|
+
stateMachine.setStateIndex("state1", 0);
|
|
290
|
+
// Verify no notification happened
|
|
291
|
+
expect(observer).not.toHaveBeenCalled();
|
|
292
|
+
});
|
|
293
|
+
it("Updates active state relationships when moving the active state", () => {
|
|
294
|
+
const { stateMachine } = makeTestRig();
|
|
295
|
+
// Set state1 as active
|
|
296
|
+
stateMachine.setActiveStateByID("state1");
|
|
297
|
+
expect(stateMachine.nextState).toEqual("state2");
|
|
298
|
+
// Move state1 after state2
|
|
299
|
+
stateMachine.setStateIndex("state1", 1);
|
|
300
|
+
// Check that relationships updated correctly
|
|
301
|
+
expect(stateMachine.activeState).toEqual("state1");
|
|
302
|
+
expect(stateMachine.previousState).toEqual("state2");
|
|
303
|
+
expect(stateMachine.nextState).toBeUndefined();
|
|
304
|
+
});
|
|
131
305
|
});
|
|
132
306
|
//# sourceMappingURL=HostStateMachine.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostStateMachine.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/HostStateMachine.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeHostStateEntity } from \"./HostStateEntity\";\r\nimport { HostStateMachine, makeHostStateMachine } from \"./HostStateMachine\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n\r\n const stateMachine = makeHostStateMachine(\r\n appObjects.getOrCreate(\"StateMachine\")\r\n );\r\n const observer = jest.fn();\r\n stateMachine.addChangeObserver(observer);\r\n\r\n stateMachine.setStates([\r\n makeHostStateEntity(appObjects.getOrCreate(\"state1\")),\r\n makeHostStateEntity(appObjects.getOrCreate(\"state2\"))\r\n ]);\r\n\r\n return { stateMachine, observer, appObjects, registerSingletonSpy };\r\n}\r\n\r\ndescribe(\"State Machine\", () => {\r\n it(\"Gets the singleton\", () => {\r\n const { stateMachine, appObjects } = makeTestRig();\r\n\r\n expect(HostStateMachine.get(appObjects)).toEqual(stateMachine);\r\n });\r\n\r\n it(\"Register as the singleton\", () => {\r\n const { stateMachine, registerSingletonSpy } = makeTestRig();\r\n\r\n expect(registerSingletonSpy).toBeCalledWith(stateMachine);\r\n });\r\n\r\n it(\"Allows states to be set\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n expect(stateMachine.states).toHaveLength(2);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Creates a new state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n const newState = stateMachine.createNewState();\r\n\r\n expect(newState.id).not.toBeFalsy();\r\n\r\n expect(stateMachine.states).toHaveLength(3);\r\n expect(stateMachine.states[2]).toEqual(newState.id);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Retrieves a state\", () => {\r\n const { stateMachine } = makeTestRig();\r\n const newState = stateMachine.createNewState();\r\n const retrievedStateResult = stateMachine.getStateByID(newState.id);\r\n\r\n expect(retrievedStateResult).toEqual(newState);\r\n });\r\n\r\n it(\"Returns undefined if an unknowns state is requested\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const retrievedStateResult = stateMachine.getStateByID(\"unknownID\");\r\n expect(retrievedStateResult).toBeUndefined();\r\n });\r\n\r\n it(\"Deletes a state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.deleteState(\"state1\");\r\n\r\n expect(stateMachine.states).toHaveLength(1);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Disposes the State's AO on delete\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const stateAO = stateMachine.getStateByID(\"state1\")?.appObject;\r\n expect(stateAO).not.toBeUndefined();\r\n\r\n stateAO!.dispose = jest.fn();\r\n\r\n stateMachine.deleteState(\"state1\");\r\n\r\n expect(stateAO!.dispose).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify is a unknown state is deleted\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.deleteState(\"UnknownID\");\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Gets an index for a state by id\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const indexResult = stateMachine.getStateIndex(\"state1\");\r\n expect(indexResult).toEqual(0);\r\n });\r\n\r\n it(\"Notifies when the active state is set\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n expect(stateMachine.activeState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify if the active state is unchanged\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n stateMachine.setActiveStateByID(\"state1\");\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Notifies when the active state is cleared\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n stateMachine.clearActiveState();\r\n\r\n expect(stateMachine.activeState).toBeUndefined();\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify when the active state is cleared if there is no active state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n observer.mockClear();\r\n\r\n stateMachine.clearActiveState();\r\n stateMachine.clearActiveState();\r\n stateMachine.clearActiveState();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Sets previous state as expected\", () => {\r\n const { stateMachine } = makeTestRig();\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.previousState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n expect(stateMachine.previousState).toEqual(\"state1\");\r\n\r\n stateMachine.clearActiveState();\r\n\r\n expect(stateMachine.previousState).toBeUndefined();\r\n });\r\n\r\n it(\"Sets next state as expected\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n expect(stateMachine.nextState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.nextState).toEqual(\"state2\");\r\n\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n expect(stateMachine.nextState).toBeUndefined();\r\n });\r\n\r\n it(\"Has state\", () => {\r\n const { stateMachine } = makeTestRig();\r\n expect(stateMachine.hasState(\"state1\")).toEqual(true);\r\n expect(stateMachine.hasState(\"somethingElse\")).toEqual(false);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"HostStateMachine.test.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/HostStateMachine.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeHostStateEntity } from \"./HostStateEntity\";\r\nimport { HostStateMachine, makeHostStateMachine } from \"./HostStateMachine\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n\r\n const stateMachine = makeHostStateMachine(\r\n appObjects.getOrCreate(\"StateMachine\")\r\n );\r\n const observer = jest.fn();\r\n stateMachine.addChangeObserver(observer);\r\n\r\n stateMachine.setStates([\r\n makeHostStateEntity(appObjects.getOrCreate(\"state1\")),\r\n makeHostStateEntity(appObjects.getOrCreate(\"state2\"))\r\n ]);\r\n\r\n return { stateMachine, observer, appObjects, registerSingletonSpy };\r\n}\r\n\r\ndescribe(\"State Machine\", () => {\r\n it(\"Gets the singleton\", () => {\r\n const { stateMachine, appObjects } = makeTestRig();\r\n\r\n expect(HostStateMachine.get(appObjects)).toEqual(stateMachine);\r\n });\r\n\r\n it(\"Register as the singleton\", () => {\r\n const { stateMachine, registerSingletonSpy } = makeTestRig();\r\n\r\n expect(registerSingletonSpy).toBeCalledWith(stateMachine);\r\n });\r\n\r\n it(\"Allows states to be set\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n expect(stateMachine.states).toHaveLength(2);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Creates a new state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n const newState = stateMachine.createNewState();\r\n\r\n expect(newState.id).not.toBeFalsy();\r\n\r\n expect(stateMachine.states).toHaveLength(3);\r\n expect(stateMachine.states[2]).toEqual(newState.id);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Retrieves a state\", () => {\r\n const { stateMachine } = makeTestRig();\r\n const newState = stateMachine.createNewState();\r\n const retrievedStateResult = stateMachine.getStateByID(newState.id);\r\n\r\n expect(retrievedStateResult).toEqual(newState);\r\n });\r\n\r\n it(\"Returns undefined if an unknowns state is requested\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const retrievedStateResult = stateMachine.getStateByID(\"unknownID\");\r\n expect(retrievedStateResult).toBeUndefined();\r\n });\r\n\r\n it(\"Deletes a state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.deleteState(\"state1\");\r\n\r\n expect(stateMachine.states).toHaveLength(1);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Disposes the State's AO on delete\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const stateAO = stateMachine.getStateByID(\"state1\")?.appObject;\r\n expect(stateAO).not.toBeUndefined();\r\n\r\n stateAO!.dispose = jest.fn();\r\n\r\n stateMachine.deleteState(\"state1\");\r\n\r\n expect(stateAO!.dispose).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify is a unknown state is deleted\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.deleteState(\"UnknownID\");\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Gets an index for a state by id\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n const indexResult = stateMachine.getStateIndex(\"state1\");\r\n expect(indexResult).toEqual(0);\r\n });\r\n\r\n it(\"Notifies when the active state is set\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n expect(stateMachine.activeState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify if the active state is unchanged\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n stateMachine.setActiveStateByID(\"state1\");\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Notifies when the active state is cleared\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n stateMachine.clearActiveState();\r\n\r\n expect(stateMachine.activeState).toBeUndefined();\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify when the active state is cleared if there is no active state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n observer.mockClear();\r\n\r\n stateMachine.clearActiveState();\r\n stateMachine.clearActiveState();\r\n stateMachine.clearActiveState();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Sets previous state as expected\", () => {\r\n const { stateMachine } = makeTestRig();\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.previousState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n expect(stateMachine.previousState).toEqual(\"state1\");\r\n\r\n stateMachine.clearActiveState();\r\n\r\n expect(stateMachine.previousState).toBeUndefined();\r\n });\r\n\r\n it(\"Sets next state as expected\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n expect(stateMachine.nextState).toBeUndefined();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n\r\n expect(stateMachine.nextState).toEqual(\"state2\");\r\n\r\n stateMachine.setActiveStateByID(\"state2\");\r\n\r\n expect(stateMachine.nextState).toBeUndefined();\r\n });\r\n\r\n it(\"Has state\", () => {\r\n const { stateMachine } = makeTestRig();\r\n expect(stateMachine.hasState(\"state1\")).toEqual(true);\r\n expect(stateMachine.hasState(\"somethingElse\")).toEqual(false);\r\n });\r\n\r\n it(\"Reports correct state count\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n // Initial state has 2 states\r\n expect(stateMachine.stateCount).toEqual(2);\r\n\r\n // After adding a state\r\n stateMachine.createNewState();\r\n expect(stateMachine.stateCount).toEqual(3);\r\n\r\n // After deleting a state\r\n stateMachine.deleteState(\"state1\");\r\n expect(stateMachine.stateCount).toEqual(2);\r\n });\r\n\r\n it(\"Sets active state by index\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.setActiveStateByIndex(1);\r\n\r\n expect(stateMachine.activeState).toEqual(\"state2\");\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does nothing if index is out of bounds\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n // With negative index\r\n stateMachine.setActiveStateByIndex(-1);\r\n expect(stateMachine.activeState).toBeUndefined();\r\n expect(observer).not.toBeCalled();\r\n\r\n // With too large index\r\n stateMachine.setActiveStateByIndex(5);\r\n expect(stateMachine.activeState).toBeUndefined();\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Sets previous and next state correctly when using setActiveStateByIndex\", () => {\r\n const { stateMachine } = makeTestRig();\r\n stateMachine.createNewState(); // Now 3 states\r\n\r\n stateMachine.setActiveStateByIndex(1);\r\n\r\n expect(stateMachine.activeState).toEqual(\"state2\");\r\n expect(stateMachine.previousState).toEqual(\"state1\");\r\n expect(stateMachine.nextState).not.toBeUndefined();\r\n });\r\n\r\n it(\"Deletes all states\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n stateMachine.deleteAllStates();\r\n\r\n expect(stateMachine.states).toHaveLength(0);\r\n expect(stateMachine.stateCount).toEqual(0);\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify if there are no states to delete\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n stateMachine.deleteAllStates(); // Clear all states first\r\n observer.mockClear();\r\n\r\n stateMachine.deleteAllStates(); // Try again with empty states\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Disposes all state app objects when deleting all states\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n // Create mock dispose functions for each state\r\n const state1 = stateMachine.getStateByID(\"state1\");\r\n const state2 = stateMachine.getStateByID(\"state2\");\r\n\r\n expect(state1).not.toBeUndefined();\r\n expect(state2).not.toBeUndefined();\r\n\r\n state1!.appObject.dispose = jest.fn();\r\n state2!.appObject.dispose = jest.fn();\r\n\r\n stateMachine.deleteAllStates();\r\n\r\n expect(state1!.appObject.dispose).toBeCalled();\r\n expect(state2!.appObject.dispose).toBeCalled();\r\n });\r\n\r\n it(\"Clears active state when deleting all states\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n stateMachine.setActiveStateByID(\"state1\");\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n\r\n stateMachine.deleteAllStates();\r\n\r\n expect(stateMachine.activeState).toBeUndefined();\r\n expect(stateMachine.previousState).toBeUndefined();\r\n expect(stateMachine.nextState).toBeUndefined();\r\n });\r\n\r\n it(\"Sets previous state active\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n // Set state2 as active so state1 becomes the previous state\r\n stateMachine.setActiveStateByID(\"state2\");\r\n observer.mockClear();\r\n\r\n // Now call setPreviousStateActive\r\n stateMachine.setPreviousStateActive();\r\n\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does nothing when setting previous state active if there is no previous state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n // Set state1 as active (which has no previous state)\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n // Now call setPreviousStateActive\r\n stateMachine.setPreviousStateActive();\r\n\r\n // Should remain on state1\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n expect(observer).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Sets next state active\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n // Set state1 as active so state2 becomes the next state\r\n stateMachine.setActiveStateByID(\"state1\");\r\n observer.mockClear();\r\n\r\n // Now call setNextStateActive\r\n stateMachine.setNextStateActive();\r\n\r\n expect(stateMachine.activeState).toEqual(\"state2\");\r\n expect(observer).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Does nothing when setting next state active if there is no next state\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n\r\n // Set state2 as active (which has no next state)\r\n stateMachine.setActiveStateByID(\"state2\");\r\n observer.mockClear();\r\n\r\n // Now call setNextStateActive\r\n stateMachine.setNextStateActive();\r\n\r\n // Should remain on state2\r\n expect(stateMachine.activeState).toEqual(\"state2\");\r\n expect(observer).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Sets state index\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n // Save the initial states order\r\n const initialStates = [...stateMachine.states];\r\n\r\n // Move state2 to index 0 (before state1)\r\n stateMachine.setStateIndex(\"state2\", 0);\r\n\r\n // Check that the order changed correctly\r\n expect(stateMachine.states[0]).toEqual(\"state2\");\r\n expect(stateMachine.states[1]).toEqual(\"state1\");\r\n expect(observer).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Does nothing if state ID doesn't exist when setting state index\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n // Save the initial states order\r\n const initialStates = [...stateMachine.states];\r\n\r\n // Try to move a non-existent state\r\n stateMachine.setStateIndex(\"nonExistentState\", 0);\r\n\r\n // Check that states remain unchanged\r\n expect(stateMachine.states).toEqual(initialStates);\r\n expect(observer).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Does nothing if index is out of bounds when setting state index\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n // Save the initial states order\r\n const initialStates = [...stateMachine.states];\r\n\r\n // Try to move to an invalid index (negative)\r\n stateMachine.setStateIndex(\"state1\", -1);\r\n expect(stateMachine.states).toEqual(initialStates);\r\n expect(observer).not.toHaveBeenCalled();\r\n\r\n // Try to move to an invalid index (too large)\r\n stateMachine.setStateIndex(\"state1\", 10);\r\n expect(stateMachine.states).toEqual(initialStates);\r\n expect(observer).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Does nothing if moving state to its current index\", () => {\r\n const { stateMachine, observer } = makeTestRig();\r\n observer.mockClear();\r\n\r\n // Try to move state1 to index 0 (its current position)\r\n stateMachine.setStateIndex(\"state1\", 0);\r\n\r\n // Verify no notification happened\r\n expect(observer).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Updates active state relationships when moving the active state\", () => {\r\n const { stateMachine } = makeTestRig();\r\n\r\n // Set state1 as active\r\n stateMachine.setActiveStateByID(\"state1\");\r\n expect(stateMachine.nextState).toEqual(\"state2\");\r\n\r\n // Move state1 after state2\r\n stateMachine.setStateIndex(\"state1\", 1);\r\n\r\n // Check that relationships updated correctly\r\n expect(stateMachine.activeState).toEqual(\"state1\");\r\n expect(stateMachine.previousState).toEqual(\"state2\");\r\n expect(stateMachine.nextState).toBeUndefined();\r\n });\r\n});\r\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EditStateNameUC } from "../UCs/EditStateNameUC";
|
|
2
|
+
export class MockEditStateNameUC extends EditStateNameUC {
|
|
3
|
+
constructor(appObject) {
|
|
4
|
+
super(appObject, EditStateNameUC.type);
|
|
5
|
+
this.editStateName = jest.fn();
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=MockEditStateNameUC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockEditStateNameUC.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/MockEditStateNameUC.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAGtD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAHzC,kBAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAI1B,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { EditStateNameUC } from \"../UCs/EditStateNameUC\";\r\n\r\nexport class MockEditStateNameUC extends EditStateNameUC {\r\n editStateName = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, EditStateNameUC.type);\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { HostStatePM } from "../PMs/HostStatePM";
|
|
2
|
+
export class MockHostStatePM extends HostStatePM {
|
|
3
|
+
// Simple implementation that always returns true for equality checks
|
|
4
|
+
vmsAreEqual(a, b) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
// Exposed method to manually trigger a view model update
|
|
8
|
+
updateVM(vm) {
|
|
9
|
+
this.doUpdateView(vm);
|
|
10
|
+
}
|
|
11
|
+
constructor(appObject) {
|
|
12
|
+
super(appObject, HostStatePM.type);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function makeMockHostStatePM(appObject) {
|
|
16
|
+
return new MockHostStatePM(appObject);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=MockHostStatePM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockHostStatePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/MockHostStatePM.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAE9D,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,qEAAqE;IACrE,WAAW,CAAC,CAAc,EAAE,CAAc;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yDAAyD;IACzD,QAAQ,CAAC,EAAe;QACtB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { HostStatePM, HostStateVM } from \"../PMs/HostStatePM\";\r\n\r\nexport class MockHostStatePM extends HostStatePM {\r\n // Simple implementation that always returns true for equality checks\r\n vmsAreEqual(a: HostStateVM, b: HostStateVM): boolean {\r\n return true;\r\n }\r\n\r\n // Exposed method to manually trigger a view model update\r\n updateVM(vm: HostStateVM): void {\r\n this.doUpdateView(vm);\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStatePM.type);\r\n }\r\n}\r\n\r\nexport function makeMockHostStatePM(appObject: AppObject): MockHostStatePM {\r\n return new MockHostStatePM(appObject);\r\n}\r\n"]}
|
|
@@ -13,36 +13,40 @@ class HostStateMachinePMImp extends HostStateMachinePM {
|
|
|
13
13
|
vmsAreEqual(a, b) {
|
|
14
14
|
if (a.activeSlideID !== b.activeSlideID)
|
|
15
15
|
return false;
|
|
16
|
+
if (a.activeSlideName !== b.activeSlideName)
|
|
17
|
+
return false;
|
|
16
18
|
if (a.nextSlideID !== b.nextSlideID)
|
|
17
19
|
return false;
|
|
18
20
|
if (a.previousSlideID !== b.previousSlideID)
|
|
19
21
|
return false;
|
|
20
22
|
if (a.states.length !== b.states.length)
|
|
21
23
|
return false;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return statesAreEqual;
|
|
24
|
+
if (a.isSingleSlide !== b.isSingleSlide)
|
|
25
|
+
return false;
|
|
26
|
+
// Compare states arrays
|
|
27
|
+
for (let i = 0; i < a.states.length; i++) {
|
|
28
|
+
if (a.states[i] !== b.states[i])
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
31
32
|
}
|
|
32
33
|
constructor(appObject) {
|
|
33
34
|
super(appObject, HostStateMachinePM.type);
|
|
34
35
|
this.onEntityChange = () => {
|
|
35
36
|
if (!this.stateMachine)
|
|
36
37
|
return;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
// Get the state IDs directly without mapping to name
|
|
39
|
+
const states = [...this.stateMachine.states];
|
|
40
|
+
const activeStateName = this.stateMachine.activeState
|
|
41
|
+
? this.stateMachine.getStateByID(this.stateMachine.activeState)?.name
|
|
42
|
+
: undefined;
|
|
41
43
|
const vm = {
|
|
42
44
|
activeSlideID: this.stateMachine.activeState,
|
|
45
|
+
activeSlideName: activeStateName,
|
|
43
46
|
nextSlideID: this.stateMachine.nextState,
|
|
44
47
|
previousSlideID: this.stateMachine.previousState,
|
|
45
|
-
states
|
|
48
|
+
states,
|
|
49
|
+
isSingleSlide: states.length === 1
|
|
46
50
|
};
|
|
47
51
|
this.doUpdateView(vm);
|
|
48
52
|
};
|
|
@@ -58,8 +62,10 @@ class HostStateMachinePMImp extends HostStateMachinePM {
|
|
|
58
62
|
}
|
|
59
63
|
export const defaultHostStateMachineVM = {
|
|
60
64
|
activeSlideID: undefined,
|
|
65
|
+
activeSlideName: undefined,
|
|
61
66
|
nextSlideID: undefined,
|
|
62
67
|
previousSlideID: undefined,
|
|
63
|
-
states: []
|
|
68
|
+
states: [],
|
|
69
|
+
isSingleSlide: false
|
|
64
70
|
};
|
|
65
71
|
//# sourceMappingURL=HostStateMachinePM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostStateMachinePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStateMachinePM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"HostStateMachinePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStateMachinePM.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport interface HostStateMachineVM {\r\n activeSlideID: string | undefined;\r\n activeSlideName: string | undefined;\r\n nextSlideID: string | undefined;\r\n previousSlideID: string | undefined;\r\n states: string[];\r\n isSingleSlide: boolean;\r\n}\r\n\r\nexport abstract class HostStateMachinePM extends AppObjectPM<HostStateMachineVM> {\r\n static type = \"HostStateMachinePM\";\r\n\r\n static get(appObjects: AppObjectRepo): HostStateMachinePM | undefined {\r\n return getSingletonComponent(HostStateMachinePM.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeHostStateMachinePM(appObject: AppObject) {\r\n return new HostStateMachinePMImp(appObject);\r\n}\r\n\r\nclass HostStateMachinePMImp extends HostStateMachinePM {\r\n private stateMachine?: HostStateMachine;\r\n\r\n vmsAreEqual(a: HostStateMachineVM, b: HostStateMachineVM): boolean {\r\n if (a.activeSlideID !== b.activeSlideID) return false;\r\n if (a.activeSlideName !== b.activeSlideName) return false;\r\n if (a.nextSlideID !== b.nextSlideID) return false;\r\n if (a.previousSlideID !== b.previousSlideID) return false;\r\n if (a.states.length !== b.states.length) return false;\r\n if (a.isSingleSlide !== b.isSingleSlide) return false;\r\n\r\n // Compare states arrays\r\n for (let i = 0; i < a.states.length; i++) {\r\n if (a.states[i] !== b.states[i]) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private onEntityChange = () => {\r\n if (!this.stateMachine) return;\r\n\r\n // Get the state IDs directly without mapping to name\r\n const states = [...this.stateMachine.states];\r\n\r\n const activeStateName = this.stateMachine.activeState\r\n ? this.stateMachine.getStateByID(this.stateMachine.activeState)?.name\r\n : undefined;\r\n\r\n const vm: HostStateMachineVM = {\r\n activeSlideID: this.stateMachine.activeState,\r\n activeSlideName: activeStateName,\r\n nextSlideID: this.stateMachine.nextState,\r\n previousSlideID: this.stateMachine.previousState,\r\n states,\r\n isSingleSlide: states.length === 1\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStateMachinePM.type);\r\n\r\n this.stateMachine = appObject.getComponent<HostStateMachine>(\r\n HostStateMachine.type\r\n );\r\n if (!this.stateMachine) {\r\n this.error(\r\n \"PM has been added to an App Object that does not have a HostStateMachine\"\r\n );\r\n return;\r\n }\r\n\r\n this.stateMachine.addChangeObserver(this.onEntityChange);\r\n this.onEntityChange();\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n\r\nexport const defaultHostStateMachineVM: HostStateMachineVM = {\r\n activeSlideID: undefined,\r\n activeSlideName: undefined,\r\n nextSlideID: undefined,\r\n previousSlideID: undefined,\r\n states: [],\r\n isSingleSlide: false\r\n};\r\n"]}
|
|
@@ -36,48 +36,82 @@ describe("Host State Machine Presentation Manager", () => {
|
|
|
36
36
|
stateMachine.setActiveStateByID("state1");
|
|
37
37
|
const vm = pm.lastVM;
|
|
38
38
|
expect(vm.activeSlideID).toEqual("state1");
|
|
39
|
+
expect(vm.activeSlideName).toEqual("State 1");
|
|
39
40
|
expect(vm.previousSlideID).toBeUndefined();
|
|
40
41
|
expect(vm.nextSlideID).toEqual("state2");
|
|
41
42
|
expect(vm.states).toHaveLength(3);
|
|
43
|
+
expect(vm.states).toEqual(["state1", "state2", "state3"]);
|
|
44
|
+
expect(vm.isSingleSlide).toEqual(false);
|
|
42
45
|
});
|
|
43
46
|
it("Checks for equal vms", () => {
|
|
44
47
|
const { pm } = makeTestRig();
|
|
45
48
|
const vm1 = {
|
|
46
49
|
activeSlideID: "activeSlideID",
|
|
50
|
+
activeSlideName: "Active Slide",
|
|
47
51
|
nextSlideID: "newSlideID",
|
|
48
52
|
previousSlideID: "previousSlideID",
|
|
49
|
-
states: [
|
|
50
|
-
|
|
51
|
-
{ id: "state2", name: "State 2" }
|
|
52
|
-
]
|
|
53
|
+
states: ["state1", "state2"],
|
|
54
|
+
isSingleSlide: false
|
|
53
55
|
};
|
|
54
56
|
const vm2 = { ...vm1 };
|
|
55
57
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(true);
|
|
56
58
|
});
|
|
59
|
+
it("Sets isSingleSlide to true when there is only one state", () => {
|
|
60
|
+
const { pm, stateMachine } = makeTestRig();
|
|
61
|
+
stateMachine.setStates([stateMachine.getStateByID("state1")]);
|
|
62
|
+
const vm = pm.lastVM;
|
|
63
|
+
expect(vm.states).toHaveLength(1);
|
|
64
|
+
expect(vm.states).toEqual(["state1"]);
|
|
65
|
+
expect(vm.isSingleSlide).toEqual(true);
|
|
66
|
+
});
|
|
67
|
+
it("Checks for a change in isSingleSlide", () => {
|
|
68
|
+
const { pm } = makeTestRig();
|
|
69
|
+
const vm1 = {
|
|
70
|
+
activeSlideID: "activeSlideID",
|
|
71
|
+
activeSlideName: "Active Slide",
|
|
72
|
+
nextSlideID: "newSlideID",
|
|
73
|
+
previousSlideID: "previousSlideID",
|
|
74
|
+
states: ["state1"],
|
|
75
|
+
isSingleSlide: true
|
|
76
|
+
};
|
|
77
|
+
const vm2 = { ...vm1, isSingleSlide: false };
|
|
78
|
+
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
79
|
+
});
|
|
57
80
|
it("Checks for a change in the active slide", () => {
|
|
58
81
|
const { pm } = makeTestRig();
|
|
59
82
|
const vm1 = {
|
|
60
83
|
activeSlideID: "activeSlideID",
|
|
84
|
+
activeSlideName: "Active Slide",
|
|
61
85
|
nextSlideID: "newSlideID",
|
|
62
86
|
previousSlideID: "previousSlideID",
|
|
63
|
-
states: [
|
|
64
|
-
|
|
65
|
-
{ id: "state2", name: "State 2" }
|
|
66
|
-
]
|
|
87
|
+
states: ["state1", "state2"],
|
|
88
|
+
isSingleSlide: false
|
|
67
89
|
};
|
|
68
90
|
const vm2 = { ...vm1, activeSlideID: "CHANGED" };
|
|
69
91
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
70
92
|
});
|
|
93
|
+
it("Checks for a change in the active slide name", () => {
|
|
94
|
+
const { pm } = makeTestRig();
|
|
95
|
+
const vm1 = {
|
|
96
|
+
activeSlideID: "activeSlideID",
|
|
97
|
+
activeSlideName: "Active Slide",
|
|
98
|
+
nextSlideID: "newSlideID",
|
|
99
|
+
previousSlideID: "previousSlideID",
|
|
100
|
+
states: ["state1", "state2"],
|
|
101
|
+
isSingleSlide: false
|
|
102
|
+
};
|
|
103
|
+
const vm2 = { ...vm1, activeSlideName: "CHANGED" };
|
|
104
|
+
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
105
|
+
});
|
|
71
106
|
it("Checks for a change in the next slide", () => {
|
|
72
107
|
const { pm } = makeTestRig();
|
|
73
108
|
const vm1 = {
|
|
74
109
|
activeSlideID: "activeSlideID",
|
|
110
|
+
activeSlideName: "Active Slide",
|
|
75
111
|
nextSlideID: "newSlideID",
|
|
76
112
|
previousSlideID: "previousSlideID",
|
|
77
|
-
states: [
|
|
78
|
-
|
|
79
|
-
{ id: "state2", name: "State 2" }
|
|
80
|
-
]
|
|
113
|
+
states: ["state1", "state2"],
|
|
114
|
+
isSingleSlide: false
|
|
81
115
|
};
|
|
82
116
|
const vm2 = { ...vm1, nextSlideID: "CHANGED" };
|
|
83
117
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
@@ -86,12 +120,11 @@ describe("Host State Machine Presentation Manager", () => {
|
|
|
86
120
|
const { pm } = makeTestRig();
|
|
87
121
|
const vm1 = {
|
|
88
122
|
activeSlideID: "activeSlideID",
|
|
123
|
+
activeSlideName: "Active Slide",
|
|
89
124
|
nextSlideID: "newSlideID",
|
|
90
125
|
previousSlideID: "previousSlideID",
|
|
91
|
-
states: [
|
|
92
|
-
|
|
93
|
-
{ id: "state2", name: "State 2" }
|
|
94
|
-
]
|
|
126
|
+
states: ["state1", "state2"],
|
|
127
|
+
isSingleSlide: false
|
|
95
128
|
};
|
|
96
129
|
const vm2 = { ...vm1, previousSlideID: "CHANGED" };
|
|
97
130
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
@@ -100,20 +133,16 @@ describe("Host State Machine Presentation Manager", () => {
|
|
|
100
133
|
const { pm } = makeTestRig();
|
|
101
134
|
const vm1 = {
|
|
102
135
|
activeSlideID: "activeSlideID",
|
|
136
|
+
activeSlideName: "Active Slide",
|
|
103
137
|
nextSlideID: "newSlideID",
|
|
104
138
|
previousSlideID: "previousSlideID",
|
|
105
|
-
states: [
|
|
106
|
-
|
|
107
|
-
{ id: "state2", name: "State 2" }
|
|
108
|
-
]
|
|
139
|
+
states: ["state1", "state2"],
|
|
140
|
+
isSingleSlide: false
|
|
109
141
|
};
|
|
110
142
|
const vm2 = {
|
|
111
143
|
...vm1,
|
|
112
|
-
states: [
|
|
113
|
-
|
|
114
|
-
{ id: "state2", name: "State 2" },
|
|
115
|
-
{ id: "state3", name: "State 3" }
|
|
116
|
-
]
|
|
144
|
+
states: ["state1", "state2", "state3"],
|
|
145
|
+
isSingleSlide: false
|
|
117
146
|
};
|
|
118
147
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
119
148
|
});
|
|
@@ -121,53 +150,33 @@ describe("Host State Machine Presentation Manager", () => {
|
|
|
121
150
|
const { pm } = makeTestRig();
|
|
122
151
|
const vm1 = {
|
|
123
152
|
activeSlideID: "activeSlideID",
|
|
153
|
+
activeSlideName: "Active Slide",
|
|
124
154
|
nextSlideID: "newSlideID",
|
|
125
155
|
previousSlideID: "previousSlideID",
|
|
126
|
-
states: [
|
|
127
|
-
|
|
128
|
-
{ id: "state2", name: "State 2" }
|
|
129
|
-
]
|
|
130
|
-
};
|
|
131
|
-
const vm2 = { ...vm1, states: [{ id: "state1", name: "State 1" }] };
|
|
132
|
-
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
133
|
-
});
|
|
134
|
-
it("Checks for state to be renamed", () => {
|
|
135
|
-
const { pm } = makeTestRig();
|
|
136
|
-
const vm1 = {
|
|
137
|
-
activeSlideID: "activeSlideID",
|
|
138
|
-
nextSlideID: "newSlideID",
|
|
139
|
-
previousSlideID: "previousSlideID",
|
|
140
|
-
states: [
|
|
141
|
-
{ id: "state1", name: "State 1" },
|
|
142
|
-
{ id: "state2", name: "State 2" }
|
|
143
|
-
]
|
|
156
|
+
states: ["state1", "state2"],
|
|
157
|
+
isSingleSlide: false
|
|
144
158
|
};
|
|
145
159
|
const vm2 = {
|
|
146
160
|
...vm1,
|
|
147
|
-
states: [
|
|
148
|
-
|
|
149
|
-
{ id: "state2", name: "RENAMED" }
|
|
150
|
-
]
|
|
161
|
+
states: ["state1"],
|
|
162
|
+
isSingleSlide: true
|
|
151
163
|
};
|
|
152
164
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
153
165
|
});
|
|
154
|
-
it("Checks for state to
|
|
166
|
+
it("Checks for state order to change", () => {
|
|
155
167
|
const { pm } = makeTestRig();
|
|
156
168
|
const vm1 = {
|
|
157
169
|
activeSlideID: "activeSlideID",
|
|
170
|
+
activeSlideName: "Active Slide",
|
|
158
171
|
nextSlideID: "newSlideID",
|
|
159
172
|
previousSlideID: "previousSlideID",
|
|
160
|
-
states: [
|
|
161
|
-
|
|
162
|
-
{ id: "state2", name: "State 2" }
|
|
163
|
-
]
|
|
173
|
+
states: ["state1", "state2"],
|
|
174
|
+
isSingleSlide: false
|
|
164
175
|
};
|
|
165
176
|
const vm2 = {
|
|
166
177
|
...vm1,
|
|
167
|
-
states: [
|
|
168
|
-
|
|
169
|
-
{ id: "CHANGED", name: "State 2" }
|
|
170
|
-
]
|
|
178
|
+
states: ["state2", "state1"],
|
|
179
|
+
isSingleSlide: false
|
|
171
180
|
};
|
|
172
181
|
expect(pm.vmsAreEqual(vm1, vm2)).toEqual(false);
|
|
173
182
|
});
|