charm/packages/react-charm/__tests__/useSignalState.test.luau
2026-02-19 22:31:40 -08:00

44 lines
1.2 KiB
Text

local Charm = require("../Charm")
local ReactCharm = require("../src")
local renderHook = require("./helpers/renderHook")
local test = require("../../../tests/test")
test("tracks signal state", function()
local getState, setState = Charm.signal(0)
local hook = renderHook(function()
return ReactCharm.useSignalState(getState)
end)
assert(hook.result == 0, "should return 0")
setState(1)
assert(hook.result == 1, "should return 1")
end)
test("accepts a selector", function()
local getState, setState = Charm.signal(0)
local hook = renderHook(function()
return ReactCharm.useSignalState(function()
return 2 * getState()
end)
end)
assert(hook.result == 0, "should return 0")
setState(1)
assert(hook.result == 2, "should return 2")
end)
test("tracks dependencies", function()
local getState, setState = Charm.signal(0)
local hook = renderHook(function()
return ReactCharm.useSignalState(getState, { getState })
end)
assert(hook.result == 0, "should return 0")
setState(1)
assert(hook.result == 1, "should return 1")
getState, setState = Charm.signal(0)
hook.rerender()
assert(hook.result == 0, "should return 0")
setState(1)
assert(hook.result == 1, "should return 1")
end)
return {}