ssrVModel.spec.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import { compile } from '../src'
  2. function compileWithWrapper(src: string) {
  3. return compile(`<div>${src}</div>`)
  4. }
  5. describe('ssr: v-model', () => {
  6. test('<input> (text types)', () => {
  7. expect(compileWithWrapper(`<input v-model="bar">`).code)
  8. .toMatchInlineSnapshot(`
  9. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  10. return function ssrRender(_ctx, _push, _parent, _attrs) {
  11. _push(\`<div\${
  12. _ssrRenderAttrs(_attrs)
  13. }><input\${
  14. _ssrRenderAttr(\\"value\\", _ctx.bar)
  15. }></div>\`)
  16. }"
  17. `)
  18. expect(compileWithWrapper(`<input type="email" v-model="bar">`).code)
  19. .toMatchInlineSnapshot(`
  20. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  21. return function ssrRender(_ctx, _push, _parent, _attrs) {
  22. _push(\`<div\${
  23. _ssrRenderAttrs(_attrs)
  24. }><input type=\\"email\\"\${
  25. _ssrRenderAttr(\\"value\\", _ctx.bar)
  26. }></div>\`)
  27. }"
  28. `)
  29. })
  30. test('<input type="radio">', () => {
  31. expect(
  32. compileWithWrapper(`<input type="radio" value="foo" v-model="bar">`).code
  33. ).toMatchInlineSnapshot(`
  34. "const { ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  35. return function ssrRender(_ctx, _push, _parent, _attrs) {
  36. _push(\`<div\${
  37. _ssrRenderAttrs(_attrs)
  38. }><input type=\\"radio\\" value=\\"foo\\"\${
  39. (_ssrLooseEqual(_ctx.bar, \\"foo\\")) ? \\" checked\\" : \\"\\"
  40. }></div>\`)
  41. }"
  42. `)
  43. })
  44. test('<input type="checkbox"', () => {
  45. expect(compileWithWrapper(`<input type="checkbox" v-model="bar">`).code)
  46. .toMatchInlineSnapshot(`
  47. "const { ssrLooseContain: _ssrLooseContain, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  48. return function ssrRender(_ctx, _push, _parent, _attrs) {
  49. _push(\`<div\${
  50. _ssrRenderAttrs(_attrs)
  51. }><input type=\\"checkbox\\"\${
  52. ((Array.isArray(_ctx.bar))
  53. ? _ssrLooseContain(_ctx.bar, null)
  54. : _ctx.bar) ? \\" checked\\" : \\"\\"
  55. }></div>\`)
  56. }"
  57. `)
  58. expect(
  59. compileWithWrapper(`<input type="checkbox" value="foo" v-model="bar">`)
  60. .code
  61. ).toMatchInlineSnapshot(`
  62. "const { ssrLooseContain: _ssrLooseContain, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  63. return function ssrRender(_ctx, _push, _parent, _attrs) {
  64. _push(\`<div\${
  65. _ssrRenderAttrs(_attrs)
  66. }><input type=\\"checkbox\\" value=\\"foo\\"\${
  67. ((Array.isArray(_ctx.bar))
  68. ? _ssrLooseContain(_ctx.bar, \\"foo\\")
  69. : _ctx.bar) ? \\" checked\\" : \\"\\"
  70. }></div>\`)
  71. }"
  72. `)
  73. })
  74. test('<textarea>', () => {
  75. expect(compileWithWrapper(`<textarea v-model="foo">bar</textarea>`).code)
  76. .toMatchInlineSnapshot(`
  77. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrInterpolate: _ssrInterpolate } = require(\\"@vue/server-renderer\\")
  78. return function ssrRender(_ctx, _push, _parent, _attrs) {
  79. _push(\`<div\${
  80. _ssrRenderAttrs(_attrs)
  81. }><textarea>\${
  82. _ssrInterpolate(_ctx.foo)
  83. }</textarea></div>\`)
  84. }"
  85. `)
  86. })
  87. test('<input :type="x">', () => {
  88. expect(compileWithWrapper(`<input :type="x" v-model="foo">`).code)
  89. .toMatchInlineSnapshot(`
  90. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  91. return function ssrRender(_ctx, _push, _parent, _attrs) {
  92. _push(\`<div\${
  93. _ssrRenderAttrs(_attrs)
  94. }><input\${
  95. _ssrRenderAttr(\\"type\\", _ctx.x)
  96. }\${
  97. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, null)
  98. }></div>\`)
  99. }"
  100. `)
  101. expect(
  102. compileWithWrapper(`<input :type="x" v-model="foo" value="bar">`).code
  103. ).toMatchInlineSnapshot(`
  104. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  105. return function ssrRender(_ctx, _push, _parent, _attrs) {
  106. _push(\`<div\${
  107. _ssrRenderAttrs(_attrs)
  108. }><input\${
  109. _ssrRenderAttr(\\"type\\", _ctx.x)
  110. }\${
  111. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, \\"bar\\")
  112. } value=\\"bar\\"></div>\`)
  113. }"
  114. `)
  115. expect(
  116. compileWithWrapper(`<input :type="x" v-model="foo" :value="bar">`).code
  117. ).toMatchInlineSnapshot(`
  118. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"@vue/server-renderer\\")
  119. return function ssrRender(_ctx, _push, _parent, _attrs) {
  120. _push(\`<div\${
  121. _ssrRenderAttrs(_attrs)
  122. }><input\${
  123. _ssrRenderAttr(\\"type\\", _ctx.x)
  124. }\${
  125. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, _ctx.bar)
  126. }\${
  127. _ssrRenderAttr(\\"value\\", _ctx.bar)
  128. }></div>\`)
  129. }"
  130. `)
  131. })
  132. test('<input v-bind="obj">', () => {
  133. expect(compileWithWrapper(`<input v-bind="obj" v-model="foo">`).code)
  134. .toMatchInlineSnapshot(`
  135. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  136. const { ssrRenderAttrs: _ssrRenderAttrs, ssrGetDynamicModelProps: _ssrGetDynamicModelProps } = require(\\"@vue/server-renderer\\")
  137. return function ssrRender(_ctx, _push, _parent, _attrs) {
  138. let _temp0
  139. _push(\`<div\${
  140. _ssrRenderAttrs(_attrs)
  141. }><input\${
  142. _ssrRenderAttrs((_temp0 = _ctx.obj, _mergeProps(_temp0, _ssrGetDynamicModelProps(_temp0, _ctx.foo))))
  143. }></div>\`)
  144. }"
  145. `)
  146. expect(
  147. compileWithWrapper(`<input id="x" v-bind="obj" v-model="foo" class="y">`)
  148. .code
  149. ).toMatchInlineSnapshot(`
  150. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  151. const { ssrRenderAttrs: _ssrRenderAttrs, ssrGetDynamicModelProps: _ssrGetDynamicModelProps } = require(\\"@vue/server-renderer\\")
  152. return function ssrRender(_ctx, _push, _parent, _attrs) {
  153. let _temp0
  154. _push(\`<div\${
  155. _ssrRenderAttrs(_attrs)
  156. }><input\${
  157. _ssrRenderAttrs((_temp0 = _mergeProps({ id: \\"x\\" }, _ctx.obj, { class: \\"y\\" }), _mergeProps(_temp0, _ssrGetDynamicModelProps(_temp0, _ctx.foo))))
  158. }></div>\`)
  159. }"
  160. `)
  161. })
  162. })