| import { describe, expect, test } from "bun:test" |
| import { createRoot } from "solid-js" |
| import { createRefCountMap } from "./refcount" |
| import { pathKey } from "./path-key" |
|
|
| describe("createRefCountMap", () => { |
| test("removes an item after its last owner is disposed", () => { |
| const removed: string[] = [] |
| const map = createRefCountMap( |
| (key) => key, |
| (key) => removed.push(key), |
| ) |
| const first = createRoot((dispose) => { |
| map("/project") |
| return dispose |
| }) |
| const second = createRoot((dispose) => { |
| map("/project") |
| return dispose |
| }) |
|
|
| first() |
| expect(removed).toEqual([]) |
| second() |
| expect(removed).toEqual(["/project"]) |
| }) |
|
|
| test("keeps equivalent path consumers until the last owner is disposed", () => { |
| const removed: string[] = [] |
| const map = createRefCountMap( |
| (key) => key, |
| (key) => removed.push(key), |
| pathKey, |
| ) |
| const first = createRoot((dispose) => { |
| map("C:\\repo") |
| return dispose |
| }) |
| const second = createRoot((dispose) => { |
| map("C:/repo/") |
| return dispose |
| }) |
|
|
| first() |
| expect(removed).toEqual([]) |
| second() |
| expect(removed).toEqual(["C:/repo"]) |
| }) |
| }) |
|
|