| 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}'  )})
 |