ssrTransitionGroup.spec.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import { compile } from '../src'
  2. // transition-group should flatten and concat its children fragments into
  3. // a single one
  4. describe('transition-group', () => {
  5. test('basic', () => {
  6. expect(
  7. compile(`<transition-group><div v-for="i in list"/></transition-group>`)
  8. .code,
  9. ).toMatchInlineSnapshot(`
  10. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  11. return function ssrRender(_ctx, _push, _parent, _attrs) {
  12. _push(\`<!--[-->\`)
  13. _ssrRenderList(_ctx.list, (i) => {
  14. _push(\`<div></div>\`)
  15. })
  16. _push(\`<!--]-->\`)
  17. }"
  18. `)
  19. })
  20. test('with static tag', () => {
  21. expect(
  22. compile(
  23. `<transition-group tag="ul"><div v-for="i in list"/></transition-group>`,
  24. ).code,
  25. ).toMatchInlineSnapshot(`
  26. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  27. return function ssrRender(_ctx, _push, _parent, _attrs) {
  28. _push(\`<ul\${_ssrRenderAttrs(_attrs)}>\`)
  29. _ssrRenderList(_ctx.list, (i) => {
  30. _push(\`<div></div>\`)
  31. })
  32. _push(\`</ul>\`)
  33. }"
  34. `)
  35. })
  36. // #11514
  37. test('with static tag + v-if comment', () => {
  38. expect(
  39. compile(
  40. `<transition-group tag="ul"><div v-for="i in list"/><div v-if="false"></div></transition-group>`,
  41. ).code,
  42. ).toMatchInlineSnapshot(`
  43. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  44. return function ssrRender(_ctx, _push, _parent, _attrs) {
  45. _push(\`<ul\${_ssrRenderAttrs(_attrs)}>\`)
  46. _ssrRenderList(_ctx.list, (i) => {
  47. _push(\`<div></div>\`)
  48. })
  49. if (false) {
  50. _push(\`<div></div>\`)
  51. }
  52. _push(\`</ul>\`)
  53. }"
  54. `)
  55. })
  56. // #11958
  57. test('with static tag + comment', () => {
  58. expect(
  59. compile(
  60. `<transition-group tag="ul"><div v-for="i in list"/><!--test--></transition-group>`,
  61. ).code,
  62. ).toMatchInlineSnapshot(`
  63. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  64. return function ssrRender(_ctx, _push, _parent, _attrs) {
  65. _push(\`<ul\${_ssrRenderAttrs(_attrs)}>\`)
  66. _ssrRenderList(_ctx.list, (i) => {
  67. _push(\`<div></div>\`)
  68. })
  69. _push(\`</ul>\`)
  70. }"
  71. `)
  72. })
  73. test('with dynamic tag', () => {
  74. expect(
  75. compile(
  76. `<transition-group :tag="someTag"><div v-for="i in list"/></transition-group>`,
  77. ).code,
  78. ).toMatchInlineSnapshot(`
  79. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  80. return function ssrRender(_ctx, _push, _parent, _attrs) {
  81. _push(\`<\${
  82. _ctx.someTag
  83. }\${
  84. _ssrRenderAttrs(_attrs)
  85. }>\`)
  86. _ssrRenderList(_ctx.list, (i) => {
  87. _push(\`<div></div>\`)
  88. })
  89. _push(\`</\${_ctx.someTag}>\`)
  90. }"
  91. `)
  92. })
  93. test('with multi fragments children', () => {
  94. expect(
  95. compile(
  96. `<transition-group>
  97. <div v-for="i in 10"/>
  98. <div v-for="i in 10"/>
  99. <template v-if="ok"><div>ok</div></template>
  100. </transition-group>`,
  101. ).code,
  102. ).toMatchInlineSnapshot(`
  103. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  104. return function ssrRender(_ctx, _push, _parent, _attrs) {
  105. _push(\`<!--[-->\`)
  106. _ssrRenderList(10, (i) => {
  107. _push(\`<div></div>\`)
  108. })
  109. _ssrRenderList(10, (i) => {
  110. _push(\`<div></div>\`)
  111. })
  112. if (_ctx.ok) {
  113. _push(\`<div>ok</div>\`)
  114. }
  115. _push(\`<!--]-->\`)
  116. }"
  117. `)
  118. })
  119. test('attribute fallthrough', () => {
  120. expect(
  121. compile(
  122. `<transition-group tag="ul" class="red" id="ok">
  123. </transition-group>`,
  124. ).code,
  125. ).toMatchInlineSnapshot(`
  126. "const { mergeProps: _mergeProps } = require("vue")
  127. const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  128. return function ssrRender(_ctx, _push, _parent, _attrs) {
  129. _push(\`<ul\${_ssrRenderAttrs(_mergeProps({
  130. class: "red",
  131. id: "ok"
  132. }, _attrs))}></ul>\`)
  133. }"
  134. `)
  135. })
  136. })