browser-frame.client.spec.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { describe, expect, it, vi } from 'vitest'
  2. import { IframeImpl } from '../src/client/browser/BrowserFrame.ts'
  3. describe('IframeImpl', () => {
  4. it('owns transient sandbox mode and prepared document state', () => {
  5. const changed = vi.fn<(sandboxed: boolean) => void>()
  6. const loaded = vi.fn<(revision: number) => void>()
  7. const frame = new IframeImpl(changed, loaded)
  8. const listener = vi.fn()
  9. const unsubscribe = frame.subscribe(listener)
  10. frame.toggleSandbox()
  11. expect(frame.getSnapshot().sandboxed).toBe(false)
  12. expect(changed).toHaveBeenCalledWith(false)
  13. const document = {
  14. target: { kind: 'https' as const, url: 'https://example.test/', title: 'example.test' },
  15. src: 'https://example.test/',
  16. revision: 4,
  17. }
  18. frame.reportLoadFailed(4)
  19. expect(frame.getSnapshot().loadFailed).toBe(false)
  20. frame.setDocument(document)
  21. frame.reportLoadFailed(3)
  22. expect(frame.getSnapshot().loadFailed).toBe(false)
  23. frame.reportLoadFailed(4)
  24. frame.reportLoadFailed(4)
  25. expect(frame.getSnapshot().loadFailed).toBe(true)
  26. frame.reportLoaded(4)
  27. expect(loaded).toHaveBeenCalledWith(4)
  28. frame.setDocument({ ...document, revision: 5 })
  29. expect(frame.getSnapshot().loadFailed).toBe(false)
  30. frame.clearDocument()
  31. expect(frame.getSnapshot().document).toBeUndefined()
  32. frame.reportLoadFailed(5)
  33. expect(frame.getSnapshot().loadFailed).toBe(false)
  34. frame.clearDocument()
  35. expect(listener).toHaveBeenCalled()
  36. unsubscribe()
  37. })
  38. })