123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- import { parse } from '../src/parse'
- import { compileStyle, compileStyleAsync } from '../src/compileStyle'
- test('preprocess less', () => {
- const style = parse({
- source:
- '<style lang="less">\n' +
- '@red: rgb(255, 0, 0);\n' +
- '.color { color: @red; }\n' +
- '</style>\n',
- filename: 'example.vue',
- sourceMap: true
- }).styles[0]
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: style.content,
- map: style.map,
- scoped: false,
- preprocessLang: style.lang
- })
- expect(result.errors.length).toBe(0)
- expect(result.code).toEqual(expect.stringContaining('color: #ff0000;'))
- expect(result.map).toBeTruthy()
- })
- test('preprocess scss', () => {
- const style = parse({
- source:
- '<style lang="scss">\n' +
- '$red: red;\n' +
- '.color { color: $red; }\n' +
- '</style>\n',
- filename: 'example.vue',
- sourceMap: true
- }).styles[0]
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: style.content,
- map: style.map,
- scoped: false,
- preprocessLang: style.lang
- })
- expect(result.errors.length).toBe(0)
- expect(result.code).toMatch('color: red;')
- expect(result.map).toBeTruthy()
- })
- test('preprocess sass', () => {
- const style = parse({
- source:
- '<style lang="sass">\n' +
- '$red: red\n' +
- '.color\n' +
- ' color: $red\n' +
- '</style>\n',
- filename: 'example.vue',
- sourceMap: true
- }).styles[0]
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: style.content,
- map: style.map,
- scoped: false,
- preprocessLang: style.lang
- })
- expect(result.errors.length).toBe(0)
- expect(result.code).toMatch('color: red;')
- expect(result.map).toBeTruthy()
- })
- test('preprocess stylus', () => {
- const style = parse({
- source:
- '<style lang="styl">\n' +
- 'red-color = rgb(255, 0, 0);\n' +
- '.color\n' +
- ' color: red-color\n' +
- '</style>\n',
- filename: 'example.vue',
- sourceMap: true
- }).styles[0]
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: style.content,
- map: style.map,
- scoped: false,
- preprocessLang: style.lang
- })
- expect(result.errors.length).toBe(0)
- expect(result.code).toEqual(expect.stringContaining('color: #f00;'))
- expect(result.map).toBeTruthy()
- })
- test('custom postcss plugin', () => {
- const spy = vi.fn()
- compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: '.foo { color: red }',
- scoped: false,
- postcssPlugins: [require('postcss').plugin('test-plugin', () => spy)()]
- })
- expect(spy).toHaveBeenCalled()
- })
- test('custom postcss options', () => {
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: '.foo { color: red }',
- scoped: false,
- postcssOptions: { random: 'foo' }
- })
- expect((result.rawResult as any).opts.random).toBe('foo')
- })
- test('async postcss plugin in sync mode', () => {
- const result = compileStyle({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: '.foo { color: red }',
- scoped: false,
- postcssPlugins: [
- require('postcss').plugin(
- 'test-plugin',
- () => async (result: any) => result
- )
- ]
- })
- expect(result.errors).toHaveLength(1)
- })
- test('async postcss plugin', async () => {
- const promise = compileStyleAsync({
- id: 'v-scope-xxx',
- filename: 'example.vue',
- source: '.foo { color: red }',
- scoped: false,
- postcssPlugins: [
- require('postcss').plugin(
- 'test-plugin',
- () => async (result: any) => result
- )
- ]
- })
- expect(promise instanceof Promise).toBe(true)
- const result = await promise
- expect(result.errors).toHaveLength(0)
- expect(result.code).toEqual(expect.stringContaining('color: red'))
- })
- test('media query', () => {
- const result = compileStyle({
- id: 'v-scope-xxx',
- scoped: true,
- filename: 'example.vue',
- source: `
- @media print {
- .foo {
- color: #000;
- }
- }`
- })
- expect(result.errors).toHaveLength(0)
- expect(result.code).toContain(
- '@media print {\n.foo[v-scope-xxx] {\n color: #000;\n}\n}'
- )
- })
- test('supports query', () => {
- const result = compileStyle({
- id: 'v-scope-xxx',
- scoped: true,
- filename: 'example.vue',
- source: `
- @supports ( color: #000 ) {
- .foo {
- color: #000;
- }
- }`
- })
- expect(result.errors).toHaveLength(0)
- expect(result.code).toContain(
- '@supports ( color: #000 ) {\n.foo[v-scope-xxx] {\n color: #000;\n}\n}'
- )
- })
|