ssrTransitionGroup.spec.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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 dynamic tag shorthand', () => {
  94. expect(
  95. compile(
  96. `<transition-group :tag><div v-for="i in list"/></transition-group>`,
  97. ).code,
  98. ).toMatchInlineSnapshot(`
  99. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  100. return function ssrRender(_ctx, _push, _parent, _attrs) {
  101. _push(\`<\${
  102. _ctx.tag
  103. }\${
  104. _ssrRenderAttrs(_attrs)
  105. }>\`)
  106. _ssrRenderList(_ctx.list, (i) => {
  107. _push(\`<div></div>\`)
  108. })
  109. _push(\`</\${_ctx.tag}>\`)
  110. }"
  111. `)
  112. })
  113. test('with multi fragments children', () => {
  114. expect(
  115. compile(
  116. `<transition-group>
  117. <div v-for="i in 10"/>
  118. <div v-for="i in 10"/>
  119. <template v-if="ok"><div>ok</div></template>
  120. </transition-group>`,
  121. ).code,
  122. ).toMatchInlineSnapshot(`
  123. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  124. return function ssrRender(_ctx, _push, _parent, _attrs) {
  125. _push(\`<!--[-->\`)
  126. _ssrRenderList(10, (i) => {
  127. _push(\`<div></div>\`)
  128. })
  129. _ssrRenderList(10, (i) => {
  130. _push(\`<div></div>\`)
  131. })
  132. if (_ctx.ok) {
  133. _push(\`<div>ok</div>\`)
  134. }
  135. _push(\`<!--]-->\`)
  136. }"
  137. `)
  138. })
  139. test('attribute fallthrough', () => {
  140. expect(
  141. compile(
  142. `<transition-group tag="ul" class="red" id="ok">
  143. </transition-group>`,
  144. ).code,
  145. ).toMatchInlineSnapshot(`
  146. "const { mergeProps: _mergeProps } = require("vue")
  147. const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  148. return function ssrRender(_ctx, _push, _parent, _attrs) {
  149. _push(\`<ul\${_ssrRenderAttrs(_mergeProps({
  150. class: "red",
  151. id: "ok"
  152. }, _attrs))}></ul>\`)
  153. }"
  154. `)
  155. })
  156. })