@benev/slate
Version:
frontend web stuff
57 lines (44 loc) • 1.25 kB
text/typescript
import {Suite, expect} from "cynic"
import {ZipAction} from "./action.js"
import {StateTree} from "../state_tree.js"
export default <Suite>{
"actions work": async() => {
let memory = 0
type State = {test: {count: number}}
const blueprint = ZipAction.blueprint<State>()
const testActions = ZipAction.prepBlueprint((state: State) => state.test)
const tree = new StateTree<State>(
{test: {count: 0}},
() => { memory = tree.state.test.count },
)
const subgroup = testActions(action => ({
double: action(test => () => {
test.count *= 2
}),
}))
const counting_specs = blueprint({
...subgroup,
wrapper: {
add: state => (n: number) => {
state.test.count += n
},
reset: (_state, setRoot) => () => {
setRoot({test: {count: 0}})
},
},
})
const counting = ZipAction.actualize(tree, counting_specs)
expect(tree.state.test.count).equals(0)
expect(memory).equals(0)
counting.wrapper.add(1)
counting.wrapper.add(2)
expect(tree.state.test.count).equals(3)
expect(memory).equals(3)
counting.double()
expect(tree.state.test.count).equals(6)
expect(memory).equals(6)
counting.wrapper.reset()
expect(tree.state.test.count).equals(0)
expect(memory).equals(0)
},
}