block.spec.ts 1.8 KB

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