ssrVModel.spec.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { compile } from '../src'
  2. describe('ssr: v-model', () => {
  3. test('<input> (text types)', () => {
  4. expect(compile(`<input v-model="bar">`).code).toMatchInlineSnapshot(`
  5. "const { ssrRenderAttr: _ssrRenderAttr } = require(\\"@vue/server-renderer\\")
  6. return function ssrRender(_ctx, _push, _parent) {
  7. _push(\`<input\${_ssrRenderAttr(\\"value\\", _ctx.bar)}>\`)
  8. }"
  9. `)
  10. expect(compile(`<input type="email" v-model="bar">`).code)
  11. .toMatchInlineSnapshot(`
  12. "const { ssrRenderAttr: _ssrRenderAttr } = require(\\"@vue/server-renderer\\")
  13. return function ssrRender(_ctx, _push, _parent) {
  14. _push(\`<input type=\\"email\\"\${_ssrRenderAttr(\\"value\\", _ctx.bar)}>\`)
  15. }"
  16. `)
  17. })
  18. test('<input type="radio">', () => {
  19. expect(compile(`<input type="radio" value="foo" v-model="bar">`).code)
  20. .toMatchInlineSnapshot(`
  21. "const { ssrLooseEqual: _ssrLooseEqual } = require(\\"@vue/server-renderer\\")
  22. return function ssrRender(_ctx, _push, _parent) {
  23. _push(\`<input type=\\"radio\\" value=\\"foo\\"\${(_ssrLooseEqual(_ctx.bar, \\"foo\\")) ? \\" checked\\" : \\"\\"}>\`)
  24. }"
  25. `)
  26. })
  27. test('<input type="checkbox"', () => {
  28. expect(compile(`<input type="checkbox" v-model="bar">`).code)
  29. .toMatchInlineSnapshot(`
  30. "const { ssrLooseContain: _ssrLooseContain } = require(\\"@vue/server-renderer\\")
  31. return function ssrRender(_ctx, _push, _parent) {
  32. _push(\`<input type=\\"checkbox\\"\${((Array.isArray(_ctx.bar))
  33. ? _ssrLooseContain(_ctx.bar, null)
  34. : _ctx.bar) ? \\" checked\\" : \\"\\"}>\`)
  35. }"
  36. `)
  37. expect(compile(`<input type="checkbox" value="foo" v-model="bar">`).code)
  38. .toMatchInlineSnapshot(`
  39. "const { ssrLooseContain: _ssrLooseContain } = require(\\"@vue/server-renderer\\")
  40. return function ssrRender(_ctx, _push, _parent) {
  41. _push(\`<input type=\\"checkbox\\" value=\\"foo\\"\${((Array.isArray(_ctx.bar))
  42. ? _ssrLooseContain(_ctx.bar, \\"foo\\")
  43. : _ctx.bar) ? \\" checked\\" : \\"\\"}>\`)
  44. }"
  45. `)
  46. })
  47. test('<textarea>', () => {
  48. expect(compile(`<textarea v-model="foo">bar</textarea>`).code)
  49. .toMatchInlineSnapshot(`
  50. "const { ssrInterpolate: _ssrInterpolate } = require(\\"@vue/server-renderer\\")
  51. return function ssrRender(_ctx, _push, _parent) {
  52. _push(\`<textarea>\${_ssrInterpolate(_ctx.foo)}</textarea>\`)
  53. }"
  54. `)
  55. })
  56. test('<input :type="x">', () => {
  57. expect(compile(`<input :type="x" v-model="foo">`).code)
  58. .toMatchInlineSnapshot(`
  59. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel } = require(\\"@vue/server-renderer\\")
  60. return function ssrRender(_ctx, _push, _parent) {
  61. _push(\`<input\${
  62. _ssrRenderAttr(\\"type\\", _ctx.x)
  63. }\${
  64. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, null)
  65. }>\`)
  66. }"
  67. `)
  68. expect(compile(`<input :type="x" v-model="foo" value="bar">`).code)
  69. .toMatchInlineSnapshot(`
  70. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel } = require(\\"@vue/server-renderer\\")
  71. return function ssrRender(_ctx, _push, _parent) {
  72. _push(\`<input\${
  73. _ssrRenderAttr(\\"type\\", _ctx.x)
  74. }\${
  75. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, \\"bar\\")
  76. } value=\\"bar\\">\`)
  77. }"
  78. `)
  79. expect(compile(`<input :type="x" v-model="foo" :value="bar">`).code)
  80. .toMatchInlineSnapshot(`
  81. "const { ssrRenderAttr: _ssrRenderAttr, ssrRenderDynamicModel: _ssrRenderDynamicModel } = require(\\"@vue/server-renderer\\")
  82. return function ssrRender(_ctx, _push, _parent) {
  83. _push(\`<input\${
  84. _ssrRenderAttr(\\"type\\", _ctx.x)
  85. }\${
  86. _ssrRenderDynamicModel(_ctx.x, _ctx.foo, _ctx.bar)
  87. }\${
  88. _ssrRenderAttr(\\"value\\", _ctx.bar)
  89. }>\`)
  90. }"
  91. `)
  92. })
  93. test('<input v-bind="obj">', () => {
  94. expect(compile(`<input v-bind="obj" v-model="foo">`).code)
  95. .toMatchInlineSnapshot(`
  96. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  97. const { ssrRenderAttrs: _ssrRenderAttrs, ssrGetDynamicModelProps: _ssrGetDynamicModelProps } = require(\\"@vue/server-renderer\\")
  98. return function ssrRender(_ctx, _push, _parent) {
  99. let _temp0
  100. _push(\`<input\${_ssrRenderAttrs(_temp0 = _ctx.obj, _mergeProps(_temp0, _ssrGetDynamicModelProps(_temp0, _ctx.foo)))}>\`)
  101. }"
  102. `)
  103. expect(compile(`<input id="x" v-bind="obj" v-model="foo" class="y">`).code)
  104. .toMatchInlineSnapshot(`
  105. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  106. const { ssrRenderAttrs: _ssrRenderAttrs, ssrGetDynamicModelProps: _ssrGetDynamicModelProps } = require(\\"@vue/server-renderer\\")
  107. return function ssrRender(_ctx, _push, _parent) {
  108. let _temp0
  109. _push(\`<input\${_ssrRenderAttrs(_temp0 = _mergeProps({ id: \\"x\\" }, _ctx.obj, { class: \\"y\\" }), _mergeProps(_temp0, _ssrGetDynamicModelProps(_temp0, _ctx.foo)))}>\`)
  110. }"
  111. `)
  112. })
  113. })