Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix
isStandardSyntaxDeclaration.test.js
that use callbacks (#4972)
- Loading branch information
1 parent
17d740d
commit fd6e13b
Showing
1 changed file
with
66 additions
and
128 deletions.
There are no files selected for viewing
194 changes: 66 additions & 128 deletions
194
lib/utils/__tests__/isStandardSyntaxDeclaration.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |