sfc-parser.spec.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { parseComponent } from 'sfc/parser'
  2. describe('Single File Component parser', () => {
  3. it('should parse', () => {
  4. const res = parseComponent(`
  5. <template>
  6. <div>hi</div>
  7. </template>
  8. <style src="./test.css"></style>
  9. <style lang="stylus" scoped>
  10. h1
  11. color red
  12. h2
  13. color green
  14. </style>
  15. <script>
  16. export default {}
  17. </script>
  18. <div>
  19. <style>nested should be ignored</style>
  20. </div>
  21. `)
  22. expect(res.template.content.trim()).toBe('<div>hi</div>')
  23. expect(res.styles.length).toBe(2)
  24. expect(res.styles[0].src).toBe('./test.css')
  25. expect(res.styles[1].lang).toBe('stylus')
  26. expect(res.styles[1].scoped).toBe(true)
  27. expect(res.styles[1].content.trim()).toBe('h1\n color red\nh2\n color green')
  28. expect(res.script.content.trim()).toBe('export default {}')
  29. })
  30. it('should parse template with closed input', () => {
  31. const res = parseComponent(`
  32. <template>
  33. <input type="text"/>
  34. </template>
  35. `)
  36. expect(res.template.content.trim()).toBe('<input type="text"/>')
  37. })
  38. it('should handle nested template', () => {
  39. const res = parseComponent(`
  40. <template>
  41. <div><template v-if="ok">hi</template></div>
  42. </template>
  43. `)
  44. expect(res.template.content.trim()).toBe('<div><template v-if="ok">hi</template></div>')
  45. })
  46. it('pad content', () => {
  47. const res = parseComponent(`
  48. <template>
  49. <div></div>
  50. </template>
  51. <script>
  52. export default {}
  53. </script>
  54. <style>
  55. h1 { color: red }
  56. </style>
  57. `.trim(), { pad: true })
  58. expect(res.script.content).toBe(Array(3 + 1).join('//\n') + '\nexport default {}\n')
  59. expect(res.styles[0].content).toBe(Array(6 + 1).join('\n') + '\nh1 { color: red }\n')
  60. })
  61. })