mirror of
https://github.com/anomalyco/opencode.git
synced 2026-10-23 14:40:23 +00:00
45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { expect, test } from "bun:test"
|
|
import { createComponent, createContext, createRoot, useContext } from "solid-js"
|
|
import { $$context, $$registry } from "solid-refresh/dist/solid-refresh.mjs"
|
|
import { $$refresh } from "../dev/refresh"
|
|
|
|
test("re-evaluated dependencies retain their mounted context before any HMR accept callback", () => {
|
|
const previous = $$registry()
|
|
const mounted = $$context(previous, "Context", createContext("old default"))
|
|
const next = $$registry()
|
|
const updated = $$context(next, "Context", createContext("new default"))
|
|
const unrelated = $$context($$registry(), "Context", createContext("unrelated"))
|
|
let accepted = false
|
|
$$refresh(
|
|
"vite",
|
|
{
|
|
data: { "solid-refresh": previous, "solid-refresh-prev": previous },
|
|
accept() {
|
|
accepted = true
|
|
},
|
|
invalidate() {
|
|
throw new Error("Unexpected invalidation")
|
|
},
|
|
decline() {
|
|
throw new Error("Unexpected decline")
|
|
},
|
|
},
|
|
next,
|
|
)
|
|
|
|
// Only register acceptance: Vite re-evaluates cyclic dependencies without
|
|
// necessarily sending those modules their own accepted update.
|
|
expect(accepted).toBe(true)
|
|
createRoot((dispose) => {
|
|
createComponent(mounted.Provider, {
|
|
value: "mounted provider",
|
|
get children() {
|
|
expect(useContext(updated)).toBe("mounted provider")
|
|
expect(useContext(unrelated)).toBe("unrelated")
|
|
return undefined
|
|
},
|
|
})
|
|
expect(useContext(mounted)).toBe("new default")
|
|
dispose()
|
|
})
|
|
})
|