import { expect, test } from "vitest" import { ReactorDirective } from "#Source/litor/index.ts" import { signal } from "#Source/reactor/index.ts" const createDirective = (): { directive: ReactorDirective; updates: V[] } => { const updates: V[] = [] const directive = Object.create(ReactorDirective.prototype) as ReactorDirective Reflect.set(directive as object, "isConnected", true) Reflect.set(directive as object, "setValue", (value: V) => { updates.push(value) }) return { directive, updates } } test("ReactorDirective should render the current reactor value and subscribe to updates", () => { const count = signal(() => 1) const { directive, updates } = createDirective() const initial = directive.render(count) expect(initial).toBe(1) count.set(2) expect(updates).toEqual([2]) }) test("ReactorDirective should stop updates while disconnected and resume on reconnect", () => { const count = signal(() => 1) const { directive, updates } = createDirective() directive.render(count) count.set(2) Reflect.set(directive as object, "isConnected", false) directive.disconnected() count.set(3) expect(updates).toEqual([2]) Reflect.set(directive as object, "isConnected", true) directive.reconnected() expect(updates).toEqual([2, 3]) count.set(4) expect(updates).toEqual([2, 3, 4]) })