collapse-adjacent-rules.test.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import fs from 'fs'
  2. import path from 'path'
  3. import { run, html, css } from './util/run'
  4. test('collapse adjacent rules', () => {
  5. let config = {
  6. content: [path.resolve(__dirname, './collapse-adjacent-rules.test.html')],
  7. corePlugins: { preflight: false },
  8. theme: {},
  9. plugins: [
  10. function ({ addVariant }) {
  11. addVariant('foo-bar', '@supports (foo: bar)')
  12. },
  13. ],
  14. }
  15. let input = css`
  16. @tailwind base;
  17. @font-face {
  18. font-family: 'Inter';
  19. src: url('/fonts/Inter.woff2') format('woff2'), url('/fonts/Inter.woff') format('woff');
  20. }
  21. @font-face {
  22. font-family: 'Gilroy';
  23. src: url('/fonts/Gilroy.woff2') format('woff2'), url('/fonts/Gilroy.woff') format('woff');
  24. }
  25. @page {
  26. margin: 1cm;
  27. }
  28. @tailwind components;
  29. @tailwind utilities;
  30. @layer base {
  31. @font-face {
  32. font-family: 'Poppins';
  33. src: url('/fonts/Poppins.woff2') format('woff2'), url('/fonts/Poppins.woff') format('woff');
  34. }
  35. @font-face {
  36. font-family: 'Proxima Nova';
  37. src: url('/fonts/ProximaNova.woff2') format('woff2'),
  38. url('/fonts/ProximaNova.woff') format('woff');
  39. }
  40. }
  41. .foo,
  42. .bar {
  43. color: black;
  44. }
  45. .foo,
  46. .bar {
  47. font-weight: 700;
  48. }
  49. .some-apply-thing {
  50. @apply foo-bar:md:text-black foo-bar:md:font-bold foo-bar:text-black foo-bar:font-bold md:font-bold md:text-black;
  51. }
  52. `
  53. return run(input, config).then((result) => {
  54. let expectedPath = path.resolve(__dirname, './collapse-adjacent-rules.test.css')
  55. let expected = fs.readFileSync(expectedPath, 'utf8')
  56. expect(result.css).toMatchFormattedCss(expected)
  57. })
  58. })
  59. test('duplicate url imports does not break rule collapsing', () => {
  60. let config = {
  61. content: [{ raw: html`` }],
  62. corePlugins: { preflight: false },
  63. }
  64. let input = css`
  65. @import url('https://example.com');
  66. @import url('https://example.com');
  67. `
  68. return run(input, config).then((result) => {
  69. expect(result.css).toMatchFormattedCss(css`
  70. @import url('https://example.com');
  71. `)
  72. })
  73. })