auto-scroll.test.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { expect, test } from "bun:test"
  2. import { createAutoScroll } from "@opencode-ai/ui/hooks"
  3. import { createRoot } from "solid-js"
  4. test("restores bottom anchoring when Suspense reattaches the scroll viewport", async () => {
  5. const main = document.createElement("main")
  6. const surface = document.createElement("div")
  7. const viewport = document.createElement("div")
  8. const content = document.createElement("div")
  9. surface.append(viewport)
  10. viewport.append(content)
  11. main.append(surface)
  12. document.body.append(main)
  13. let scrollTop = 200
  14. Object.defineProperties(viewport, {
  15. clientHeight: { value: 100 },
  16. scrollHeight: { value: 300 },
  17. scrollTop: {
  18. get: () => scrollTop,
  19. set: (value: number) => {
  20. scrollTop = Math.min(value, 200)
  21. },
  22. },
  23. })
  24. const dispose = createRoot((dispose) => {
  25. const scroll = createAutoScroll({ working: () => true })
  26. scroll.scrollRef(viewport)
  27. scroll.contentRef(content)
  28. return dispose
  29. })
  30. surface.remove()
  31. viewport.scrollTop = 0
  32. main.append(surface)
  33. await Promise.resolve()
  34. expect(viewport.scrollTop).toBe(200)
  35. dispose()
  36. main.remove()
  37. })