Skip to content

Commit

Permalink
Fix isStandardSyntaxDeclaration.test.js that use callbacks (#4972)
Browse files Browse the repository at this point in the history
  • Loading branch information
ybiquitous committed Oct 16, 2020
1 parent 17d740d commit fd6e13b
Showing 1 changed file with 66 additions and 128 deletions.
194 changes: 66 additions & 128 deletions lib/utils/__tests__/isStandardSyntaxDeclaration.test.js
@@ -1,241 +1,179 @@
'use strict';

const isStandardSyntaxDeclaration = require('../isStandardSyntaxDeclaration');
const less = require('postcss-less');
const postcss = require('postcss');
const sass = require('postcss-sass');
const scss = require('postcss-scss');
const postcssLess = require('postcss-less');
const postcssSass = require('postcss-sass');
const postcssScss = require('postcss-scss');

describe('isStandardSyntaxDeclaration', () => {
it('standard prop and value', () => {
decls('a { a: b }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(decl('a { a: b }'))).toBe(true);
});

it('standard prop and scss var', () => {
decls('a { a: $b }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(decl('a { a: $b }'))).toBe(true);
});

it('custom-property', () => {
decls('a { --custom-property: x }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(decl('a { --custom-property: x }'))).toBe(true);
});

it('standard prop and calc value', () => {
decls('a { a : calc(b + c) }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(decl('a { a : calc(b + c) }'))).toBe(true);
});

it('does not break @selector', () => {
decls('@page { size: A4 }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(decl('@page { size: A4 }'))).toBe(true);
});

it('custom property set in SASS paser', () => {
sassDecls('a\n\t--custom-property-set:\n\t\tcolor: blue', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
it('custom property set in SASS parser', () => {
expect(
isStandardSyntaxDeclaration(sassDecl('a\n\t--custom-property-set:\n\t\tcolor: blue')),
).toBe(true);
});

it('custom property set in SCSS paser', () => {
scssDecls('a { --custom-property-set: { color: blue; } }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
it('custom property set in SCSS parser', () => {
expect(
isStandardSyntaxDeclaration(scssDecl('a { --custom-property-set: { color: blue; } }')),
).toBe(true);
});

it('custom property set in LESS paser', () => {
lessDecls('a { --custom-property-set: { color: blue; } }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
it('custom property set in LESS parser', () => {
expect(
isStandardSyntaxDeclaration(lessDecl('a { --custom-property-set: { color: blue; } }')),
).toBe(true);
});

it('property with sass variable interpolation (only)', () => {
sassDecls('a\n\t#{$var}: 10px', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\t#{$var}: 10px'))).toBe(true);
});

it('property with scss variable interpolation (only)', () => {
scssDecls('a { #{$var}: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { #{$var}: 10px; }'))).toBe(true);
});

it('property with sass variable interpolation (end)', () => {
sassDecls('a\n\tprop#{$var}: 10px', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\tprop#{$var}: 10px'))).toBe(true);
});

it('property with scss variable interpolation (end)', () => {
scssDecls('a { prop#{$var}: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { prop#{$var}: 10px; }'))).toBe(true);
});

it('property with sass variable interpolation (middle)', () => {
sassDecls('a\n\tprop#{$var}erty: 10px', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\tprop#{$var}erty: 10px'))).toBe(true);
});

it('property with scss variable interpolation (middle)', () => {
scssDecls('a { prop#{$var}erty: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { prop#{$var}erty: 10px; }'))).toBe(true);
});

it('property with less variable interpolation (only)', () => {
lessDecls('a { @{var}: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(lessDecl('a { @{var}: 10px; }'))).toBe(true);
});

it('property with less variable interpolation (end)', () => {
lessDecls('a { prop@{var}: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(lessDecl('a { prop@{var}: 10px; }'))).toBe(true);
});

it('property with less variable interpolation (middle)', () => {
lessDecls('a { prop@{var}erty: 10px; }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeTruthy();
});
expect(isStandardSyntaxDeclaration(lessDecl('a { prop@{var}erty: 10px; }'))).toBe(true);
});

it('sass var', () => {
sassDecls('$var: b', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('$var: b'))).toBe(false);
});

it('scss var', () => {
scssDecls('$var: b', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('$var: b'))).toBe(false);
});

it('scss var within namespace', () => {
scssDecls('namespace.$var: b', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('namespace.$var: b'))).toBe(false);
});

it('nested scss var within namespace', () => {
scssDecls('a { namespace.$var: b }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { namespace.$var: b }'))).toBe(false);
});

it('sass list', () => {
sassDecls('$list: (key: value, key2: value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('$list: (key: value, key2: value2)'))).toBe(false);
});

it('scss list', () => {
scssDecls('$list: (key: value, key2: value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('$list: (key: value, key2: value2)'))).toBe(false);
});

it('sass map', () => {
sassDecls('$map: (value, value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('$map: (value, value2)'))).toBe(false);
});

it('scss map', () => {
scssDecls('$map: (value, value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('$map: (value, value2)'))).toBe(false);
});

it('nested sass var', () => {
sassDecls('a\n\t$var: b', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\t$var: b'))).toBe(false);
});

it('nested scss var', () => {
scssDecls('a { $var: b }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { $var: b }'))).toBe(false);
});

it('nested sass list', () => {
sassDecls('a\n\t$list: (key: value, key2: value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\t$list: (key: value, key2: value2)'))).toBe(
false,
);
});

it('nested scss list', () => {
scssDecls('a { $list: (key: value, key2: value2) }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { $list: (key: value, key2: value2) }'))).toBe(
false,
);
});

it('sass nested property', () => {
sassDecls('a\n\tborder:\n\t\tstyle: solid\n\t\tcolor: red', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\tborder:\n\t\tstyle: solid'))).toBe(false);
});

it('scss nested property', () => {
scssDecls('a { border: { style: solid; color: red; } }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { border: { style: solid; } }'))).toBe(false);
});

it('nested sass map', () => {
sassDecls('a\n\t$map: (value, value2)', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(sassDecl('a\n\t$map: (value, value2)'))).toBe(false);
});

it('nested scss map', () => {
scssDecls('a { $map: (value, value2) }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
});

it('less var', () => {
lessDecls('@var: b', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
});

it('nested less var', () => {
lessDecls('a { @var: b }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(scssDecl('a { $map: (value, value2) }'))).toBe(false);
});

it('less &:extend', () => {
lessDecls('a { &:extend(b) }', (decl) => {
expect(isStandardSyntaxDeclaration(decl)).toBeFalsy();
});
expect(isStandardSyntaxDeclaration(lessDecl('a { &:extend(b) }'))).toBe(false);
});
});

function decls(css, cb) {
postcss.parse(css).walkDecls(cb);
function decl(css, parser = postcss) {
const list = [];

parser.parse(css).walkDecls((d) => list.push(d));

if (list.length === 1) {
return list[0];
}

throw new Error(`Expected length 1, but ${list.length}`);
}

function sassDecls(css, cb) {
sass.parse(css).walkDecls(cb);
function sassDecl(css) {
return decl(css, postcssSass);
}

function scssDecls(css, cb) {
scss.parse(css).walkDecls(cb);
function scssDecl(css) {
return decl(css, postcssScss);
}

function lessDecls(css, cb) {
less.parse(css).walkDecls(cb);
function lessDecl(css) {
return decl(css, postcssLess);
}

0 comments on commit fd6e13b

Please sign in to comment.