refcount.test.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { describe, expect, test } from "bun:test"
  2. import { createRoot } from "solid-js"
  3. import { createRefCountMap } from "./refcount"
  4. import { pathKey } from "./path-key"
  5. describe("createRefCountMap", () => {
  6. test("removes an item after its last owner is disposed", () => {
  7. const removed: string[] = []
  8. const map = createRefCountMap(
  9. (key) => key,
  10. (key) => removed.push(key),
  11. )
  12. const first = createRoot((dispose) => {
  13. map("/project")
  14. return dispose
  15. })
  16. const second = createRoot((dispose) => {
  17. map("/project")
  18. return dispose
  19. })
  20. first()
  21. expect(removed).toEqual([])
  22. second()
  23. expect(removed).toEqual(["/project"])
  24. })
  25. test("keeps equivalent path consumers until the last owner is disposed", () => {
  26. const removed: string[] = []
  27. const map = createRefCountMap(
  28. (key) => key,
  29. (key) => removed.push(key),
  30. pathKey,
  31. )
  32. const first = createRoot((dispose) => {
  33. map("C:\\repo")
  34. return dispose
  35. })
  36. const second = createRoot((dispose) => {
  37. map("C:/repo/")
  38. return dispose
  39. })
  40. first()
  41. expect(removed).toEqual([])
  42. second()
  43. expect(removed).toEqual(["C:/repo"])
  44. })
  45. })