/
isContextFunctionalPseudoClass.test.js
48 lines (43 loc) · 1.54 KB
/
isContextFunctionalPseudoClass.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'use strict';
const isContextFunctionalPseudoClass = require('../isContextFunctionalPseudoClass');
const parseSelector = require('postcss-selector-parser');
const postcss = require('postcss');
function selector(css, cb) {
postcss.parse(css).walkRules((rule) => {
parseSelector((selectorAST) => {
selectorAST.walkPseudos(cb);
}).processSync(rule.selector);
});
}
describe('isContextFunctionalPseudoClass', () => {
it('handles non-context-functional pseudo-classes, like hover', () => {
selector('a:hover {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(false);
});
});
it('handles logical combinations, ', () => {
selector('a:has(.foo) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
selector('a:is(.foo) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
selector('a:matches(.foo) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
selector('a:not(.foo) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
selector('a:where(.foo) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
});
it('handles tree structural/NPlusBOfSNotationPseudoClasses classes', () => {
selector('a:nth-child(n+7) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
selector('a:nth-last-child(n+7) {}', (selector) => {
expect(isContextFunctionalPseudoClass(selector)).toBe(true);
});
});
});