templateTransformSrcset.spec.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {
  2. generate,
  3. baseParse,
  4. transform,
  5. TransformOptions
  6. } from '@vue/compiler-core'
  7. import {
  8. transformSrcset,
  9. createSrcsetTransformWithOptions
  10. } from '../src/templateTransformSrcset'
  11. import { transformElement } from '../../compiler-core/src/transforms/transformElement'
  12. import { transformBind } from '../../compiler-core/src/transforms/vBind'
  13. import {
  14. AssetURLOptions,
  15. normalizeOptions
  16. } from '../src/templateTransformAssetUrl'
  17. import { stringifyStatic } from '../../compiler-dom/src/transforms/stringifyStatic'
  18. function compileWithSrcset(
  19. template: string,
  20. options?: AssetURLOptions,
  21. transformOptions?: TransformOptions
  22. ) {
  23. const ast = baseParse(template)
  24. const srcsetTransform = options
  25. ? createSrcsetTransformWithOptions(normalizeOptions(options))
  26. : transformSrcset
  27. transform(ast, {
  28. nodeTransforms: [srcsetTransform, transformElement],
  29. directiveTransforms: {
  30. bind: transformBind
  31. },
  32. ...transformOptions
  33. })
  34. return generate(ast, { mode: 'module' })
  35. }
  36. const src = `
  37. <img src="./logo.png" srcset=""/>
  38. <img src="./logo.png" srcset="./logo.png"/>
  39. <img src="./logo.png" srcset="./logo.png 2x"/>
  40. <img src="./logo.png" srcset="./logo.png 2x"/>
  41. <img src="./logo.png" srcset="./logo.png, ./logo.png 2x"/>
  42. <img src="./logo.png" srcset="./logo.png 2x, ./logo.png"/>
  43. <img src="./logo.png" srcset="./logo.png 2x, ./logo.png 3x"/>
  44. <img src="./logo.png" srcset="./logo.png, ./logo.png 2x, ./logo.png 3x"/>
  45. <img src="/logo.png" srcset="/logo.png, /logo.png 2x"/>
  46. <img src="https://example.com/logo.png" srcset="https://example.com/logo.png, https://example.com/logo.png 2x"/>
  47. <img src="/logo.png" srcset="/logo.png, ./logo.png 2x"/>
  48. <img src="data:image/png;base64,i" srcset="data:image/png;base64,i 1x, data:image/png;base64,i 2x"/>
  49. `
  50. describe('compiler sfc: transform srcset', () => {
  51. test('transform srcset', () => {
  52. expect(compileWithSrcset(src).code).toMatchSnapshot()
  53. })
  54. test('transform srcset w/ base', () => {
  55. expect(
  56. compileWithSrcset(src, {
  57. base: '/foo'
  58. }).code
  59. ).toMatchSnapshot()
  60. })
  61. test('transform srcset w/ includeAbsolute: true', () => {
  62. expect(
  63. compileWithSrcset(src, {
  64. includeAbsolute: true
  65. }).code
  66. ).toMatchSnapshot()
  67. })
  68. test('transform srcset w/ stringify', () => {
  69. const code = compileWithSrcset(
  70. `<div>${src}</div>`,
  71. {
  72. includeAbsolute: true
  73. },
  74. {
  75. hoistStatic: true,
  76. transformHoist: stringifyStatic
  77. }
  78. ).code
  79. expect(code).toMatch(`_createStaticVNode`)
  80. expect(code).toMatchSnapshot()
  81. })
  82. })