mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-06 03:14:00 +00:00
Release God's Eye View as open source
This commit is contained in:
1 parent
a5aaea7e16
commit
880a672b5e
433 files changed
+219893
-23
No files matched your search
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Military-registry active-transition tests (pre-ship audit M2).
|
||||
*
|
||||
* Locks the setMilitaryLayerActive contract the flights layer's immediate
|
||||
* suppression/restore sweep depends on: listeners fire only on TRANSITIONS
|
||||
* (never on same-value sets), after the new state is committed, and a broken
|
||||
* listener can't break the toggle.
|
||||
*/
|
||||
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {
|
||||
setMilitaryLayerActive,
|
||||
isMilitaryLayerActive,
|
||||
onMilitaryLayerActiveChange,
|
||||
} from './militaryRegistry.js';
|
||||
|
||||
test('active-change listener fires on transitions only, with committed state', () => {
|
||||
const seen = [];
|
||||
const unsub = onMilitaryLayerActiveChange((active) => {
|
||||
seen.push({ active, committed: isMilitaryLayerActive() });
|
||||
});
|
||||
try {
|
||||
setMilitaryLayerActive(false); // same value (initial false) → no fire
|
||||
assert.equal(seen.length, 0);
|
||||
|
||||
setMilitaryLayerActive(true); // transition → fire, state already committed
|
||||
assert.deepEqual(seen, [{ active: true, committed: true }]);
|
||||
|
||||
setMilitaryLayerActive(true); // same value → no fire
|
||||
assert.equal(seen.length, 1);
|
||||
|
||||
setMilitaryLayerActive(false); // transition back → fire
|
||||
assert.deepEqual(seen[1], { active: false, committed: false });
|
||||
assert.equal(seen.length, 2);
|
||||
} finally {
|
||||
unsub();
|
||||
setMilitaryLayerActive(false);
|
||||
}
|
||||
});
|
||||
|
||||
test('unsubscribe stops delivery; throwing listeners never break the toggle', () => {
|
||||
let calls = 0;
|
||||
const unsubBroken = onMilitaryLayerActiveChange(() => { throw new Error('boom'); });
|
||||
const unsubCounter = onMilitaryLayerActiveChange(() => { calls++; });
|
||||
try {
|
||||
setMilitaryLayerActive(true); // broken listener swallowed, counter still runs
|
||||
assert.equal(calls, 1);
|
||||
assert.equal(isMilitaryLayerActive(), true);
|
||||
|
||||
unsubCounter();
|
||||
setMilitaryLayerActive(false);
|
||||
assert.equal(calls, 1); // unsubscribed → no more deliveries
|
||||
} finally {
|
||||
unsubBroken();
|
||||
unsubCounter();
|
||||
setMilitaryLayerActive(false);
|
||||
}
|
||||
});
|
||||
|
||||
test('onMilitaryLayerActiveChange tolerates non-function listeners', () => {
|
||||
const unsub = onMilitaryLayerActiveChange(null);
|
||||
assert.equal(typeof unsub, 'function');
|
||||
unsub(); // no-op, must not throw
|
||||
setMilitaryLayerActive(true);
|
||||
assert.equal(isMilitaryLayerActive(), true);
|
||||
setMilitaryLayerActive(false);
|
||||
});
|
||||
Reference in new issue
Block a user