test(compiler-sfc): more tests (#536)
This commit is contained in:
parent
532d3b68ab
commit
559fa27185
@ -0,0 +1,27 @@
|
|||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`source map 1`] = `
|
||||||
|
Object {
|
||||||
|
"mappings": ";;;;UAAA,aACE;IAAK,gCAAMA,WAAM",
|
||||||
|
"names": Array [
|
||||||
|
"render",
|
||||||
|
],
|
||||||
|
"sources": Array [
|
||||||
|
"example.vue",
|
||||||
|
],
|
||||||
|
"sourcesContent": Array [
|
||||||
|
"
|
||||||
|
<div><p>{{ render }}</p></div>
|
||||||
|
",
|
||||||
|
],
|
||||||
|
"version": 3,
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`template errors 1`] = `
|
||||||
|
Array [
|
||||||
|
[SyntaxError: Invalid JavaScript expression. (2:13)],
|
||||||
|
[SyntaxError: v-bind is missing expression. (1:6)],
|
||||||
|
[SyntaxError: v-model can only be used on <input>, <textarea> and <select> elements. (2:17)],
|
||||||
|
]
|
||||||
|
`;
|
@ -1,5 +1,3 @@
|
|||||||
// TODO need more thorough tests here
|
|
||||||
|
|
||||||
import { compileTemplate } from '../src/compileTemplate'
|
import { compileTemplate } from '../src/compileTemplate'
|
||||||
import { parse, SFCTemplateBlock } from '../src/parse'
|
import { parse, SFCTemplateBlock } from '../src/parse'
|
||||||
|
|
||||||
@ -50,3 +48,70 @@ test('warn missing preprocessor', () => {
|
|||||||
|
|
||||||
expect(result.errors.length).toBe(1)
|
expect(result.errors.length).toBe(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('transform asset url options', () => {
|
||||||
|
const input = { source: `<foo bar="baz"/>`, filename: 'example.vue' }
|
||||||
|
// Object option
|
||||||
|
const { code: code1 } = compileTemplate({
|
||||||
|
...input,
|
||||||
|
transformAssetUrls: { foo: ['bar'] }
|
||||||
|
})
|
||||||
|
expect(code1).toMatch(`import _imports_0 from 'baz'\n`)
|
||||||
|
// false option
|
||||||
|
const { code: code2 } = compileTemplate({
|
||||||
|
...input,
|
||||||
|
transformAssetUrls: false
|
||||||
|
})
|
||||||
|
expect(code2).not.toMatch(`import _imports_0 from 'baz'\n`)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('source map', () => {
|
||||||
|
const template = parse(
|
||||||
|
`
|
||||||
|
<template>
|
||||||
|
<div><p>{{ render }}</p></div>
|
||||||
|
</template>
|
||||||
|
`,
|
||||||
|
{ filename: 'example.vue', sourceMap: true }
|
||||||
|
).template as SFCTemplateBlock
|
||||||
|
|
||||||
|
const result = compileTemplate({
|
||||||
|
filename: 'example.vue',
|
||||||
|
source: template.content
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.map).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('template errors', () => {
|
||||||
|
const result = compileTemplate({
|
||||||
|
filename: 'example.vue',
|
||||||
|
source: `<div :foo
|
||||||
|
:bar="a[" v-model="baz"/>`
|
||||||
|
})
|
||||||
|
expect(result.errors).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('preprocessor errors', () => {
|
||||||
|
const template = parse(
|
||||||
|
`
|
||||||
|
<template lang="pug">
|
||||||
|
div(class='class)
|
||||||
|
</template>
|
||||||
|
`,
|
||||||
|
{ filename: 'example.vue', sourceMap: true }
|
||||||
|
).template as SFCTemplateBlock
|
||||||
|
|
||||||
|
const result = compileTemplate({
|
||||||
|
filename: 'example.vue',
|
||||||
|
source: template.content,
|
||||||
|
preprocessLang: template.lang
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.errors.length).toBe(1)
|
||||||
|
const message = result.errors[0].toString()
|
||||||
|
expect(message).toMatch(`Error: example.vue:3:1`)
|
||||||
|
expect(message).toMatch(
|
||||||
|
`The end of the string reached with no closing bracket ) found.`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
@ -65,10 +65,19 @@ export function compileTemplate(
|
|||||||
const preprocessor =
|
const preprocessor =
|
||||||
preprocessLang && consolidate[preprocessLang as keyof typeof consolidate]
|
preprocessLang && consolidate[preprocessLang as keyof typeof consolidate]
|
||||||
if (preprocessor) {
|
if (preprocessor) {
|
||||||
|
try {
|
||||||
return doCompileTemplate({
|
return doCompileTemplate({
|
||||||
...options,
|
...options,
|
||||||
source: preprocess(options, preprocessor)
|
source: preprocess(options, preprocessor)
|
||||||
})
|
})
|
||||||
|
} catch (e) {
|
||||||
|
return {
|
||||||
|
code: `export default function render() {}`,
|
||||||
|
source: options.source,
|
||||||
|
tips: [],
|
||||||
|
errors: [e]
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (preprocessLang) {
|
} else if (preprocessLang) {
|
||||||
return {
|
return {
|
||||||
code: `export default function render() {}`,
|
code: `export default function render() {}`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user