Uname: Linux webm016.cluster127.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 7.4.33 [ PHP INFO ] PHP os: Linux
Server Ip: 54.36.31.145
Your Ip: 216.73.216.182
User: homesquasz (91404) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : index.spec.ts
import * as fs from 'fs';
import * as postcssSyntax from 'postcss-scss';

import cssSelectorExtract, { process, processSync } from './';

describe(`cssSelectorExtract`, () => {
  const css = fs.readFileSync(`test/css/test.css`, { encoding: `utf8` });
  const scss = fs.readFileSync(`test/css/test.scss`, { encoding: `utf8` });
  const scssSyntaxTest = fs.readFileSync(`test/css/scss-syntax-test.scss`, { encoding: `utf8` });
  const scssPreserveLinesTest = fs.readFileSync(`test/css/preserve-lines-test.scss`, { encoding: `utf8` });

  test(`It should be an object.`, () => {
    expect(typeof cssSelectorExtract).toBe(`object`);
  });

  describe(`process()`, () => {
    test(`It should be a function.`, () => {
      expect(typeof process).toBe(`function`);
    });

    test(`CSS: correct way to extract default selector - should return filtered selector.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test1.css`, { encoding: `utf8` });
      const filters = [`.test-selector`];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`CSS: correct way to extract nested selector - should return filtered selector.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test2.css`, { encoding: `utf8` });
      const filters = [`.nest .nested-test-selector`];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`CSS: wrong way to extract nested selector - should return empty string.`, () => {
      const filters = [`.nested-test-selector`];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(``);
        });
    });

    test(`CSS: correct way to extract @media nested selector - should return filtered selector.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test3.css`, { encoding: `utf8` });
      const filters = [`.nested-in-media-query`];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`CSS: selector replacement - should return replaced selector.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test4.css`, { encoding: `utf8` });
      const filters = [{
        selector: `.test-selector`,
        replacement: `.test-selector-replaced`,
      }];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`SCSS: wrong way to extract nested selector - should return empty string.`, () => {
      const filters = [`.nested-test-selector`];
      return process({ css: scss, filters, postcssSyntax })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(``);
        });
    });

    test(`SCSS: extract multiple instances of a selector with nested child selectors - should return the selectors with all nested selectors.`, () => {
      const referenceScss = fs.readFileSync(`test/css/reference/test5.scss`, { encoding: `utf8` });
      const filters = [
        `.nest`,
        `.commma-nest-test`,
        {
          selector: `.replace-nest-test`,
          replacement: `.replaced-nest-test`,
        },
        {
          selector: `.replace-nested-test-selector`,
          replacement: `.replaced-nested-test-selector`,
        },
      ];
      return process({ css: scss, filters, postcssSyntax })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceScss.trim());
        });
    });

    test(`SCSS: correct way to extract @media nested selector - should return filtered selector.`, () => {
      const referenceScss = fs.readFileSync(`test/css/reference/test6.scss`, { encoding: `utf8` });
      const filters = [`.media-query-in-test-selector`];
      return process({ css: scss, filters, postcssSyntax })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceScss.trim());
        });
    });

    test(`SCSS: test SCSS syntax - should finish without errors.`, () => {
      const referenceScss = fs.readFileSync(`test/css/reference/test7.scss`, { encoding: `utf8` });
      const filters = [`.none`];
      return process({ css: scssSyntaxTest, filters, postcssSyntax })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceScss.trim());
        });
    });

    test(`RegEx: extract selectors using regular expressions.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test8.css`, { encoding: `utf8` });
      const filters = [/^\.test-.*/];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`RegEx: extract and replace selectors using regular expressions.`, () => {
      const referenceCss = fs.readFileSync(`test/css/reference/test9.css`, { encoding: `utf8` });
      const filters = [{
        selector: /^\.test-(.+)-(.+).*/,
        replacement: `.test__$1--$2`,
      }];
      return process({ css, filters })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`Bootstrap: extract and replace selectors using regular expressions.`, () => {
      const bootstrapCss = fs.readFileSync(`node_modules/bootstrap/scss/_alert.scss`, {
        encoding: `utf8`,
      });
      const referenceCss = fs.readFileSync(`test/css/reference/test10.scss`, { encoding: `utf8` });
      const filters = [
        `.alert`,
        `.close`,
        {
          selector: `.alert-heading`,
          replacement: `.alert__heading`,
        },
        {
          selector: `.alert-link`,
          replacement: `.alert__link`,
        },
        {
          selector: /^\.alert-(.+)/,
          replacement: `.alert--$1`,
        },
      ];
      return process({ css: bootstrapCss, filters, postcssSyntax })
        .then((extractCss) => {
          expect(extractCss.trim()).toBe(referenceCss.trim());
        });
    });

    test(`Extract selectors but preserve lines.`, () => {
      const referenceScss = fs.readFileSync(`test/css/reference/test11.scss`, { encoding: `utf8` });
      const filters = [`.selector2`, `.selector4`];
      return process({ css: scssPreserveLinesTest, filters, preserveLines: true })
        .then((extractScss) => {
          expect(extractScss.trim()).toBe(referenceScss.trim());
        });
    });
  });

  describe(`processSync()`, () => {
    test(`It should be a function.`, () => {
      expect(typeof processSync).toBe(`function`);
    });
  });
});
© 2026 GrazzMean