index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import fs from 'fs';
  2. import postcss from 'postcss';
  3. import test from 'ava';
  4. import {diffLines} from 'diff';
  5. import chalk from 'chalk';
  6. import plugin from '../';
  7. function getDiff (left, right) {
  8. let msg = ['\n'];
  9. diffLines(left, right).forEach(item => {
  10. if (item.added || item.removed) {
  11. let text = item.value
  12. .replace('\n', '\u00b6\n')
  13. .replace('\ufeff', '[[BOM]]');
  14. msg.push(chalk[item.added ? 'green' : 'red'](text));
  15. } else {
  16. let value = item.value.replace('\ufeff', '[[BOM]]');
  17. let lines = value.split('\n');
  18. // max line count for each item
  19. let keepLines = 6;
  20. // lines to be omitted
  21. let omitLines = lines.length - keepLines;
  22. if (lines.length > keepLines) {
  23. lines.splice(
  24. Math.floor(keepLines / 2),
  25. omitLines,
  26. chalk.gray('(...' + omitLines + ' lines omitted...)')
  27. );
  28. }
  29. msg.concat(lines);
  30. }
  31. });
  32. msg.push('\n');
  33. return msg.map(line => ' ' + line).join('');
  34. }
  35. function read (file) {
  36. return fs.readFileSync(__dirname + `/fixtures/${file}.css`, {encoding: 'utf-8'});
  37. }
  38. function exec (t, input) {
  39. let output = read(`${input}.post`);
  40. return postcss([ plugin() ]).process(read(input))
  41. .then( result => {
  42. if (result.css !== output) {
  43. t.fail(getDiff(result.css, output));
  44. }
  45. t.deepEqual(result.warnings().length, 0);
  46. });
  47. }
  48. test(
  49. 'Overridden @keyframes should be discarded correctly.',
  50. exec,
  51. 'keyframes'
  52. );
  53. test(
  54. 'Overridden @counter-style should be discarded correctly.',
  55. exec,
  56. 'counter-style'
  57. );