fix(sdk): release lifecycle validation modules
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
test('assertGameContract runs the reusable isolated session conformance suite', () => {
|
||||
let invalidations = 0;
|
||||
let nextModuleId = 0;
|
||||
const restoredDeskinfo: unknown[] = [];
|
||||
const entry: GameEntry = {
|
||||
key: 'fixture',
|
||||
gameId: 41,
|
||||
@@ -23,15 +24,19 @@ test('assertGameContract runs the reusable isolated session conformance suite',
|
||||
if (seats === 2 || seats === 4 || seats === 10) return seats;
|
||||
return 4;
|
||||
},
|
||||
createModule: () => makeModule(++nextModuleId),
|
||||
createModule: () => makeModule(++nextModuleId, (deskinfo) => { restoredDeskinfo.push(deskinfo); }),
|
||||
};
|
||||
|
||||
assert.doesNotThrow(() => assertGameContract(entry, makeConformanceHost(() => { invalidations++; })));
|
||||
assert.doesNotThrow(() => assertGameContract(
|
||||
entry,
|
||||
makeConformanceHost(() => { invalidations++; }, restoredDeskinfo),
|
||||
));
|
||||
assert.equal(invalidations, 2);
|
||||
assert.equal(restoredDeskinfo.length, 0);
|
||||
assert.ok(nextModuleId >= 2);
|
||||
});
|
||||
|
||||
function makeModule(id: number): GameModule {
|
||||
function makeModule(id: number, onRestore: (deskinfo: unknown) => void): GameModule {
|
||||
let host: GameHost | undefined;
|
||||
let restored: unknown;
|
||||
let eventCount = 0;
|
||||
@@ -50,8 +55,16 @@ function makeModule(id: number): GameModule {
|
||||
assert.equal(typeof data.cycle, 'number');
|
||||
messageCycle = data.cycle;
|
||||
},
|
||||
restore(deskinfo) { restored = deskinfo; },
|
||||
restore(deskinfo) {
|
||||
restored = deskinfo;
|
||||
onRestore(deskinfo);
|
||||
},
|
||||
dispose() {
|
||||
if (!host) {
|
||||
assert.equal(eventCount, 0);
|
||||
assert.equal(restored, undefined);
|
||||
return;
|
||||
}
|
||||
assert.ok(host);
|
||||
assert.equal(eventCount, 1);
|
||||
assert.deepEqual(restored, deskinfoFor(messageCycle!));
|
||||
@@ -63,7 +76,10 @@ function deskinfoFor(cycle: number): { readonly cycle: number } {
|
||||
return { cycle };
|
||||
}
|
||||
|
||||
function makeConformanceHost(onInvalidate: () => void): () => GameContractHost {
|
||||
function makeConformanceHost(
|
||||
onInvalidate: () => void,
|
||||
restoredDeskinfo: unknown[],
|
||||
): () => GameContractHost {
|
||||
return () => {
|
||||
const snapshot: PlatformGameSnapshot = {
|
||||
connection: { phase: 'connected' },
|
||||
@@ -80,6 +96,9 @@ function makeConformanceHost(onInvalidate: () => void): () => GameContractHost {
|
||||
execute: () => {},
|
||||
},
|
||||
invalidate: onInvalidate,
|
||||
assertRestored(deskinfo) {
|
||||
assert.equal(restoredDeskinfo.shift(), deskinfo);
|
||||
},
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user