import { parseComponent } from 'sfc/parser'
describe('Single File Component parser', () => {
it('should parse', () => {
const res = parseComponent(`
hi
`)
expect(res.template.content.trim()).toBe('hi
')
expect(res.styles.length).toBe(4)
expect(res.styles[0].src).toBe('./test.css')
expect(res.styles[1].lang).toBe('stylus')
expect(res.styles[1].scoped).toBe(true)
expect(res.styles[1].content.trim()).toBe('h1\n color red\nh2\n color green')
expect(res.styles[2].module).toBe(true)
expect(res.styles[3].attrs['bool-attr']).toBe(true)
expect(res.styles[3].attrs['val-attr']).toBe('test')
expect(res.script.content.trim()).toBe('export default {}')
})
it('should parse template with closed input', () => {
const res = parseComponent(`
`)
expect(res.template.content.trim()).toBe('')
})
it('should handle nested template', () => {
const res = parseComponent(`
hi
`)
expect(res.template.content.trim()).toBe('hi
')
})
it('deindent content', () => {
const content = `
`
const deindentDefault = parseComponent(content.trim(), { pad: false })
const deindentEnabled = parseComponent(content.trim(), { pad: false, deindent: true })
const deindentDisabled = parseComponent(content.trim(), { pad: false, deindent: false })
expect(deindentDefault.template.content).toBe('\n\n')
expect(deindentDefault.script.content).toBe('\nexport default {}\n')
expect(deindentDefault.styles[0].content).toBe('\nh1 { color: red }\n')
expect(deindentEnabled.template.content).toBe('\n\n')
expect(deindentEnabled.script.content).toBe('\nexport default {}\n')
expect(deindentEnabled.styles[0].content).toBe('\nh1 { color: red }\n')
expect(deindentDisabled.template.content).toBe('\n \n ')
expect(deindentDisabled.script.content).toBe('\n export default {}\n ')
expect(deindentDisabled.styles[0].content).toBe('\n h1 { color: red }\n ')
})
it('pad content', () => {
const content = `
`
const padDefault = parseComponent(content.trim(), { pad: true })
const padLine = parseComponent(content.trim(), { pad: 'line' })
const padSpace = parseComponent(content.trim(), { pad: 'space' })
expect(padDefault.script.content).toBe(Array(3 + 1).join('//\n') + '\nexport default {}\n')
expect(padDefault.styles[0].content).toBe(Array(6 + 1).join('\n') + '\nh1 { color: red }\n')
expect(padLine.script.content).toBe(Array(3 + 1).join('//\n') + '\nexport default {}\n')
expect(padLine.styles[0].content).toBe(Array(6 + 1).join('\n') + '\nh1 { color: red }\n')
expect(padSpace.script.content).toBe(`