vue3-yuanma/packages/vue/__tests__/runtimeCompilerOptions.spec.ts
Evan You ce0bbe053a feat: support component-level compilerOptions when using runtime compiler
- The `delimiters` component option is deprecated.
  Use `compilerOptions.delimiters` instead.
2021-04-28 11:40:16 -04:00

105 lines
2.9 KiB
TypeScript

import { createApp } from 'vue'
describe('config.compilerOptions', () => {
test('isCustomElement', () => {
const app = createApp({
template: `<foo/>`
})
app.config.compilerOptions.isCustomElement = (tag: string) => tag === 'foo'
const root = document.createElement('div')
app.mount(root)
expect(root.innerHTML).toBe('<foo></foo>')
})
test('comments', () => {
const app = createApp({
template: `<div/><!--test--><div/>`
})
app.config.compilerOptions.comments = true
// the comments option is only relevant in production mode
__DEV__ = false
const root = document.createElement('div')
app.mount(root)
expect(root.innerHTML).toBe('<div></div><!--test--><div></div>')
__DEV__ = true
})
test('whitespace', () => {
const app = createApp({
template: `<div><span/>\n <span/></div>`
})
app.config.compilerOptions.whitespace = 'preserve'
const root = document.createElement('div')
app.mount(root)
expect(root.firstChild!.childNodes.length).toBe(3)
expect(root.firstChild!.childNodes[1].nodeType).toBe(Node.TEXT_NODE)
})
test('delimiters', () => {
const app = createApp({
data: () => ({ foo: 'hi' }),
template: `[[ foo ]]`
})
app.config.compilerOptions.delimiters = [`[[`, `]]`]
const root = document.createElement('div')
app.mount(root)
expect(root.textContent).toBe('hi')
})
})
describe('per-component compilerOptions', () => {
test('isCustomElement', () => {
const app = createApp({
template: `<foo/>`,
compilerOptions: {
isCustomElement: (tag: string) => tag === 'foo'
}
})
const root = document.createElement('div')
app.mount(root)
expect(root.innerHTML).toBe('<foo></foo>')
})
test('comments', () => {
const app = createApp({
template: `<div/><!--test--><div/>`,
compilerOptions: {
comments: true
}
})
app.config.compilerOptions.comments = false
// the comments option is only relevant in production mode
__DEV__ = false
const root = document.createElement('div')
app.mount(root)
expect(root.innerHTML).toBe('<div></div><!--test--><div></div>')
__DEV__ = true
})
test('whitespace', () => {
const app = createApp({
template: `<div><span/>\n <span/></div>`,
compilerOptions: {
whitespace: 'preserve'
}
})
const root = document.createElement('div')
app.mount(root)
expect(root.firstChild!.childNodes.length).toBe(3)
expect(root.firstChild!.childNodes[1].nodeType).toBe(Node.TEXT_NODE)
})
test('delimiters', () => {
const app = createApp({
data: () => ({ foo: 'hi' }),
template: `[[ foo ]]`,
compilerOptions: {
delimiters: [`[[`, `]]`]
}
})
const root = document.createElement('div')
app.mount(root)
expect(root.textContent).toBe('hi')
})
})