2
0

class.spec.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { basePatch as patch } from 'web/runtime/patch'
  2. import VNode from 'core/vdom/vnode'
  3. describe('class module', () => {
  4. it('shuold create an element with staticClass', () => {
  5. const vnode = new VNode('p', { staticClass: 'class1' })
  6. const elm = patch(null, vnode)
  7. expect(elm.classList.contains('class1')).toBe(true)
  8. })
  9. it('should create an element with class', () => {
  10. const vnode = new VNode('p', { class: 'class1' })
  11. const elm = patch(null, vnode)
  12. expect(elm.classList.contains('class1')).toBe(true)
  13. })
  14. it('should create an element with array class', () => {
  15. const vnode = new VNode('p', { class: ['class1', 'class2'] })
  16. const elm = patch(null, vnode)
  17. expect(elm.classList.contains('class1')).toBe(true)
  18. expect(elm.classList.contains('class2')).toBe(true)
  19. })
  20. it('should create an element with object class', () => {
  21. const vnode = new VNode('p', {
  22. class: { class1: true, class2: false, class3: true }
  23. })
  24. const elm = patch(null, vnode)
  25. expect(elm.classList.contains('class1')).toBe(true)
  26. expect(elm.classList.contains('class2')).toBe(false)
  27. expect(elm.classList.contains('class3')).toBe(true)
  28. })
  29. it('should create an element with mixed class', () => {
  30. const vnode = new VNode('p', {
  31. class: [{ class1: false, class2: true, class3: false }, 'class4', ['class5', 'class6']]
  32. })
  33. const elm = patch(null, vnode)
  34. expect(elm.classList.contains('class1')).toBe(false)
  35. expect(elm.classList.contains('class2')).toBe(true)
  36. expect(elm.classList.contains('class3')).toBe(false)
  37. expect(elm.classList.contains('class4')).toBe(true)
  38. expect(elm.classList.contains('class5')).toBe(true)
  39. expect(elm.classList.contains('class6')).toBe(true)
  40. })
  41. it('should create an element with staticClass and class', () => {
  42. const vnode = new VNode('p', { staticClass: 'class1', class: 'class2' })
  43. const elm = patch(null, vnode)
  44. expect(elm.classList.contains('class1')).toBe(true)
  45. expect(elm.classList.contains('class2')).toBe(true)
  46. })
  47. it('should handle transition class', () => {
  48. const vnode1 = new VNode('p', {
  49. class: { class1: true, class2: false, class3: true }
  50. })
  51. let elm = patch(null, vnode1)
  52. elm._transitionClasses = ['class4']
  53. const vnode2 = new VNode('p', {
  54. class: { class1: true, class2: true, class3: true }
  55. })
  56. elm = patch(vnode1, vnode2)
  57. expect(elm.classList.contains('class1')).toBe(true)
  58. expect(elm.classList.contains('class2')).toBe(true)
  59. expect(elm.classList.contains('class3')).toBe(true)
  60. expect(elm.classList.contains('class4')).toBe(true)
  61. })
  62. it('should change the elements class', () => {
  63. const vnode1 = new VNode('p', {
  64. class: { class1: true, class2: false, class3: true }
  65. })
  66. const vnode2 = new VNode('p', { staticClass: 'foo bar' })
  67. let elm = patch(null, vnode1)
  68. elm = patch(vnode1, vnode2)
  69. expect(elm.classList.contains('class1')).toBe(false)
  70. expect(elm.classList.contains('class2')).toBe(false)
  71. expect(elm.classList.contains('class3')).toBe(false)
  72. expect(elm.classList.contains('foo')).toBe(true)
  73. expect(elm.classList.contains('bar')).toBe(true)
  74. })
  75. it('should remove the elements class', () => {
  76. const vnode1 = new VNode('p', {
  77. class: { class1: true, class2: false, class3: true }
  78. })
  79. const vnode2 = new VNode('p', { class: {}})
  80. let elm = patch(null, vnode1)
  81. elm = patch(vnode1, vnode2)
  82. expect(elm.classList.contains('class1')).toBe(false)
  83. expect(elm.classList.contains('class2')).toBe(false)
  84. expect(elm.classList.contains('class3')).toBe(false)
  85. })
  86. })