2024-10-05 23:52:05 +08:00
|
|
|
const fs = require("fs");
|
|
|
|
const path = require("path");
|
2021-09-07 15:08:58 +08:00
|
|
|
const walkCssTokens = require("../lib/css/walkCssTokens");
|
|
|
|
|
|
|
|
describe("walkCssTokens", () => {
|
|
|
|
const test = (name, content, fn) => {
|
2024-10-05 23:52:05 +08:00
|
|
|
it(`should parse ${name}`, () => {
|
2021-09-07 15:08:58 +08:00
|
|
|
const results = [];
|
|
|
|
walkCssTokens(content, {
|
2021-12-17 03:42:44 +08:00
|
|
|
isSelector: () => true,
|
2021-09-07 15:08:58 +08:00
|
|
|
url: (input, s, e, cs, ce) => {
|
|
|
|
results.push(["url", input.slice(s, e), input.slice(cs, ce)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
leftCurlyBracket: (input, s, e) => {
|
|
|
|
results.push(["leftCurlyBracket", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
rightCurlyBracket: (input, s, e) => {
|
|
|
|
results.push(["rightCurlyBracket", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
leftParenthesis: (input, s, e) => {
|
|
|
|
results.push(["leftParenthesis", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
rightParenthesis: (input, s, e) => {
|
|
|
|
results.push(["rightParenthesis", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
semicolon: (input, s, e) => {
|
|
|
|
results.push(["semicolon", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
comma: (input, s, e) => {
|
|
|
|
results.push(["comma", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
pseudoClass: (input, s, e) => {
|
|
|
|
results.push(["pseudoClass", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
pseudoFunction: (input, s, e) => {
|
|
|
|
results.push(["pseudoFunction", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2021-12-01 20:27:00 +08:00
|
|
|
atKeyword: (input, s, e) => {
|
|
|
|
results.push(["atKeyword", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2021-09-07 15:08:58 +08:00
|
|
|
class: (input, s, e) => {
|
|
|
|
results.push(["class", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
identifier: (input, s, e) => {
|
|
|
|
results.push(["identifier", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2024-10-09 14:21:00 +08:00
|
|
|
hash: (input, s, e, isID) => {
|
|
|
|
results.push(["hash", input.slice(s, e), isID]);
|
2021-09-07 15:08:58 +08:00
|
|
|
return e;
|
2024-10-05 23:52:05 +08:00
|
|
|
},
|
|
|
|
string: (input, s, e) => {
|
|
|
|
results.push(["string", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
function: (input, s, e) => {
|
|
|
|
results.push(["function", input.slice(s, e)]);
|
|
|
|
return e;
|
2021-09-07 15:08:58 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
fn(expect(results));
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2024-10-05 23:52:05 +08:00
|
|
|
const casesPath = path.resolve(__dirname, "./configCases/css/parsing/cases");
|
|
|
|
const tests = fs
|
|
|
|
.readdirSync(casesPath)
|
|
|
|
.filter(test => /\.css/.test(test))
|
|
|
|
.map(item => [
|
|
|
|
item,
|
|
|
|
fs.readFileSync(path.resolve(casesPath, item), "utf-8")
|
|
|
|
]);
|
2021-12-01 20:27:00 +08:00
|
|
|
|
2024-10-05 23:52:05 +08:00
|
|
|
for (const [name, code] of tests) {
|
|
|
|
test(name, code, e => e.toMatchSnapshot());
|
|
|
|
}
|
2021-09-07 15:08:58 +08:00
|
|
|
});
|