dom_spec.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /**
  2. * We are not testing transition-related stuff here,
  3. * those are tested in transition_spec.js.
  4. */
  5. var Vue = require('../../../../src/vue')
  6. var _ = require('../../../../src/util')
  7. if (_.inBrowser) {
  8. describe('DOM API', function () {
  9. var vm, vm2, parent, target, sibling, empty, spy
  10. beforeEach(function () {
  11. spy = jasmine.createSpy('dom')
  12. parent = document.createElement('div')
  13. target = document.createElement('div')
  14. sibling = document.createElement('div')
  15. empty = document.createElement('div')
  16. parent.appendChild(target)
  17. parent.appendChild(sibling)
  18. var el = document.createElement('div')
  19. vm = new Vue({ el: el })
  20. // block instance
  21. var frag = document.createDocumentFragment()
  22. frag.appendChild(document.createElement('p'))
  23. frag.appendChild(document.createElement('span'))
  24. vm2 = new Vue({
  25. el: frag
  26. })
  27. })
  28. describe('$appendTo', function () {
  29. it('normal instance', function () {
  30. vm.$appendTo(parent, spy)
  31. expect(parent.childNodes.length).toBe(3)
  32. expect(parent.lastChild).toBe(vm.$el)
  33. expect(spy.calls.count()).toBe(1)
  34. })
  35. it('block instance', function () {
  36. vm2.$appendTo(parent, spy)
  37. expect(parent.childNodes.length).toBe(6)
  38. expect(parent.childNodes[2]).toBe(vm2._fragmentStart)
  39. expect(parent.childNodes[2]).toBe(vm2.$el)
  40. expect(parent.childNodes[3].tagName).toBe('P')
  41. expect(parent.childNodes[4].tagName).toBe('SPAN')
  42. expect(parent.childNodes[5]).toBe(vm2._fragmentEnd)
  43. expect(spy.calls.count()).toBe(1)
  44. })
  45. })
  46. describe('$prependTo', function () {
  47. it('normal instance', function () {
  48. vm.$prependTo(parent, spy)
  49. expect(parent.childNodes.length).toBe(3)
  50. expect(parent.firstChild).toBe(vm.$el)
  51. expect(spy.calls.count()).toBe(1)
  52. vm.$prependTo(empty, spy)
  53. expect(empty.childNodes.length).toBe(1)
  54. expect(empty.firstChild).toBe(vm.$el)
  55. expect(spy.calls.count()).toBe(2)
  56. })
  57. it('block instance', function () {
  58. vm2.$prependTo(parent, spy)
  59. expect(parent.childNodes.length).toBe(6)
  60. expect(parent.childNodes[0]).toBe(vm2._fragmentStart)
  61. expect(parent.childNodes[0]).toBe(vm2.$el)
  62. expect(parent.childNodes[1].tagName).toBe('P')
  63. expect(parent.childNodes[2].tagName).toBe('SPAN')
  64. expect(parent.childNodes[3]).toBe(vm2._fragmentEnd)
  65. expect(spy.calls.count()).toBe(1)
  66. // empty
  67. vm2.$prependTo(empty, spy)
  68. expect(empty.childNodes.length).toBe(4)
  69. expect(empty.childNodes[0]).toBe(vm2._fragmentStart)
  70. expect(empty.childNodes[0]).toBe(vm2.$el)
  71. expect(empty.childNodes[1].tagName).toBe('P')
  72. expect(empty.childNodes[2].tagName).toBe('SPAN')
  73. expect(empty.childNodes[3]).toBe(vm2._fragmentEnd)
  74. expect(spy.calls.count()).toBe(2)
  75. })
  76. })
  77. describe('$before', function () {
  78. it('normal instance', function () {
  79. vm.$before(sibling, spy)
  80. expect(parent.childNodes.length).toBe(3)
  81. expect(parent.childNodes[1]).toBe(vm.$el)
  82. expect(spy.calls.count()).toBe(1)
  83. })
  84. it('block instance', function () {
  85. vm2.$before(sibling, spy)
  86. expect(parent.childNodes.length).toBe(6)
  87. expect(parent.childNodes[1]).toBe(vm2._fragmentStart)
  88. expect(parent.childNodes[1]).toBe(vm2.$el)
  89. expect(parent.childNodes[2].tagName).toBe('P')
  90. expect(parent.childNodes[3].tagName).toBe('SPAN')
  91. expect(parent.childNodes[4]).toBe(vm2._fragmentEnd)
  92. expect(spy.calls.count()).toBe(1)
  93. })
  94. })
  95. describe('$after', function () {
  96. it('normal instance', function () {
  97. vm.$after(target, spy)
  98. expect(parent.childNodes.length).toBe(3)
  99. expect(parent.childNodes[1]).toBe(vm.$el)
  100. expect(spy.calls.count()).toBe(1)
  101. })
  102. it('normal instance no next sibling', function () {
  103. vm.$after(sibling, spy)
  104. expect(parent.childNodes.length).toBe(3)
  105. expect(parent.lastChild).toBe(vm.$el)
  106. expect(spy.calls.count()).toBe(1)
  107. })
  108. it('block instance', function () {
  109. vm2.$after(target, spy)
  110. expect(parent.childNodes.length).toBe(6)
  111. expect(parent.childNodes[1]).toBe(vm2._fragmentStart)
  112. expect(parent.childNodes[1]).toBe(vm2.$el)
  113. expect(parent.childNodes[2].tagName).toBe('P')
  114. expect(parent.childNodes[3].tagName).toBe('SPAN')
  115. expect(parent.childNodes[4]).toBe(vm2._fragmentEnd)
  116. expect(spy.calls.count()).toBe(1)
  117. })
  118. it('block instance no next sibling', function () {
  119. vm2.$after(sibling, spy)
  120. expect(parent.childNodes.length).toBe(6)
  121. expect(parent.childNodes[2]).toBe(vm2._fragmentStart)
  122. expect(parent.childNodes[2]).toBe(vm2.$el)
  123. expect(parent.childNodes[3].tagName).toBe('P')
  124. expect(parent.childNodes[4].tagName).toBe('SPAN')
  125. expect(parent.childNodes[5]).toBe(vm2._fragmentEnd)
  126. expect(spy.calls.count()).toBe(1)
  127. })
  128. })
  129. describe('$remove', function () {
  130. it('normal instance', function () {
  131. vm.$before(sibling)
  132. expect(parent.childNodes.length).toBe(3)
  133. expect(parent.childNodes[1]).toBe(vm.$el)
  134. vm.$remove(spy)
  135. expect(parent.childNodes.length).toBe(2)
  136. expect(parent.childNodes[0]).toBe(target)
  137. expect(parent.childNodes[1]).toBe(sibling)
  138. expect(spy.calls.count()).toBe(1)
  139. })
  140. it('block instance', function () {
  141. vm2.$before(sibling)
  142. expect(parent.childNodes.length).toBe(6)
  143. expect(parent.childNodes[1]).toBe(vm2._fragmentStart)
  144. expect(parent.childNodes[1]).toBe(vm2.$el)
  145. expect(parent.childNodes[2].tagName).toBe('P')
  146. expect(parent.childNodes[3].tagName).toBe('SPAN')
  147. expect(parent.childNodes[4]).toBe(vm2._fragmentEnd)
  148. vm2.$remove(spy)
  149. expect(parent.childNodes.length).toBe(2)
  150. expect(parent.childNodes[0]).toBe(target)
  151. expect(parent.childNodes[1]).toBe(sibling)
  152. expect(spy.calls.count()).toBe(1)
  153. })
  154. it('detached', function () {
  155. vm.$remove(spy)
  156. expect(spy.calls.count()).toBe(1)
  157. })
  158. })
  159. describe('$nextTick', function () {
  160. it('should work', function (done) {
  161. var context
  162. var called = false
  163. vm.$nextTick(function () {
  164. called = true
  165. context = this
  166. })
  167. expect(called).toBe(false)
  168. _.nextTick(function () {
  169. expect(called).toBe(true)
  170. expect(context).toBe(vm)
  171. done()
  172. })
  173. })
  174. })
  175. })
  176. }