vdomFragment.spec.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. // These tests are outdated.
  2. // import {
  3. // createVNode as h,
  4. // render,
  5. // nodeOps,
  6. // NodeTypes,
  7. // TestElement,
  8. // Fragment,
  9. // reactive,
  10. // serialize,
  11. // nextTick,
  12. // resetOps,
  13. // dumpOps,
  14. // NodeOpTypes
  15. // } from '@vue/runtime-test'
  16. // describe('vdom: fragment', () => {
  17. // it('should allow returning multiple component root nodes', async () => {
  18. // class App extends Component {
  19. // render() {
  20. // return [h('div', 'one'), 'two']
  21. // }
  22. // }
  23. // const root = nodeOps.createElement('div')
  24. // await render(h(App), root)
  25. // expect(serialize(root)).toBe(`<div><div>one</div>two</div>`)
  26. // expect(root.children.length).toBe(2)
  27. // expect(root.children[0]).toMatchObject({
  28. // type: NodeTypes.ELEMENT,
  29. // tag: 'div'
  30. // })
  31. // expect((root.children[0] as TestElement).children[0]).toMatchObject({
  32. // type: NodeTypes.TEXT,
  33. // text: 'one'
  34. // })
  35. // expect(root.children[1]).toMatchObject({
  36. // type: NodeTypes.TEXT,
  37. // text: 'two'
  38. // })
  39. // })
  40. // it('should be able to explicitly create fragments', async () => {
  41. // class App extends Component {
  42. // render() {
  43. // return h('div', [h(Fragment, [h('div', 'one'), 'two'])])
  44. // }
  45. // }
  46. // const root = nodeOps.createElement('div')
  47. // await render(h(App), root)
  48. // const parent = root.children[0] as TestElement
  49. // expect(serialize(parent)).toBe(`<div><div>one</div>two</div>`)
  50. // })
  51. // it('should be able to patch fragment children (unkeyed)', async () => {
  52. // const state = observable({ ok: true })
  53. // class App extends Component {
  54. // render() {
  55. // return state.ok
  56. // ? createFragment(
  57. // [h('div', 'one'), createTextVNode('two')],
  58. // ChildrenFlags.NONE_KEYED_VNODES
  59. // )
  60. // : createFragment(
  61. // [h('div', 'foo'), createTextVNode('bar'), createTextVNode('baz')],
  62. // ChildrenFlags.NONE_KEYED_VNODES
  63. // )
  64. // }
  65. // }
  66. // const root = nodeOps.createElement('div')
  67. // await render(h(App), root)
  68. // expect(serialize(root)).toBe(`<div><div>one</div>two</div>`)
  69. // state.ok = false
  70. // await nextTick()
  71. // expect(serialize(root)).toBe(`<div><div>foo</div>barbaz</div>`)
  72. // })
  73. // it('should be able to patch fragment children (implicitly keyed)', async () => {
  74. // const state = observable({ ok: true })
  75. // class App extends Component {
  76. // render() {
  77. // return state.ok
  78. // ? [h('div', 'one'), 'two']
  79. // : [h('pre', 'foo'), 'bar', 'baz']
  80. // }
  81. // }
  82. // const root = nodeOps.createElement('div')
  83. // await await render(h(App), root)
  84. // expect(serialize(root)).toBe(`<div><div>one</div>two</div>`)
  85. // state.ok = false
  86. // await nextTick()
  87. // expect(serialize(root)).toBe(`<div><pre>foo</pre>barbaz</div>`)
  88. // })
  89. // it('should be able to patch fragment children (explcitly keyed)', async () => {
  90. // const state = observable({ ok: true })
  91. // class App extends Component {
  92. // render() {
  93. // return state.ok
  94. // ? [h('div', { key: 1 }, 'one'), h('div', { key: 2 }, 'two')]
  95. // : [h('div', { key: 2 }, 'two'), h('div', { key: 1 }, 'one')]
  96. // }
  97. // }
  98. // const root = nodeOps.createElement('div')
  99. // await render(h(App), root)
  100. // expect(serialize(root)).toBe(`<div><div>one</div><div>two</div></div>`)
  101. // resetOps()
  102. // state.ok = false
  103. // await nextTick()
  104. // expect(serialize(root)).toBe(`<div><div>two</div><div>one</div></div>`)
  105. // const ops = dumpOps()
  106. // // should be moving nodes instead of re-creating them
  107. // expect(ops.some(op => op.type === NodeOpTypes.CREATE)).toBe(false)
  108. // })
  109. // it('should be able to move fragment', async () => {
  110. // const state = observable({ ok: true })
  111. // class App extends Component {
  112. // render() {
  113. // return state.ok
  114. // ? h('div', [
  115. // h('div', { key: 1 }, 'outer'),
  116. // h(Fragment, { key: 2 }, [
  117. // h('div', { key: 1 }, 'one'),
  118. // h('div', { key: 2 }, 'two')
  119. // ])
  120. // ])
  121. // : h('div', [
  122. // h(Fragment, { key: 2 }, [
  123. // h('div', { key: 2 }, 'two'),
  124. // h('div', { key: 1 }, 'one')
  125. // ]),
  126. // h('div', { key: 1 }, 'outer')
  127. // ])
  128. // }
  129. // }
  130. // const root = nodeOps.createElement('div')
  131. // await render(h(App), root)
  132. // const parent = root.children[0] as TestElement
  133. // expect(serialize(parent)).toBe(
  134. // `<div><div>outer</div><div>one</div><div>two</div></div>`
  135. // )
  136. // resetOps()
  137. // state.ok = false
  138. // await nextTick()
  139. // expect(serialize(parent)).toBe(
  140. // `<div><div>two</div><div>one</div><div>outer</div></div>`
  141. // )
  142. // const ops = dumpOps()
  143. // // should be moving nodes instead of re-creating them
  144. // expect(ops.some(op => op.type === NodeOpTypes.CREATE)).toBe(false)
  145. // })
  146. // it('should be able to handle nested fragments', async () => {
  147. // const state = observable({ ok: true })
  148. // class App extends Component {
  149. // render() {
  150. // return state.ok
  151. // ? [
  152. // h('div', { key: 1 }, 'outer'),
  153. // h(Fragment, { key: 2 }, [
  154. // h('div', { key: 1 }, 'one'),
  155. // h('div', { key: 2 }, 'two')
  156. // ])
  157. // ]
  158. // : [
  159. // h(Fragment, { key: 2 }, [
  160. // h('div', { key: 2 }, 'two'),
  161. // h('div', { key: 1 }, 'one')
  162. // ]),
  163. // h('div', { key: 1 }, 'outer')
  164. // ]
  165. // }
  166. // }
  167. // const root = nodeOps.createElement('div')
  168. // await render(h(App), root)
  169. // expect(serialize(root)).toBe(
  170. // `<div><div>outer</div><div>one</div><div>two</div></div>`
  171. // )
  172. // resetOps()
  173. // state.ok = false
  174. // await nextTick()
  175. // expect(serialize(root)).toBe(
  176. // `<div><div>two</div><div>one</div><div>outer</div></div>`
  177. // )
  178. // const ops = dumpOps()
  179. // // should be moving nodes instead of re-creating them
  180. // expect(ops.some(op => op.type === NodeOpTypes.CREATE)).toBe(false)
  181. // })
  182. // })