dom_spec.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. var _ = require('src/util')
  2. describe('Util - DOM', function () {
  3. var parent, child, target
  4. function div () {
  5. return document.createElement('div')
  6. }
  7. beforeEach(function () {
  8. parent = div()
  9. child = div()
  10. target = div()
  11. parent.appendChild(child)
  12. })
  13. it('inDoc', function () {
  14. expect(_.inDoc(target)).toBe(false)
  15. document.body.appendChild(target)
  16. expect(_.inDoc(target)).toBe(true)
  17. document.body.removeChild(target)
  18. expect(_.inDoc(target)).toBe(false)
  19. })
  20. it('getAttr', function () {
  21. target.setAttribute('v-test', 'ok')
  22. var val = _.getAttr(target, 'v-test')
  23. expect(val).toBe('ok')
  24. expect(target.hasAttribute('v-test')).toBe(false)
  25. })
  26. it('before', function () {
  27. _.before(target, child)
  28. expect(target.parentNode).toBe(parent)
  29. expect(target.nextSibling).toBe(child)
  30. })
  31. it('after', function () {
  32. _.after(target, child)
  33. expect(target.parentNode).toBe(parent)
  34. expect(child.nextSibling).toBe(target)
  35. })
  36. it('after with sibling', function () {
  37. var sibling = div()
  38. parent.appendChild(sibling)
  39. _.after(target, child)
  40. expect(target.parentNode).toBe(parent)
  41. expect(child.nextSibling).toBe(target)
  42. })
  43. it('remove', function () {
  44. _.remove(child)
  45. expect(child.parentNode).toBeNull()
  46. expect(parent.childNodes.length).toBe(0)
  47. })
  48. it('prepend', function () {
  49. _.prepend(target, parent)
  50. expect(target.parentNode).toBe(parent)
  51. expect(parent.firstChild).toBe(target)
  52. })
  53. it('prepend to empty node', function () {
  54. parent.removeChild(child)
  55. _.prepend(target, parent)
  56. expect(target.parentNode).toBe(parent)
  57. expect(parent.firstChild).toBe(target)
  58. })
  59. it('replace', function () {
  60. _.replace(child, target)
  61. expect(parent.childNodes.length).toBe(1)
  62. expect(parent.firstChild).toBe(target)
  63. })
  64. it('on/off', function () {
  65. // IE requires element to be in document to fire events
  66. document.body.appendChild(target)
  67. var spy = jasmine.createSpy()
  68. _.on(target, 'click', spy)
  69. var e = document.createEvent('HTMLEvents')
  70. e.initEvent('click', true, true)
  71. target.dispatchEvent(e)
  72. expect(spy.calls.count()).toBe(1)
  73. expect(spy).toHaveBeenCalledWith(e)
  74. _.off(target, 'click', spy)
  75. target.dispatchEvent(e)
  76. expect(spy.calls.count()).toBe(1)
  77. document.body.removeChild(target)
  78. })
  79. it('addClass/removeClass', function () {
  80. var el = document.createElement('div')
  81. el.className = 'aa bb cc'
  82. _.removeClass(el, 'bb')
  83. expect(el.className).toBe('aa cc')
  84. _.removeClass(el, 'aa')
  85. expect(el.className).toBe('cc')
  86. _.addClass(el, 'bb')
  87. expect(el.className).toBe('cc bb')
  88. _.addClass(el, 'bb')
  89. expect(el.className).toBe('cc bb')
  90. })
  91. it('addClass/removeClass for SVG/IE9', function () {
  92. var el = document.createElementNS('http://www.w3.org/2000/svg', 'circle')
  93. el.setAttribute('class', 'aa bb cc')
  94. _.removeClass(el, 'bb')
  95. expect(el.getAttribute('class')).toBe('aa cc')
  96. _.removeClass(el, 'aa')
  97. expect(el.getAttribute('class')).toBe('cc')
  98. _.addClass(el, 'bb')
  99. expect(el.getAttribute('class')).toBe('cc bb')
  100. _.addClass(el, 'bb')
  101. expect(el.getAttribute('class')).toBe('cc bb')
  102. })
  103. it('getOuterHTML for SVG', function () {
  104. var el = document.createElementNS('http://www.w3.org/2000/svg', 'circle')
  105. el.setAttribute('class', 'aa bb cc')
  106. var html = _.getOuterHTML(el)
  107. var re = /<circle (xmlns="http:\/\/www\.w3\.org\/2000\/svg"\s)?class="aa bb cc"(\s?\/>|><\/circle>)/
  108. expect(re.test(html)).toBe(true)
  109. })
  110. })