| 1 | import { assert, describe, it } from "@effect/vitest" |
| 2 | import { AtomRef } from "effect/reactivity" |
| 3 | |
| 4 | describe("AtomRef", () => { |
| 5 | it("notifies each subscribed listener once when a listener resubscribes itself", () => { |
| 6 | const ref = AtomRef.make(0) |
| 7 | const calls = { A: 0, B: 0, C: 0 } |
| 8 | |
| 9 | let unsubscribeA = () => {} |
| 10 | function A() { |
| 11 | calls.A++ |
| 12 | unsubscribeA() |
| 13 | unsubscribeA = ref.subscribe(A) |
| 14 | } |
| 15 | unsubscribeA = ref.subscribe(A) |
| 16 | ref.subscribe(() => { |
| 17 | calls.B++ |
| 18 | }) |
| 19 | ref.subscribe(() => { |
| 20 | calls.C++ |
| 21 | }) |
| 22 | |
| 23 | ref.set(1) |
| 24 | |
| 25 | assert.deepStrictEqual(calls, { A: 1, B: 1, C: 1 }) |
| 26 | }) |
| 27 | }) |