diff --git a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js b/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js index c0a3fc5978..bfc969d712 100644 --- a/lib/utils/__tests__/isStandardSyntaxDeclaration.test.js +++ b/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); }