block.spec.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { insert, normalizeBlock, prepend, remove } from '../src/block'
  2. import { VaporFragment } from '../src/fragment'
  3. const node1 = document.createTextNode('node1')
  4. const node2 = document.createTextNode('node2')
  5. const node3 = document.createTextNode('node3')
  6. const anchor = document.createTextNode('anchor')
  7. describe('block + node ops', () => {
  8. test('normalizeBlock', () => {
  9. expect(normalizeBlock([node1, node2, node3])).toEqual([node1, node2, node3])
  10. expect(normalizeBlock([node1, [node2, [node3]]])).toEqual([
  11. node1,
  12. node2,
  13. node3,
  14. ])
  15. const frag = new VaporFragment(node2)
  16. frag.anchor = anchor
  17. expect(normalizeBlock([node1, frag, [node3]])).toEqual([
  18. node1,
  19. node2,
  20. anchor,
  21. node3,
  22. ])
  23. })
  24. test('insert', () => {
  25. const container = document.createElement('div')
  26. insert([anchor], container)
  27. insert([node1], container)
  28. insert([node2], container, anchor)
  29. insert([], container, node3)
  30. expect(Array.from(container.childNodes)).toEqual([node2, anchor, node1])
  31. expect(() => insert(node3, container, node3)).toThrowError(
  32. 'The child can not be found in the parent.',
  33. )
  34. })
  35. test('prepend', () => {
  36. const container = document.createElement('div')
  37. prepend(container, [node1], node2)
  38. prepend(container, new VaporFragment(node3))
  39. expect(Array.from(container.childNodes)).toEqual([node3, node1, node2])
  40. })
  41. test('remove', () => {
  42. const container = document.createElement('div')
  43. container.append(node1, node2, node3)
  44. const frag = new VaporFragment(node3)
  45. remove([node1], container)
  46. remove(frag, container)
  47. expect(Array.from(container.childNodes)).toEqual([node2])
  48. expect(() => remove(anchor, container)).toThrowError(
  49. 'The node to be removed is not a child of this node.',
  50. )
  51. })
  52. })