@benev/slate
Version:
frontend web stuff
112 lines • 3.94 kB
JavaScript
import { expect } from "cynic";
import { Reactor } from "./reactor.js";
import { Flat } from "../flatstate/flat.js";
import { SignalTower } from "../signals/tower.js";
function setup() {
return new Reactor(new Flat(), new SignalTower());
}
export default {
"two-function syntax": {
"reactor reacts to flatstate changes": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
let calls = 0;
reactor.reaction(() => void state.alpha, () => calls++);
state.alpha++;
await reactor.wait;
expect(calls).equals(1);
},
"reactor reacts to signal changes": async () => {
const reactor = setup();
const bravo = reactor.signals.signal(0);
let calls = 0;
reactor.reaction(() => void bravo.value, () => calls++);
bravo.value++;
await reactor.wait;
expect(calls).equals(1);
},
"flatstate and signal changes are debounced": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
const bravo = reactor.signals.signal(0);
let calls = 0;
reactor.reaction(() => void bravo.value, () => calls++);
state.alpha++;
bravo.value++;
await reactor.wait;
expect(calls).equals(1);
},
"reaction can be stopped": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
const bravo = reactor.signals.signal(0);
let calls = 0;
const stop = reactor.reaction(() => void bravo.value, () => calls++);
stop();
state.alpha++;
bravo.value++;
await reactor.wait;
expect(calls).equals(0);
},
},
"one-function syntax": {
"reactor reacts to flatstate changes": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
let calls = 0;
reactor.reaction(() => {
void state.alpha;
calls++;
});
expect(calls).equals(1);
state.alpha++;
await reactor.wait;
expect(calls).equals(2);
},
"reactor reacts to signal changes": async () => {
const reactor = setup();
const bravo = reactor.signals.signal(0);
let calls = 0;
reactor.reaction(() => {
void bravo.value;
calls++;
});
expect(calls).equals(1);
bravo.value++;
await reactor.wait;
expect(calls).equals(2);
},
"flatstate and signal changes are debounced": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
const bravo = reactor.signals.signal(0);
let calls = 0;
reactor.reaction(() => {
void bravo.value;
calls++;
});
expect(calls).equals(1);
state.alpha++;
bravo.value++;
await reactor.wait;
expect(calls).equals(2);
},
"reaction can be stopped": async () => {
const reactor = setup();
const state = reactor.flat.state({ alpha: 0 });
const bravo = reactor.signals.signal(0);
let calls = 0;
const stop = reactor.reaction(() => {
void bravo.value;
calls++;
});
expect(calls).equals(1);
stop();
state.alpha++;
bravo.value++;
await reactor.wait;
expect(calls).equals(1);
},
},
};
//# sourceMappingURL=reactor.test.js.map